设计模式六个基本原则
2014-02-25 21:27
197 查看
最近学习设计模式,针对所做的笔记,总结下设计模式的六个基本原则。
设计根本的指导原则是提高可维护性和可复用性。这些原则主要有 :
开放封闭
依赖倒转
里氏代换
合成/聚合复用
迪米特
单一职责
接口隔离原则
一、开放-封闭原则
a、一个软件实体应该对扩展开放,对修改关闭。 在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展。
b、 如何做到既不修改,又可以扩展? 解决问题的关键在于抽象化。在C++语言里,可以给出一个或多个抽象C++类或C++接口,规定出所有的具体类必须提供的方法特征作为系统设计的抽象层。这个抽象层预见了所有的可能扩展,因此,在任何扩展情况下都不会改变。这就使得系统的抽象层不需要修改,从而满足了—对修改关闭。 同时,由于从抽象层导出一个或多个新的具体类可以改变系统的行为,因此系统的设计对扩展是开放的。
c、开闭原则实际上是“对可变性的封闭原则“:找到一个系统的可变因素,将之封装起来。这个原则意味着两点:
1) 一个可变性不应当散落在代码的很多角落里,而应当被封装到一个对象里面。同一种可变性的不同表象意味着同一个继承等级结构中的具体子类。
2) 一种可变性不应当与另一种可变性混合在一起。(所有类图的继承结构一般不会超过两层,不然就意味着将两种不同的可变性混合在了一起。) 开闭原则是总的原则,其它几条是开闭原则的手段和工具。
二、依赖倒转原则
a、依赖倒转原则讲的是:要依赖于抽象,不要信赖于实现。
b、开闭原则是目标,而达到这一目标的手段是依赖倒转原则。
三、里氏代换原则
a、任何基类可以出现的地方,子类一定可以出现。 开闭原则的关键步骤是抽象化。而基类与子类的继承关系就是抽象化的具体体现,里氏代换原则是对实现抽象化的具 体步骤的规范
四、合成/聚合复用原则
a、要尽量使用合成/聚合,而不是继承关系达到复用的目的。
b、合成/聚合原则要求我们首先考虑合成/聚合关系,里氏代换原则要求在使用继承时,必须确定这个继承关系符合一定的条件(继承是用来封装变化的;任何基类可以出现的地方,子类一定可以出现。)
c、合成/聚合原则就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对象的委派达到得复用已有功能的目的。
五、迪米特原则
a、一个软件实体应当尽可能少的其他实体发生相互作用。模块之间的交互要少。这样做的结果是当系统的功能需要扩展时,会相对更容易地做到对修改的关闭。
b、一个对象应当对其他对象有尽可能少的了解。
六、接口隔离原则
a、应当为客户端提供尽可能小的单独接口,而不要提供大的总接口。即:使用多个专门的接口比使用单一的总接口要好。
b、接口隔离原则与迪米特都是对一个软件实体与其他的软件实体的通信限制。迪米特原则要求尽可能地限制通信的宽度和深度,接口隔离原则要求通信的宽度尽可能地窄。这样做的结果使一个软件系统在功能扩展过程当中,不会将修改的压力传递到其他对象。
设计根本的指导原则是提高可维护性和可复用性。这些原则主要有 :
开放封闭
依赖倒转
里氏代换
合成/聚合复用
迪米特
单一职责
接口隔离原则
一、开放-封闭原则
a、一个软件实体应该对扩展开放,对修改关闭。 在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展。
b、 如何做到既不修改,又可以扩展? 解决问题的关键在于抽象化。在C++语言里,可以给出一个或多个抽象C++类或C++接口,规定出所有的具体类必须提供的方法特征作为系统设计的抽象层。这个抽象层预见了所有的可能扩展,因此,在任何扩展情况下都不会改变。这就使得系统的抽象层不需要修改,从而满足了—对修改关闭。 同时,由于从抽象层导出一个或多个新的具体类可以改变系统的行为,因此系统的设计对扩展是开放的。
c、开闭原则实际上是“对可变性的封闭原则“:找到一个系统的可变因素,将之封装起来。这个原则意味着两点:
1) 一个可变性不应当散落在代码的很多角落里,而应当被封装到一个对象里面。同一种可变性的不同表象意味着同一个继承等级结构中的具体子类。
2) 一种可变性不应当与另一种可变性混合在一起。(所有类图的继承结构一般不会超过两层,不然就意味着将两种不同的可变性混合在了一起。) 开闭原则是总的原则,其它几条是开闭原则的手段和工具。
二、依赖倒转原则
a、依赖倒转原则讲的是:要依赖于抽象,不要信赖于实现。
b、开闭原则是目标,而达到这一目标的手段是依赖倒转原则。
三、里氏代换原则
a、任何基类可以出现的地方,子类一定可以出现。 开闭原则的关键步骤是抽象化。而基类与子类的继承关系就是抽象化的具体体现,里氏代换原则是对实现抽象化的具 体步骤的规范
四、合成/聚合复用原则
a、要尽量使用合成/聚合,而不是继承关系达到复用的目的。
b、合成/聚合原则要求我们首先考虑合成/聚合关系,里氏代换原则要求在使用继承时,必须确定这个继承关系符合一定的条件(继承是用来封装变化的;任何基类可以出现的地方,子类一定可以出现。)
c、合成/聚合原则就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对象的委派达到得复用已有功能的目的。
五、迪米特原则
a、一个软件实体应当尽可能少的其他实体发生相互作用。模块之间的交互要少。这样做的结果是当系统的功能需要扩展时,会相对更容易地做到对修改的关闭。
b、一个对象应当对其他对象有尽可能少的了解。
六、接口隔离原则
a、应当为客户端提供尽可能小的单独接口,而不要提供大的总接口。即:使用多个专门的接口比使用单一的总接口要好。
b、接口隔离原则与迪米特都是对一个软件实体与其他的软件实体的通信限制。迪米特原则要求尽可能地限制通信的宽度和深度,接口隔离原则要求通信的宽度尽可能地窄。这样做的结果使一个软件系统在功能扩展过程当中,不会将修改的压力传递到其他对象。
相关文章推荐
- OpenGL: 定点数组
- socket编程之select相关
- BLL 、DAL、MODEL三层架构+UI
- php有点进入状态了
- sizeof关键字测试
- PHP系统学习(1)
- 杂记
- 1029 Median (25)
- Java编程提高性能时需注意的地方
- Set Off
- cocos2dx 常用工具网站荟萃
- 命令行查看占用端口的程序
- uva 11627
- CSS-层叠样式表
- 新浪微博Oauth2.0授权 获取Access Token以及API的使用
- service--取得运行的Activity
- 匿名方法示例
- uva 11627
- 浅谈数据质量管理
- unsigned int 与 unsigned long 一样吗?