前言
设计原则部分主要从下面几个方面来简单分析:
1.定义
2.研究对象
3.如何操作
单一原则
1.定义:一个类只有一个职责,且类如果发生变更,有且只有一个原因。
2.研究对象:类和职责,即一个类对应一个职责
3.如何操作
1)职责划分的粒度可以由粗到细
2)多余的职责需要分离出去
3)需求变更导致的职责应该使用代理模式等进行拓展,而不是堆积到一个类里面
里氏替换原则
1.定义:任何基类可以出现的地方,子类一定可以出现。
2.研究对象:类的继承
3.如何操作:
1)基类的设计应该选择由高到低(子基类)或由粗到细(抽象方法精简),防止无用的继承入侵到子类中
2)如果子类继承了基类,尽量不要完全重写父类方法,除非是子类完全个性化的实现。
3)如果子类完全修改了父类的实现,就要慎重考虑他们之间是不是继承关系。这时候,子类可能需要继承一个更高层次的基类或者将他们之间改为关联关系。
//尽量采用这样的覆盖
@Override
public void doOverride(){
super.doOverride();
//子类的个性化实现
}
依赖倒置原则
1.定义: 程序要依赖于抽象接口,不要依赖于具体实现,这样降低客户程序与实现细节的耦合性
2.研究对象:类的抽象与实现
3.如何操作:
1)从具体实现中找出公共的部分,独立出来抽象成接口
2)不管高层次还是低层次,都依赖于抽象接口编程
接口隔离原则
1.定义: 要为各个类建立它们需要的专用接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用
2.研究对象:抽象公共接口的粒度和数量
3.如何操作:
1)一个接口服务于一个子模块或业务逻辑。
2)接口数量尽量少,提高内聚,减少对外交互 。
3)具体依赖类可以同时实现多个独立接口
迪米特原则(最少知识原则)
1.定义: 一个对象应该对其他对象保持最少的了解或者通信
2.研究对象:类/对象与类/对象的关系
3.如何操作:
1)降低类内部引用(与其他类的关联或依赖关系)
2)典型设计模式用例:Mediator模式,Facade模式
开闭原则
1.定义: 拓展开放,修改封闭
2.研究对象:类的抽象与多态性
3.如何操作:
1)通过继承关系拓展
2)通过关联关系拓展