设计模式总原则 -- 开闭原则
2016-03-22 19:53
253 查看
开闭原则:为了实现软件系统可维护的复用,必须遵循“开闭原则”,即对扩展开放,对修改关闭。
想要做到“开闭原则”,可以遵循以下设计原则,
一、里氏代换原则:任何基类可以出现的地方,子类一定可以代换。
强调子类尽量不要修改基类的属性和行为,而是去扩展属性和行为,这样子类一定具有基类的全部属性和行为。
二、依赖倒转原则:要依赖于抽象,不要依赖于实现。
强调要依赖高层次的抽象模块,不要依赖低层次的实现模块。
宏观的抽象模块比较稳定,不会引起其他模块的大幅变化;另外实现模块发生变化也不会传导到抽象模块。
三、接口隔离原则:提供尽可能小的单独接口,而不是提供大的总结口。
强调提供多个专门接口,各司其职,可以根据需要定制几个专门接口,满足客户端需求;
不要提供一个万能的总结口,用不上的也放在那里,形成接口污染。
四、合成/聚合复用原则:要尽量使用合成/聚合,而不是使用继承实现复用。
抽象类是用来继承的,而具体类不是用来继承的;具体类能用合成/聚合来复用的,尽量不用继承来复用。
在判断是否使用继承时,在逻辑上要区分B-Has-A,还是B-Is-A:如果B-Has-A,就用合成/聚合复用;如果B-Is-A,就使用继承。
五、迪米特法则:一个模块与尽可能少的模块发生尽可能少的联系。
强调每个模块要有独立性,对外提供窄的接口;只要接口不变,每个模块的具体实现可以独立的开发和进化。
想要做到“开闭原则”,可以遵循以下设计原则,
一、里氏代换原则:任何基类可以出现的地方,子类一定可以代换。
强调子类尽量不要修改基类的属性和行为,而是去扩展属性和行为,这样子类一定具有基类的全部属性和行为。
二、依赖倒转原则:要依赖于抽象,不要依赖于实现。
强调要依赖高层次的抽象模块,不要依赖低层次的实现模块。
宏观的抽象模块比较稳定,不会引起其他模块的大幅变化;另外实现模块发生变化也不会传导到抽象模块。
三、接口隔离原则:提供尽可能小的单独接口,而不是提供大的总结口。
强调提供多个专门接口,各司其职,可以根据需要定制几个专门接口,满足客户端需求;
不要提供一个万能的总结口,用不上的也放在那里,形成接口污染。
四、合成/聚合复用原则:要尽量使用合成/聚合,而不是使用继承实现复用。
抽象类是用来继承的,而具体类不是用来继承的;具体类能用合成/聚合来复用的,尽量不用继承来复用。
在判断是否使用继承时,在逻辑上要区分B-Has-A,还是B-Is-A:如果B-Has-A,就用合成/聚合复用;如果B-Is-A,就使用继承。
五、迪米特法则:一个模块与尽可能少的模块发生尽可能少的联系。
强调每个模块要有独立性,对外提供窄的接口;只要接口不变,每个模块的具体实现可以独立的开发和进化。
相关文章推荐
- uboot切换kernel花屏
- 二维字符数组与字符串数组的使用
- IOS学习之压缩和解压工具使用
- Consecutive Blocks (ZOJ3970)
- 进程间的通信方式
- iOSUIWebView---快停下啦,你的愚蠢的行为
- Git协议深度解析(来自官方文章)
- 关于网络安全的登录方式
- Xcode快捷键
- JSP中<base href="<%=basePath%>">作用
- 203. Remove Linked List Elements
- 静态库
- 贪心1002
- redis之整数集合的实现源码分析
- TinyXml查找唯一节点及修改节点操作
- POJ - 3335 旋转计分板nlog n
- ubuntu下Hive安装
- transform(变形)和transform-origin(变形原点)
- IOS 杂笔-10(Base64 加密)
- vmware--查看链接克隆依赖关系