一、概念编程
开放封闭原则(OCP,Open Closed Principle):软件实体应该是可扩展,而不可修改的;也就是说,对扩展是开放的,而对修改是封闭的。设计模式
OCP主要体如今两个方面:spa
(1)对扩展开放,意味着有新的需求或变化时,能够对现有代码进行扩展以适应新的状况。设计
(2)对修改封闭,意味着类一旦设计完成,就能够独立完成其工做而不要对类进行任何修改对象
抽象编程blog
对于软件设计者来讲,必须在不须要对原有的系统进行修改的状况下,实现灵活的系统扩展,如何作到呢?只有依赖于抽象。实现开放封闭的核心思想就是对抽象编程,而不是具体编程,由于抽象相对稳定。让类依赖于固定的抽象,对修改就是封闭的;经过面向对象的继承和多态,能够实现对抽象体的继承,经过覆写其方法来改变固有行为,实现新的扩展方法。继承
2、案例
接口
银行对外提供了存款、转帐和取款等业务,银行的业务人员不管给哪位客户办理业务都有可能设计到全部的业务,以下所示:ip
经过上图,咱们能够看出:每一个BankStaff针对不一样的客户要求须要选择不一样的操做流程,这种被动式的选择形成了大量的时间浪费,增长了出错的概率。有新的业务增长时,咱们都须要修改BankProcess类,同时在BankStaff中增长对业务类型的判断。银行业务封装在一个类中,违反了单一职责原则;有新的业务需求时,必须修改原来的代码,违反了开放封闭原则。ci
经过抽象解决问题。将业务功能抽象为接口,当业务员依赖于固定的抽象时,对于修改就是封闭的;而经过继承和多态,从抽象类派生出新的扩展实现,就是对扩展开放。以下:
这里只是简单的说明,更详细的须要在设计模式中体现。经过开放封闭原则,能够有效的下降实体与实体之间的耦合性;将容易变化的因素进行抽象处理,能够改善类的内聚性。