刚入手时感觉这个理由那个理由不如自己自由发挥,但写出来的代码实在太乱,维护难度非常大。苦硬自己设计时去多想这些法则,结果最好代码大大改观。
1.开闭法侧 OCP. 模块应该易于扩展(开放),但免于修改(关闭)。
这样的结构是易于扩展,相互隔离,实现的技术是动态多态。
2.依赖反转法则 DIP
依赖抽象而不依赖具体。
高层模块不再依赖于含有实现细节的模块,而是依赖抽象的接口。通过抽象的接口取代被依赖的中间层,保证了上层结构的稳定。
3.接口隔离法则 ISP
不应该强迫客户端依赖于它们用不上的方法。因不同的客户需要划分多个不同的专用接口。
type
TSports=class(Tobject)
procedure Run;
procedure Fly;
procedure jump;
procedure cycle;
end;
//将上面这个类改进分隔为以下,当然分隔是按需求进行的
IOpicA=class(IInterface)
['{0CBC0EC1-BCDC-418C-A35E-595D2DE78029}'
procedure Run;
procedure Fly;
end;
IOpicB=class(IInterface)
['{0CBC0EC1-BCDC-418C-A35E-595D2DE78019}'
procedure jump;
procedure cycle;
end;
4.单一职责法则 SRP
一个类应该公有一个原因导致其变化。“一个原因”好比工作人员的职责,比如小区一个保安,假定他的职责是检查进出车辆,那么只有当有车进或有车出时,将会触发他上前进行检查。当一个类包含多个职责,且它们的关系错综复杂时,分离不当,会有循环依赖问题。这时可以用接口隔离法则进行分离。