码迷,mamicode.com
首页 > 其他好文 > 详细

策略者模式

时间:2017-07-24 19:03:45      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:抽象   声明   选择   并且   更改   绿色   之间   开闭原则   关系   

场景:

你想买一盏台灯,现在有很多类型的台灯,分别为:红色的 绿色的,大的 小的等等。你可以选择其中的某一种。

技术分享

 

现在出现了新的产品智能调节的台灯,那么我们应该怎么办呢?

把台灯能够调节的行为加到父类中?显然这是不合适的,因为这样会让别的灯也具有调节功能。那么现在我们可以使用接口添加调节功能,让有些灯能够进行调节而其他的却不能

 技术分享

现在又出现了各种方式的调节功能,我们可以实现调节的接口,那么我们怎样去动态选择不同方式的调节呢?可以通过调用接口来调用不同的调节方法

技术分享 

现在看来每个具体的灯如果具有调节功能都必须要实现调节接口,这样会造成再出现新的可以调节的灯时就要实现调节接口,随着灯的类型越来越多,这样将成为一个噩梦。

那么我们怎样去改正呢?好的设计就是把抽象的阶层设计好,当出现新的东西的时候,不改变原有的代码,而是增加新的东西(开闭原则)。

把AdjustInter放在Lamp抽象类中,去用AdjustInter提供的方法,同时可以随意选择调节的方式

 技术分享

由于Lamp与AdjustInter之间是关联关系,所以应该在Lamp抽象类中采用声明属性的方式,来放在抽象类Lamp中,声明adjust()方法使用调节功能,同时使用setAdjustInter(AdjustInter adjustInter)来选择不同的调节方式。

通过上面我们就可以知道,调节接口拥有一系列的调节方式,能够提供给使用者即Lamp使用,同时也能够随时选择替换不同的调节方式。这就是策略者模式,即:通过提供一个拥有一系列策略的接口,使 使用者能够使用并且可以随时进行策略的选择替换。

 

这里我们看到每次我们需要更改调节方式都是通过setAdjustInter(AdjustInter adjustInter),这就要求我们知道所有的策略。这也是策略者模式的缺点使用者必须知道所有的策略

优点就是:动态改变策略

策略者模式

标签:抽象   声明   选择   并且   更改   绿色   之间   开闭原则   关系   

原文地址:http://www.cnblogs.com/grows/p/7230173.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!