【大话设计模式——学习笔记(4)】开放——封闭原则
2014-04-03 17:23
239 查看
开放——封闭原则
软件实体可以扩展,但是不可修改。即对于扩展是开放的,对于修改是封闭的。面对需求,对程序的改动是通过增加代码来完成的,而不是改动现有的代码。
当变化发生时,我们就创建抽象来隔离以后发生同类的变化。
开放――封闭原则是面向对象的核心所在。开发人员应该对程序中呈现出频繁变化的那部分做出抽象,拒绝对任何部分都刻意抽象及不成熟的抽象。
怎么才能比较好的理解开放——封闭呢,现在小P用书中的例子来描述下。在我们写计算器时,一开始只要求有加法功能,因此我们写了一个客户端类和一个加法类。但是后来需求变更,要求再添加一个减法类。这个时候我们不能再写一个减法类就完事,因为之后可能还会有乘法等,而各种运算在有些功能上又是相同的,比如都是输入两个数字一个运算符,然后得出一个结论。因此,我们应该抽象出一个运算类,把共有的属性写进去,把特有的方法抽象出来,供子类完善,而这个运算类在原则上是不能改变的(除了添加共有的功能),之后不管是加减乘除还是开方等各种运算,直接添加一个继承于运算类的子类就行了。
软件实体可以扩展,但是不可修改。即对于扩展是开放的,对于修改是封闭的。面对需求,对程序的改动是通过增加代码来完成的,而不是改动现有的代码。
当变化发生时,我们就创建抽象来隔离以后发生同类的变化。
开放――封闭原则是面向对象的核心所在。开发人员应该对程序中呈现出频繁变化的那部分做出抽象,拒绝对任何部分都刻意抽象及不成熟的抽象。
怎么才能比较好的理解开放——封闭呢,现在小P用书中的例子来描述下。在我们写计算器时,一开始只要求有加法功能,因此我们写了一个客户端类和一个加法类。但是后来需求变更,要求再添加一个减法类。这个时候我们不能再写一个减法类就完事,因为之后可能还会有乘法等,而各种运算在有些功能上又是相同的,比如都是输入两个数字一个运算符,然后得出一个结论。因此,我们应该抽象出一个运算类,把共有的属性写进去,把特有的方法抽象出来,供子类完善,而这个运算类在原则上是不能改变的(除了添加共有的功能),之后不管是加减乘除还是开方等各种运算,直接添加一个继承于运算类的子类就行了。
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 设计模式之创建型模式
- 介绍php设计模式中的工厂模式
- 面向对象设计模式的核心法则
- 常见的PHP五种设计模式小结
- 小议javascript 设计模式 推荐
- javascript 设计模式之单体模式 面向对象学习基础
- 最常用的12种设计模式小结
- php设计模式 Command(命令模式)
- php设计模式介绍之值对象模式第1/5页
- 设计模式之构建(Builder)模式 建造房子实例分析
- Javascript 设计模式(二) 闭包
- javascript学习笔记(九) js对象 设计模式
- ASP.NET的适配器设计模式(Adapter)应用详解
- PHP设计模式之调解者模式的深入解析
- js如何实现设计模式中的模板方法
- 设计模式中的备忘录模式解析及相关C++实例应用
- 代理角色java设计模式之静态代理详细介绍