java与模式笔记(3.1)——原则篇之根本原则:开-闭原则
来源:互联网 发布:如何优化发展环境 编辑:程序博客网 时间:2024/05/15 05:30
原始描述是:一个软件实体应该对拓展开放,对修改关闭。换句话说就是在设计一个程序模块的时候,应当可以做到在不改变程序代码的情况下改变程序的功能(拓展)。
开闭原则是各个原则的根本原则,他实现了程序设计的三大目标拓展性,灵活性,插入性。
书中举例了一个玉帝诏安孙悟空的例子。孙悟空要当皇帝(实现新的功能,通过继承关系使得玉帝和文武群仙添加接口,成为他们的父类或者父类的父类),然而玉帝不肯(变动不能影响现有的程序代码),于是把孙悟空诏安了(让孙悟空成为玉帝的一个聚合类“文武群仙”的子类)。
这就揭示出了开闭原则的关键——抽象化。
抽象化提供一个不再更改的抽象设计,它能够应付任何拓展,从而形成了一个不变的抽象层,然而这个抽象层部允许任何的修改,于是就实现了开闭原则的“闭”。由于抽象类允许生成一个或者多个新的实现层的子类在不改变原程序的情况下来改变现有的功能,于是就实现了开闭原则的“开”。
这就引导出了一个原则:对可变性的封装原则——考虑你系统中的一个可变因素,并将其封装到一个对象中。对可变性的封装原则意味着两点:(1)一个具有可变性的功能不应该散落在程序代码的各个角落,应该被封装到一个具体的对象中。(2)一种可变性不应该跟另外一种可变性混合在一起。也就是说继承一般不会超过两层,否则就是把2种可变性混合在了一起。这里的可变性是指商务逻辑的可变性,并不是普通的条件转移语句。而把条件转移语句转化为多态是我们常用的对代码重构的做法,要注意判断清楚。
开闭原则的实现是个非常困难的事情,为了实现开闭原则,我们研究了一些它所具有的规律,这些规律也是我们要遵守的原则。
l 里氏代换原则——任何基类可以出现的地方子类一定可以出现。是开闭原则的补充,是对抽象化的实现的规范。
l 合成/聚合复用原则——应当尽量使用合成和聚合来实现复用而不是继承。同里氏代换原则一样是抽象化的实现的规范,是实现开闭原则的必要条件,违反这个原则,就无法实现开闭原则。
l 依赖倒转原则——程序设计要针对抽象而不是针对实现。如果说开闭原则是目标,那么依赖倒转原则就是手段。
l 迪米特法则——一个软简单体应该尽可能少的与另外的软件单体相互作用。这个法则使得通往开闭原则的道路更加平坦。是开闭原则实现的道路。
- java与模式笔记(3.1)——原则篇之根本原则:开-闭原则
- java与模式笔记(3.2)——原则篇之变化中的不变,开闭原则下的5大原则
- Java与模式:“开—闭”原则
- java与模式之—里氏代换原则(LSP)
- Java设计模式——六大原则之单一原则
- 《Java与模式》学习笔记:设计模式——原则
- 《Java与模式》学习笔记(1)——设计原则
- 《JAVA模式》学习心得与体会——之软件设计原则
- 《JAVA与模式》学习笔记之面向对象设计原则
- JAVA与模式学习笔记之设计原则
- java模式笔记 (二)—— 对象原则
- 《java与模式》笔记(二) 开闭原则
- JAVA与模式--设计原则笔记
- JAVA与模式--设计原则笔记
- Java学习笔记之设计模式原则
- 设计模式学习笔记(Java篇)之设计模式原则
- 【设计模式】六大原则之二(依赖倒转原则与里氏代换原则)
- java设计模式六大原则(3):依赖倒置原则
- C# Visual Studio 2005中定义一个变量让所有的Form都能访问到
- C# Visual Studio 2005中让打开对话框打开指定的文件夹
- UTF-8 字符集基础
- C# Visual Studio 2005中让保存文件对话框将文件保存到指定的文件夹
- serv-u漏洞入侵全过程
- java与模式笔记(3.1)——原则篇之根本原则:开-闭原则
- 周五晚上,难得没下雨
- IBM大型机术语快速入门
- datalist更新等操作
- 利用Axis实现基于SOAP的Web Service
- java学习笔记一
- C++一些原则
- 虚拟键码
- 一个简单的矩阵类的实现(参照《数据结构C++语言描述》第五章)