设计模式六大原则之 闭开原则

定义

Software entities like classes,modules and functions should be open for extension but closed for modifications.(一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。)

开闭原则是java世界的最基础的设计原则,它指导我们如何建立一个稳定的、灵活的系统。

定义实质

开闭原则定义已经非常明确的告诉我们,软件实体应该对扩展开放,对修改关闭。其含义是说一个软件实体应该通过扩展来实现变化,而不是通过修改已有的代码来实现变化。

软件实体通常包括以下几个部分:

1.项目或软件产品中按照一定的逻辑规则划分的模块。

2.抽象和类。

3.方法。

如何使用开闭原则

开闭原则是一个非常虚的原则,前面五个原则是对开闭原则的具体解释,但是开闭原则并不局限于这么多,它“虚”得没有边界,就像“好好学习,天天向上”的口号一样,告诉我们要好好学习,但是学什么,怎么学并没有告诉我们,需要去体会和掌握。那么我们如何使用开闭原则呢?

1.抽象约束

抽象是对一组事物的通用描述,没有具体的实现,也就表示它可以有非常多的可能性,可以跟随需求变化而变化。因此,通过接口或抽象类可以约束一组可能变化的行为,并且能够实现对扩展开放,其包含三层含义:

  • 1.通过接口或抽象类约束扩展,对扩展进行边界限定,不允许出现在接口或抽象类中不存在的public方法
  • 2.参数类型、引用对象尽量使用接口或者抽象类,而不是实现类
  • 3.抽象层尽量保持稳定,一旦确定即不允许修改。

2.元数据(metadata)控制模块行为

什么是元数据?用来描述环境和数据的数据,通俗地说就是配置参数,参数可以从文件中获得,也可以从数据库中获得。

3.封装变化

对变化的封装包含两层含义:1.将相同的变化封装到一个接口或抽象类中;2.将不同的变化封装到不同的接口或抽象类中,不应该有两个不同的变化出现在同一个接口或抽象类中。