开闭原则:对扩展开放,对修改关闭。
为了实现软件系统易维护,可复用,必须遵循“开闭原则”。
想要做到“开闭原则”,可以遵循以下五个设计原则:
一、里氏代换原则:任何基类可以出现的地方,子类一定可以代换。
强调子类尽量不要修改基类的属性和行为,而是去扩展属性和行为,这样子类一定具有基类的全部属性和行为。
二、依赖倒转原则:要依赖于抽象,不要依赖于实现。
强调要依赖高层次的抽象模块,不要依赖低层次的实现模块。
宏观的抽象模块比较稳定,不会引起其他模块的大幅变化;另外实现模块发生变化也不会传导到抽象模块。
三、接口隔离原则:提供尽可能小的单独接口,而不是提供大的总结口。
强调提供多个专门接口,各司其职,可以根据需要定制几个专门接口,满足客户端需求;
不要提供一个万能的总结口,用不上的也放在那里,形成接口污染。
四、合成/聚合复用原则:要尽量使用合成/聚合,而不是使用继承实现复用。
抽象类是用来继承的,而具体类不是用来继承的;具体类能用合成/聚合来复用的,尽量不用继承来复用。
在判断是否使用继承时,在逻辑上要区分B-Has-A,还是B-Is-A:如果B-Has-A,就用合成/聚合复用;如果B-Is-A,就使用继承。
五、迪米特法则:一个模块与尽可能少的模块发生尽可能少的联系。
强调每个模块要有独立性,对外提供窄的接口;只要接口不变,每个模块的具体实现可以独立的开发和进化。
设计模式6+8+12式:

