一、开闭原则(Open-Closed Principle, OCP)
对软件实体的改动,最好用扩展而非修改的方式,如果要修改代码,尽量用继承或组合来扩展类的功能,而不是直接修改代码。
二、里氏替换原则
尽量把父类设计成抽象类或者接口,让子类继承父类或实现父类接口,子类可以扩展父类的功能,但不能够改变父类原有的功能。
三、单一职责原则
一个类只承担一个职责。
四、接口隔离原则
接口最小化。接口中的方法尽量少,和单一职责类似
1)单一职责针对的是类
2)接口隔离针对的是接口
五、依赖倒置原则
面向接口/抽象类编程,而不是面向实现编程。
六、迪米特法则
1)类向外公开的方法应该尽可能的少
2)依赖的对象尽可能的少(只依赖应该依赖的对象)
七、合成/聚合复用原则
合成(Composition,也称为组合)和聚合(Aggregation)都是关联的特殊种类
尽量使用合成/聚合的方式,而不是使用继承。有助于你保持每个类被封装,并被集中在单个任务上。这样类和类继承层次会保持较小规模,并且不太可能增长为不可控的庞然大物。
七大设计原则之间的关系
开闭原则是目标,里氏代换原则是基础,依赖倒转原则是手段;
第一要明确,所有的原则都是为了实现面向对象设计的可扩展性,可复用性,可维护性而定义的。
一个已有的代码模块,为了实现可扩展性,需要对外保持开放;为了实现可复用性,需要保持独立(单一职责,高内聚,低耦合);为了实现可维护性,需要对内封闭(对已有代码模块不要进行修改)。