二 :OCP(开闭原则)

Open-Close Principle

**********************************************************************************

表述:

1. 一个软件实体应当对扩展开放 , 对修改封闭;

 

2. 对可变性的封闭原则;

 

3. 找到一个系统的可变因素,将它封闭起来;

 

 

 

    也就是说在设计一个模块的时候,应当可以在不被修改的前提下被扩展。解决问题的关键就在于:抽象化!

 

    那就是不允许更改系统的抽象层,而允许扩展系统的实现层。

 

   

  我们让模块依赖于一个固定的抽象体,这样它就是不可以修改的;同时,通过这个抽象体派生,我们就可以扩展此模块的具体功能。这样设计的程序只通过增加代码来变化而不是通过更改现有代码来变化,前面提到的修改的副作用就没有了。

 

   “-原则如果从另外一个角度讲述,就是找到一个系统的可变因素,将它封装起来,也即所谓的对可变性的封装原则”(Principle of Encapsulation of Variation, EVP)

 

   在我们考虑一个系统的时候,我们不要把关注的焦点放在什么会导致设计发生变化上(具体),而是考虑允许什么发生变化而不让这一变化导致重新设计(抽象)。也就是说,我们的设计应支持变化。

   

   

 

总结:

1.         一个软件系统的所有模块不可能都满足OCP,但是我们应该努力最小化这些不满足OCP的模块数量。

2.         开放-封闭法则是OO设计的真正核心。

3.         符合该法则便意味着最高等级的复用性(reusability)和可维护性(maintainability)。

 

 

 

策略模式举例:商场打折,不同物品不同折扣,不同季节不同折扣

    

   

 “对可变性的封装原则”意味着两点:

 1.         一种可变性应当被封装到一个对象里面,而不应当散落到代码的很多角落里。

同一种可变性的不同表象意味着同一个继承等级结构中的具体子类。

继承应当被看作是封装变化的方法,而不应当是被认为从一般的对象生成特殊的对象的方法(继承经常被滥用)

   

 2.         一种可变性不应当与另外一种可变性混合在一起。从具体的类图来看,如果继承结构超过了两层,那么就意味着将两种不同的可变性混合在了一起。

 

 “对可变性的封装原则”从工程的角度说明了如何实现OCP。如果按照这个原则来设计,那么系统就应当是遵守OCP的。但是现实的情况往往是纷繁复杂的,我们不可能100%的遵守OCP,但是我们要向这个目标来靠近。设计者要对设计的模块对何种变化进行封装做出选择。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值