OCP开闭原则(Open-Close Principle)
1.什么是开闭原则
a)Software entities should be open forextension, but closed for modification
即:一个软件实体应当对扩展开放,对修改关闭
换言之,一个模块可以在不被修改的情况下,改变其外在行为
b)开闭原则带给软件开发的好处:
i.由于符合开闭原则 的系统对扩展是开放的,所以我们可以通过扩展现有系统提供新的系统行为,来满足对系统的新需求,这样就会使系统具有一定灵活性和适应能力。
ii.由于系统对于修改是关闭的,所以在关键的抽象层中不能再做修改,这就是系统具备了一定的稳定性和延续性。
2.在实际开发中如何做到开闭原则:
a)抽象化
在java中,我们可以给出若干抽象类或接口,在这些抽象中规定所有的可能出现的扩展。这样做后,由于抽象中已经包含了所有的扩展情况,我们已经不再需要对他们进行修改,从而达到了关闭。同时,我们可以从这些抽象中导出国歌具体类来改变系统的行为,所以这样系统对扩展又是开放的。
b)抽象化的实现方法
i. 抽象类
ii.接口
3.对可变性进行封装
a)抽象过程要求包含所有的扩展情况(可变性),显然如何正确的把这些可变性归纳到一个抽象层中需要一定的原则:
i.一种可变性不应当散落在你代码的各处,而应当被封装在一个对象中
ii.一种可变性不能和另一种可变性混合
4.附属于OCP的其它原则
a)里氏代换原则
b)依赖倒转原则
c)合成/聚合原则
d)迪米特法则
e)接口隔离原则