【设计模式系列】行为型模式之Null Object模式

系统 1925 0
概要
系统中会包含很多行为,有些行为总是存在并需要被执行,而有些行为在某些场合或某种设置下就不希望被执行,通常很多人会通过一些条件对系统行为进行限制来达到目的,但是这样会给本来很简单纯粹的处理增加额外的逻辑,而通过NULL Object模式会提供一个具有代理式的空白行为的对象来解决问题。

目的
通过NULL Object模式提供一个具有代理式的空白行为的对象 ,从而隐藏一些判断逻辑。

实例
看这样一个例子,系统中有类Action,一些具体行为都从类Action继承来扩展,类Manager会使用Action类型的对象来处理相应的动作。类图和代码如下:

这时发现在某种情况下我们希望DoAction方法中的Action不做任何处理,怎么解决呢?
假设这里所说的某种情况可以用外部的某个变量isAction来进行判断,当值为FALSE时不进行任何处理。很多人会这样去调整代码,首先把isAction通过构造函数传递给Manager类,然后在DoAction中通过判断,当isAction为TRUE时才执行Action:

还有人会觉得应该把isAction的判断加在Action或ConcreteAction类中,让Execute方法自己来判断是否执行。
虽然这样做都可以解决问题,但是却让本来处理很简单职责很单一的Manager或ConcreteAction类增加了额外的逻辑,也让代码看起来不是那么美妙了。看看Null Object模式怎么解决问题吧。

就是这样,ConcreteAction,Manager和Action类都不需要改,只是追加了NullAction类,而它的Execute方法什么都不做。实际调用的代码如下所示:

可见,这样就把isAction相关的逻辑跟Manager或所有Action类都隔离开来了。

应用
没啥可说的,该用就用。

【设计模式系列】行为型模式之Null Object模式


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论