/**
* @author : 陈柏宇
* 开放封闭原则
*
* 介绍:
* 开放封闭原则:软件实体(类、模块、函数等等) 应该可以扩展。但是不可以修改。
*
*
* 这个原则有两个特征:
* ① 对于扩展是开放的
* ② 对于更改是封闭的
*
* 我们在开发任何软件的时候都不要指望一开始的需求就确定,以后再也没有什么变化
* 这是不现实的,既然需求有变化,那么在面对需求变化的时候,我们设计的软件就要
* 容易修改。
* 那么问题来了:怎么样的设计在面对需求的改变时可以保持相对的稳定,从而使系统在第一个版本后不断推出新版本呢?
*
* 就举我们一开始简单工厂的例子吧
*
*/
* 开放封闭原则意思就是说,我们设计的时候需要时刻考虑 尽量让这个类是足够好的
* 写好了就不要去修改,如果新需求来了,我们只需要增加一些类就可以了,原来的代码能不动就不要动
*
* 可是绝对的对修改关闭是不可能的。
* 无论模块是多么的封闭,都会存在一些无法对其封闭的变化。既然不可能完全封闭,设计人员必须对于他
* 设计的模块应该对哪种变化封闭作出选择。他必须先猜测出最有可能发生的变化种类,然后构造抽象
* 来隔离那些变化。等到变化发生时立即采取行动。
*
* 在我们最初写代码的时候,假设变化不会发生。当变化发生的时候我们就创建抽象
* 来隔离以后发生的同类变化。就比如刚才举的简单工厂的例子。
* 面对新的需求,我们应该加代码,不应该改代码。
*
* 不要小看开放封闭原则!
* 它是面向对象设计的核心所在。遵循这个原则可以带来面向对象技术所声称的巨大好处
* 也就是可维护,可扩展,可复用、灵活性好。
* 开发人员应该仅对程序中呈现出频繁变化的那些部分作出抽象,然而,对于应用程序中
* 的每个部分都抽象绝对不是一个好主意。
* 拒绝不成熟的抽象和抽象本身一样重要。
*
* 抽象不一定是一件好事,过犹不及。
*
*/