您的位置:首页 > 编程语言 > Java开发

设计模式---策略模式

2017-12-11 09:34 183 查看
场景介绍:

公司需要设计一款模拟鸭子的游戏。游戏中会出现各种鸭子,一边游泳,一边呱呱叫。所以设计的时候就设计了一个鸭子超类,让各种鸭子都集成此超类。如下:



但是现在竞争压力大,公司需要创新,得需要会飞的鸭子将其他竞争者抛在后面。这时候我们应该怎么办呢?

使用继承:



使用接口:



分开变化和不会变化的部分:







这就是我们所说的策略模式:定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法独立于使用算法的客户。

认识策略模式

  策略模式的重心  

  策略模式的重心不是如何实现算法,而是如何组织、调用这些算法,从而让程序结构更灵活,具有更好的维护性和扩展性。

  

  算法的平等性

  策略模式一个很大的特点就是各个策略算法的平等性。对于一系列具体的策略算法,大家的地位是完全一样的,正因为这个平等性,才能实现算法之间可以相互替换。所有的策略算法在实现上也是相互独立的,相互之间是没有依赖的。所以可以这样描述这一系列策略算法:策略算法是相同行为的不同实现。

  

  运行时策略的唯一性

  运行期间,策略模式在每一个时刻只能使用一个具体的策略实现对象,虽然可以动态地在不同的策略实现中切换,但是同时只能使用一个。

策略模式的实现:

1.通过分离变化得到策略接口,比如FlyBehavior接口。

2.提供策略接口的实现类。

3.在客户程序中需要此策略接口,比如Duck中组合了策略接口。

4.在客户程序中需要选择正确的策略接口的实现。

策略模式的优点

  (1)策略模式提供了管理相关的算法族的办法。策略类的等级结构定义了一个算法或行为族。恰当使用继承可以把公共的代码移到父类里面,从而避免代码重复。

(2)使用策略模式可以避免使用多重条件(if-else)语句。多重条件语句不易维护,它把采取哪一种算法或采取哪一种行为的逻辑与算法或行为的逻辑混合在一起,统统列在一个多重条件语句里面,比使用继承的办法还要原始和落后。

策略模式的缺点

  (1)客户端必须知道所有的策略类,并自行决定使用哪一个策略类。这就意味着客户端必须理解这些算法的区别,以便适时选择恰当的算法类。换言之,策略模式只适用于客户端知道算法或行为的情况。

  (2)由于策略模式把每个具体的策略实现都单独封装成为类,如果备选的策略很多的话,那么对象的数目就会很可观。

策略模式的使用场景:

1.许多相关的类仅仅是行为差异

2.运行时选取不同的算法变体
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息