参与答辩有感。

今天见一同事参加答辩,问起了一个这样的问题:在软件开发中,结合自己的实例说说如何使软件做到OCP原则。

事实上这是一个非常难回答的问题,不过也是一个可以回答的问题。

什么是OCP?一个软件实体应当对扩展开放,对修改关闭。这个原则说的是,在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展。

   如何做到OCP

  第一:类的设计高度抽象化。这个抽象层预见了所有的可能扩展,因此,在任何扩展情况下都不会改变,这就使得系统

  的抽象层不需要修改,从而满足“开-闭”原则的对修改关闭。这种使用,其实在开发我们用的已经非常常见了。如,针对

  接口编程。无论是DAO层,还是service层,我们都是针对接口来实现的,当然针对接口编程不仅仅是指,类的定义为接口 ,我们在定变量,或参数传递时,也是应先考虑接口来传递。

  第二:对可变化的进行封装。

       这个“可变性的封装原则”讲的是找到一个系统的可变因素,将之封装起来。在设计 时,考虑设计中什么可能会发变化。这个意思是说,你在做设计时,考虑的是你允许什么发生变化而不让这一变化导致重设计。所以要做到“可变华进行封装”原则,

       首先:一种可变性不应当散落在代码的很多角落里,而应当封装到一个对象里面。同一种可变性的不同 表现,则可以用继承来实现。所以,我们在开发中经常会用到继承。继承是一种 实现封装变化的方法。所以,我们可以看到,在设计中,为何总是提出优先考虑使用组合,而非继承。不应当继承 认为是从一般对象生成特殊的对象的方法。

       其次:一种可变性不应当与另一种可变性混合在一起。所以,我们会发现在类的结构设计的时候,类的层次结构不会超过两层。

  不然意味着将两种不同的可变性混合在一起了。

  来看下操作票系统中的应用。我们的设备停送电的主过程基本上是不变的,就是从检修-冷备-热备-运行这么一个过程 ,但是每类设备的

栓修-冷备,冷备-到热备,热备到运行这个过程中所产生的操作步骤是完全不同的。所以这块是变化的,好我们先将这块变化东西封装起来,这样,在我们的程序中,就对每类设备有了一个实现开票具体步骤的类(IBussLogic),我们将抽象出来的开票的主过程也设计成一个类(ABTicketService)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值