一、单一职责原则
一个类或一个函数只做一件事情
二、里氏替换原则
所有父类出现的地方,子类都可以替换(在类中调用其他类务必要使用父类或者接口)
采用里氏替换原则的目的就是增强程序的健壮性
三、依赖倒置原则
也就是面向接口编程
四、接口隔离原则
接口隔离原则是对接口进行规范约束,尽量使用多个专门的接口(专门的接口是指:提供给每个模块的都应该是单一的接口,提供给几个模块就应该有几个接口),而不是建立一个庞大的臃肿的接口
五、迪米特原则
要求类与类之间尽可能没有耦合关系(低耦合)。
具体要求:
1.一个类应该对自己需要耦合或调用的类知道的最少(即提供方的public方法尽量少)。只需知道你(被耦合或调用的类)提供的public方法,至于你内部如何复杂和我没关系,我也不关心。
2.一个类只和朋友类交流,
朋友类定义:出现在成员变量,方法的输入输出参数中的类称为成员朋友类,而出现在方法内部的类不属于朋友类
六、开闭原则(最基础也是最核心的原则,前面五种原则都是开闭原则的具体形态)
1.含义:(模块、抽象、类和方法等软件实体)对扩展开放,对修改关闭
扩展含义:(一般通过子类或实现接口)扩展
修改含义:修改已有的代码
2.开闭原则可以提高复用性,也是面向对象的要求
3.具体如何应用开闭原则:
一般通过实现接口或继承抽象类(继承实现类也可以,通过子类覆写方式)来扩展,不修改已有的代码,软件实体上层保持不变,这样风险就小了
1).抽象约束
通过接口或者抽象类约束一组可能变化的行为,实现对扩展开放
包含三层含义:
I.通过接口或者抽象类约束扩展,不允许出现在接口或抽象类中不存在的public函数
II.参数类型,引用对象尽量使用接口或抽象类,而不是实现类
III.抽象层尽量保持稳定,一旦确定即不允许修改
要实现对扩展开发,首要的条件就是抽象约束
2).封装变化
I.将相同的变化封装到一个接口或抽象类中
II.将不同的变化封装到不同的接口或抽象类中,不应该有两个不同的变化出现在同一个接口或抽象类中。
后续讲的23个设计模式都是从各个不同的角度对变化进行封装的。
3).使用配置参数控制程序行为,减少重复开发
上述对六大设计原则的阐述应该已经很清晰,用专门的例子进而讲解设计原则应当不需要了,而且在实际运用或者具体大的例子中更能体现,所以在后续设计模式中会再次说明这些设计原则