趣话-开闭原则

开闭原则


在面向对象编程领域中,开闭原则要求软件对象应该对扩展开放,对修改关闭。即,一个实体在不修改其原有代码的基础上,为其增添新的功能或改变其行为。

举个例子,现有一个砸金蛋的活动,顾客可以选择工具来砸开金蛋,获得奖励。我们为顾客准备了一把锤子,顾客使用锤子砸开金蛋,获得奖励。

首先,不使用设计模式以及开闭原则的方式来为其编码。

硬编码

  • 定义锤子类,需要敲击三次才能砸开金蛋
  • 定义顾客类,顾客使用工具砸开金蛋
  • 客户端调用
  • 输出

好了,通过硬编码的砸金蛋活动完成了。过了几天,活动方反应,这个活动还不错,参与人数也挺多,现在他们需要增加一个工具———斧子,好吧,按照我们正常的逻辑,当然是去修改代码咯,这里还是使用硬编码实现。

硬编码——增加斧子

  • 定义斧子类,只需要敲击一次就可以砸开金蛋
  • 原先的User类已经不适用于当前的斧子工具了,需要重新修改User类适应当前工具;好吧,很烦
  • 客户端调用
  • 输出

任务终于完成了,可是总感觉哪里说不出来的不对劲,先休息吧。叮铃铃,叮铃铃,叮铃铃,叮铃铃,叮铃铃。 活动方来电话了,这个活动太火爆了,骗了不少老人和小孩的钱。现在还要再加几个工具。哎呦,难受。。。。算了,试试设计模式吧。

首先分析一下当前的需求,我们的目标是使用不同的工具砸开金蛋,各个工具的使用方式都不同,比如锤子要敲击三次,而斧子只需要敲击一次;活动方会时不时的增加不同的工具。那么,我们是不是可以把工具抽象出来,在客户端中使用抽象,而不是使用具体的工具类和客户端交互。

使用开闭原则

  • 为所有的工具类定义一个接口
  • 锤子工具
  • 斧子工具
  • 顾客类
  • 客户端调用
  • 输出

完成,要休息了。呼呼呼…,呼呼呼…,呼呼呼…,呼呼呼…,呼呼呼…,呼呼呼…,呼呼呼…,呼呼呼…,呼呼呼…

叮铃铃…叮铃铃…叮铃铃…叮铃铃…叮铃铃…叮铃铃…叮铃铃…叮铃铃…叮铃铃…

活动方:现在老人和小孩学精明了,没那么好骗了,我们推出了一个新的工具————绣花针;要求,绣花针要戳一千次才能砸开金蛋。好吧,虽然满腹罪恶,心有不甘,还是闭着眼睛为活动方增加了这样的需求。

  • 增加绣花针工具
  • 客户端调用

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年3月19日
下一篇 2019年3月19日

相关推荐