1700456145
设计模式之禅 第6章 开闭原则
1700456146
1700456148
6.1 开闭原则的定义
1700456149
1700456150
在哲学上,矛盾法则即对立统一的法则,是唯物辩证法的最根本法则。本章要讲的开闭原则是不是也有同样的重要性且具有普遍性呢?确实,开闭原则是Java世界里最基础的设计原则,它指导我们如何建立一个稳定的、灵活的系统,先来看开闭原则的定义:
1700456151
1700456152
Software entities like classes,modules and functions should be open for extension but closed for modifications.(一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。)
1700456153
1700456154
初看到这个定义,可能会很迷惑,对扩展开放?开放什么?对修改关闭,怎么关闭?没关系,我会一步一步带领大家解开这些疑惑。
1700456155
1700456156
我们做一件事情,或者选择一个方向,一般需要经历三个步骤:What——是什么,Why——为什么,How——怎么做(简称3W原则,How取最后一个w)。对于开闭原则,我们也采用这三步来分析,即什么是开闭原则,为什么要使用开闭原则,怎么使用开闭原则。
1700456157
1700456158
1700456159
1700456160
1700456162
设计模式之禅 6.2 开闭原则的庐山真面目
1700456163
1700456164
开闭原则的定义已经非常明确地告诉我们:软件实体应该对扩展开放,对修改关闭,其含义是说一个软件实体应该通过扩展来实现变化,而不是通过修改已有的代码来实现变化。那什么又是软件实体呢?软实体包括以下几个部分:
1700456165
1700456166
❑项目或软件产品中按照一定的逻辑规则划分的模块。
1700456167
1700456168
❑抽象和类。
1700456169
1700456170
❑方法。
1700456171
1700456172
一个软件产品只要在生命期内,都会发生变化,既然变化是一个既定的事实,我们就应该在设计时尽量适应这些变化,以提高项目的稳定性和灵活性,真正实现“拥抱变化”。开闭原则告诉我们应尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来完成变化,它是为软件实体的未来事件而制定的对现行开发设计进行约束的一个原则。我们举例说明什么是开闭原则,以书店销售书籍为例,其类图如图6-1所示。
1700456173
1700456174
1700456175
1700456176
1700456177
图6-1 书店售书类图
1700456178
1700456179
IBook定义了数据的三个属性:名称、价格和作者。小说类NovelBook是一个具体的实现类,是所有小说书籍的总称,BookStore指的是书店,IBook接口如代码清单6-1所示。
1700456180
1700456181
代码清单6-1 书籍接口
1700456182
1700456183
public interface IBook{
1700456184
1700456185
//书籍有名称
1700456186
1700456187
public String getName();
1700456188
1700456189
//书籍有售价
1700456190
1700456191
public int getPrice();
1700456192
1700456193
//书籍有作者
[
上一页 ]
[ :1.700456144e+09 ]
[
下一页 ]