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
//书籍有作者
1700456194
1700456195
public String getAuthor();
1700456196
1700456197
}
1700456198
1700456199
目前书店只出售小说类书籍,小说类如代码清单6-2所示。
1700456200
1700456201
代码清单6-2 小说类
1700456202
1700456203
public class NovelBook implements IBook{
1700456204
1700456205
//书籍名称
1700456206
1700456207
private String name;
1700456208
1700456209
//书籍的价格
1700456210
[
上一页 ]
[ :1.700456161e+09 ]
[
下一页 ]