面向对象设计中的开放封闭原则
面向对象设计中的开放封闭原则开放封闭原则(OCP,Open Closed Principle)是所有面向对象原则的核心。软件设计本身所追求的目标就是封装变化、降低耦合,而开放封闭原则正是对这一目标的最直接体现。其他的设 计原则,很多时候是为实现这一目标服务的。
一、开发封闭原则,其核心的思想是:
软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。
二、开放封闭原则主要体现在两个方面:
对扩展开放:意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。
对修改封闭:意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。
实现开放封闭的核心思想就是对抽象编程,而不对具体编程,因为抽象相对稳定。让类依赖于固定的抽象,所以对修改就是封闭的;而通过面向对象的继承和对多态机制,可以实现对抽象体的继承,通过覆写其方法来改变固有行为,实现新的扩展 方法,所以对于扩展就是开放的。这是实施开放封闭原则的基本思路,同时这种机制是建立在两个基本的设计原则的基础上,这就是Liskov替换原则和合成/聚合复用原则。关于这两个原则。
三:为什么要用到开放封闭原则?
我们在做任何系统的时候,都不要指望系统一开始就需求确定,这是不现实也是不科学的想法,既然需求一定是会变化的,那么我们如何在面对需求变化时,设计的网站或软件可以保持相对容易修改,保持相对稳定,不至于新的需求到来,整个推倒重做。只要保持开放封闭原则就可以做到
面对新需求的到来,要完成新的需求,对程序的改动是通过新增加代码完成的,不是通过修改现有代码完成的
四:开放封闭原则的两个问题?
开放封闭原则是说,你设计软件或网站的时候,时刻要把需求的变化考虑全面了,尽量的让这个类足够好,写好了就不去修改它,如果新的需求来了,增加一些类来完成新的需求,原来的代码能不动则不动。
五:开放封闭原则中的两个问题的解决办法
在我们最开始写程序的时候,假设需求变化不会发生,但当发生需求变化时,我们就立即(当发生小变化时,就及早的去想办法应对发生大变化的可能)构造抽象来隔离以后发生的同类变化,不能等到开发工作进行到一半了或很久了,在考虑抽象,考虑分离,那时候就很困难了
六:开放封闭原则的好处
遵循这个原则可以带来面向对象技术中声称的可维护,可扩展,可复用,灵活性好这些好处
七:开放封闭原则的注意事项
不要对应用程序中的每个部分都刻意的进行抽象,应该对应用程序中出现频繁变化的那部分构造抽象。
八、以银行业务员为例
//首先声明一个业务处理接口 public interface IBankProcess{ void Process();} public class DepositProcess : IBankProcess { public void Process() { //办理存款业务 Console.WriteLine("Process Deposit"); } } public class WithDrawProcess : IBankProcess { public void Process() { //办理取款业务 Console.WriteLine("Process WithDraw"); } } public class TransferProcess : IBankProcess { public void Process() { //办理转账业务 Console.WriteLine("Process Transfer"); } } public class BankStaff { private IBankProcess bankpro = null; public void BankHandle(Client client) { switch (client.Type) { //存款 case "Deposit": userProc = new DepositUser(); break; //转账 case "Transfer": userProc = new TransferUser(); break; //取款 case "WithDraw": userProc = new WithDrawUser(); break; } userProc.Process(); } } //这样当业务变更时,只需要修改对应的业务实现类就可以,其他不相干的业务就不必修改。当业务增加,只需要增加业务的实现就可以了。