7.0 设计模式6大原则
1.单一职责原则(Single Responsibility Principle)
2.里氏替换原则(Liskov Substitution Principle)
3.依赖倒置原则(Dependence Inversion Principle)
4.接口隔离原则(Interface Segregation Principle)
5.迪米特法则 (Law Of Demeter)
6.开闭原则 (Open Closed Principle)
一.单一职责原则(SRP):类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。面向对象语言开发,类是一个基本单位,单一职责原则就是封装的粒度.
方法级别的单一职责原则:一个方法只负责一件事儿(职责分拆小方法,分支逻辑分拆)
类级别的单一职责原则:一个类只负责一件事儿
类库级别的单一职责原则:一个类库应该职责清晰
项目级别的单一职责原则:一个项目应该职责清晰(客户端/管理后台/后台服务/定时任务/分布式引擎)
系统级别的单一职责原则:为通用功能拆分系统(IP定位/日志/在线统计)
二.里氏替换原则(LSP):任何使用基类的地方,都可以透明的使用其子类,
继承、多态
继承:子类拥有父类的一切属性和行为,任何父类出现的地方,都可以用子类来代替
继承+透明(安全,不会出现行为不一致)
1 父类有的,子类是必须有的;
如果出现了子类没有的东西,那么就应该断掉继承;
2 子类可以有自己的属性和行为
子类出现的地方,父类不一定能代替(白马非马)
3 父类实现的东西,子类就不要再写了,(就是不要new隐藏)
有时候会出现意想不到的情况,把父类换成子类后,行为不一致
如果想修改父类的行为,通过abstract/virtual
声明属性、字段、变量,尽量声明为父类
三.依赖倒置原则(DIP):高层模块不应该依赖于低层模块,二者应该通过抽象依赖(依赖抽象,而不是依赖细节)
抽象:接口/抽象类--可以包含没有实现的元素
细节:普通类--一切都是确定的
面向抽象编程:尽量的使用抽象,80%的设计模式都是跟抽象有关
属性 字段 方法参数 返回值。。。尽量都是抽象
依赖倒置原则(理论基础)---IOC控制反转(实践封装)---DI依赖注入(实现IOC的手段)
面向对象语言开发,就是类与类之间进行交互,如果高层直接依赖低层的细节,细节是多变的,那么低层的变化就导致上层的变化;如果层数多了,底层的修改会直接水波效应传递到最上层,一点细微的改动都会导致整个系统从下往上的修改(这就是大家经常加班的原因)
面向抽象,如果高层和低层没有直接依赖,而是依赖于抽象,抽象一般是稳定的,那低层细节的变化扩展就不会影响到高层,这样就能支持层内部的横向扩展,不会影响其他地方,这样的程序架构就是稳定的
四.接口隔离原则(ISP):客户端不应该依赖它不需要的接口;
一个类对另一个类的依赖应该建立在最小的接口上;
五.迪米特法则(最少知道原则)LOD:一个对象应该对其他对象保持最少的了解。迪米特法则,降低类与类之间的耦合
类与类之间的关系:
纵向:继承≈实现(最密切)
横向:聚合> 组合> 关联> 依赖(出现在方法内部)
六.开闭原则:对扩展开放,对修改关闭。开闭原则只是一个目标,并没有任何的手段,也被称之为总则
修改:修改现有代码(类)
扩展:增加代码(类)