前言
随着计算机行业的不断发展,人们对于可以给予自身快速成长的技术非常的痴迷。就比如今天要聊的设计模式,学过编程的都知道设计模式,而很少有人会知道它的核心思想是什么,只是一味的照着网络上流行的设计模式 二十三式 依葫芦画瓢。仅做到了知其然而不知其所以然。所以今天来聊聊它出现的意义什么
意义
我们知道一个江湖的组成是非常不容易的,在江湖中也会有很多的门派与帮派,而门派一多就会有各式各样的问题,这时就出来了一个叫做设计模式的东西,来处理门派在发展过程中遇到的一般问题的解决方案。其中的话有以下五经可供参考。
五经
古有四书五经 现设计模式也有五经
第一经 单一职责
从字面上理解单一的意思可能就代表着你门派业务或者任务的单一等等,比如龙门镖局的创立之初可能就是说押押镖 送送快递之类的。而药仙谷则可能就只是制制药之类的。它们俩之间就不存在什么耦合性关系了。 翻译:一个类只负责完成一个职责或者功能。不要设计大而全的类,要设计粒度小、功能单一的类。单一职责原则是为了实现代码高内聚、低耦合、提高代码的复用性、可读性、可维护性。
如何验证单一职责掌握
- 类中的代码行数、函数或者属性过多;
- 类依赖的其他类过多,或者依赖类的其他类过多;
私有方法过多; 比较难起一个合适的名字; 类中大量的方法都是集中操作类中的某几个属性。
第二经 开闭原则
随着门派的不断发展,客户量的不断增加,就会有许多扩张方案或者活动之类。就拿龙门镖局为例:周年庆时,门派为了酬谢客户 而举办了一个活动。这个活动由于是新的业务,为了不影响旧的业务的进行,门派就新扩展了一个活动部门专门处理周年庆的事情。 翻译:软件实体(模块、类、方法等)应该对“对扩展开发、对修改关闭”,也可这样理解 那就是添加一个新的功能应该是,在已有代码基础上扩展代码(新增模块、类、方法等),而非修改已有代码(修改模块、类、方法等)
第三经 里式替换
随着活动办的非常成功,门派业务也是突飞猛进,所以门主及长老打算在荆州再开一个分局,但是分局的业务,行为与总局是一样的。 翻译:子对象能够替换程序中父类对象出现的任何地方,并且保证原来程序的逻辑行为不变及正确性不被破坏
违反了里式替换
- 子类违背父类声明要实现的功能
- 子类违背父类对输入、输出、异常的约定
- 子类违背父类注释中所罗列的任何特殊说明
第四经 接口隔离
在门派创立之初,发布了一个入门申请的规范,只要满足实现了规范上写的就可以龙门镖局了。可是有一天掌门想添加一条关于清退不合格人员,但是如果在入门那个规范里面写就不太好了 所以重新发了一份清退规范。 翻译:客户端不应该强迫依赖它不需要的接口,其中的“客户端”可以理解为接口的调用者或者使用者
第五经 依赖倒置
在第三方招人机构没有发展之前,门派的招人都是自主招人发工资的,而这时候门派与员工必须强耦合了,而这时候第三方人力公司搞出来个劳务派遣,雇主把钱给到人力公司,人力公司去招人 并发工资给员工,通过这样的方式,雇佣双方把对方的直接控制,反转到了让对方来依赖一个标准的派遣模型的接口——人力公司。 翻译:高层模块不要依赖底层模块,高层模块和低层模块应该通过抽象来互相依赖。除此之外,抽象不要依赖具体实现细节,具体实现细节依赖抽象。
ps:在调用链上,调用者属于高层,被调用者属于低层。
|