设计模式七大原则
单一职责原则:
- 降低类的复杂度,一个类只负责一项职责
- 提高类的可读性,可维护性
- 降低变更风险
-
接口隔离原则:
如果一个类对另外一个类的依赖,则需要最小接口原则。将耦合的接口拆分为多个独立接口
图解
符合原则的修正
依赖倒转原则
高层模块不应该依赖底层模块,二者都应该依赖抽象
抽象不应该依赖细节,细节应该依赖抽象
依赖倒转的中心思想是面向接口编程
使用接口或者抽象类的目的是制定好规范,不涉及任何具体操作,把展现细节的任务交给实现类去完成
依赖传递的三种方式:接口传递,构造函数传递,set方式传递
注意事项及细节: 底层模块尽量都要有抽象类或接口,或者两者都有,程序稳定性最好
- 变量的声明类型尽量是抽象类或接口,变量引用和实际对象间,存在缓冲层,利于程序扩展和优化
-
里氏替换原则
所有引用基类的地方必须可以透明的使用子类
父类中凡是已经实现好的方法,是在设定规范和契约
在子类中尽量不要重写父类的方法
违反里氏替换原则后,通常的处理方法: 提取出更基础的基类,父类和子类继承与该类。
- 或者采用组合,依赖,聚合的方式
改进方案
开闭原则:最基础
对拓展开放,对修改关闭。
当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化
空三角箭头:继承关系
修改方法:
shape作为抽象类,给出draw接口
rectangle和circle作为实现类,实现draw接口
使用方:GraphicEditor实现drawShape即可
迪米特法则
只与直接的朋友通信
朋友关系:A和B存在耦合关系,耦合包括:依赖,关联,组合,聚合等
直接的朋友定义:B作为A的成员变量,函数形参,函数返回值时,B是A的直接朋友。
合成复用原则
UML类图
依赖:
A使用B,任何使用方式都有依赖关系:成员变量,成员函数的形参及返回值,局部变量
关联:
一对一,一对多的关系,A拥有成员变量B,则A->B为单项一对一关系
泛化:继承
实现:
聚合:
A类中有B的成员变量,使用set/get方法,B可以与A分离
组合:
B用new的方式用到A,AB同生共死,耦合性大于聚合,A与B不可分开
设计模式
创建型模式:
结构型模式:
行为型模式:
单例模式
保证整个软件系统中,对某个类只能存在一个对象实例
八种实现方式:
饿汉式:
- 构造函数私有化,防止new
- 本类内部创建静态对象实例
- 对外提供公有的静态方法,返回实例对象