设计模式的7大基本原则:
设计模式的原则:构建可以服用,可以维护代码的经验法则
原则(一)接口隔离原则:
接口里面只做必要的事情,不做其他不相关的事情;也就是一个类对另一个类的依赖应该建立在最小的接口上;例如:类A通过接口 Interface1 依赖类B,类C通过接口 Interface1 依赖类D,如果接口 Interface1 对于类A和类C来说不是最小接口,那么类 B 和类 D 必须去实现他们不需要的方法。
将接口 Interface1 拆分为独立的几个接口(这里我们拆分成 3 个接口),类 A 和类 C 分别与他们需要的接口建立依赖关系。也就是采用接口隔离原则;
原则(二)开闭原则:
对模块 扩展开发,对修改关闭,.m里面的实现代码不改变;
原则(三)里氏替换原则:
任何类可以出现的地方,子类一定可以出现,子类跟父类可以相互替换,子类可以用父类的所有方法;
简单点说:子类可以实现父类的抽象方法,但是不能覆盖父类的非抽象方法;子类可以增加自己特有的方法;
原则(四)依赖倒转原则:
抽象不依赖细节,细节依赖抽象;
1)高层模块不应该依赖低层模块,二者都应该依赖其抽象
2)抽象不应该依赖细节,细节应该依赖抽象
3)依赖倒转(倒置)的中心思想是面向接口编程
4)依赖倒转原则是基于这样的设计理念:相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建的架构比以细节为基础的架构要稳定的多。在java中,抽象指的是接口或抽象类,细节就是具体的实现类。
5)使用接口或抽象类的目的是制定好规范,而不涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成。
依赖倒转原则的注意事项和细节
1)低层模块尽量都要有抽象类或接口,或者两者都有,程序稳定性更好
2)变量的声明类型尽量是抽象类或接口,这样我们的变量引用和实际对象间,就存在一个缓冲层,利于程序扩展和优化。
3)继承时遵循里氏替换原则
原则(五)聚合原则:
需要从一个类扩展出来另一个对象方法,尽量不要使用继承,使用新的方法;
原则(六)最小知识原则:
两个类没有彼此直接通信,而是使用另一个类来通信;(类似于添加一个中间类来桥接逻辑)
原则(七)单一职责原则:
一个类只负责一个功能领域;例如:如类 A 负责两个不同职责:职责 1,职责 2。当职责 1 需求变更而改变 A 时,可能造成职责 2 执行错误,所以需要将类 A 的粒度分解为 A1,A2
单一职责原则注意事项和细节:
降低类的复杂度,一个类只负责一项职责
提高类的可读性,可维护性
降低变更引起的风险
通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单一职责原则; 只有类中方法数量足够少,可以在方法级别保持单一职责原则