OCP(The Open Closed Principle):
定义:
对拓展开放:也就是说模块的行为是可扩展的,当应用程序中的需求发生改变时,我们可以使模块表现出全新的或与以往不同的行为。
对更改封闭:模块的源代码是不可更改的,已经实现的功能源代码任何人都不允许修改。
开放针对的是新增的功能,更改针对的是已有的功能,所以这2个特征其实并不冲突,对新增拓展,对已有封闭。
一个简单的例子,在Client类中使用Service类,如果我们有多种不同的Service的实现需要在Client中处理,那么Client中就要使用Switch或者大量的if...else语句去判断
不同场景的时候要使用哪种Service,而且当Service的种类新增时,那么相应的Client中的语句也要做出相应的调整。
一个遵循OCP的设计,ServiceInterface是一个接口或者一个抽象类,Client中去使用这个抽象类,而DataSourceService和SocketService是ServiceInterface的派生类,那么不论派生类
中做了如何修改,或者新增其他的派生类,Client类中无需再对应的做出其他任何改动。
结论:在许多方面,OCP都是面向对象设计的核心所在,遵循这个原则可以带来灵活性,可重用性及可维护性等好处。