资讯专栏INFORMATION COLUMN

设计模式-策略模式

IntMain / 3327人阅读

摘要:公有的行为当具体的策略类都有一些公有的行为时,应当把这些行为放到共同的抽象类角色类里面,当然这时候抽象策略角色必须使用抽象类实现,而不能使用接口。策略模式优点策略模式提供了管理相关的算法族的办法。

概念

策略模式属于行为型模式,其主要目的是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而是得他们可以互相替换。
策略模式使得算法可以在不影响客户端的情况下发生变化。

重要角色

策略模式设计到三个重要角色:

环境角色(Context):只有一个Strategy的引用

抽象策略角色(Strategy):一个抽象角色,通常由一个接口或者抽象类实现,此角色给出所有的具体策略类所需的接口

具体策略角色(ConcreteStrategy):包装了相关的算法和行为

UML图

理解策略模式
策略模式重心

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

算法的平等性

 对于一系列的策略算法,大家的地位是完全一样的,正是因为平等性的存在,才能实现算法之间的相互替换。所有的策略算法在实现上是相互独立的,相互之间是没有依赖的

运行时策略的唯一性

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

公有的行为

 当具体的策略类都有一些公有的行为时,应当把这些行为放到共同的抽象类角色Strategy类里面,当然这时候抽象策略角色必须使用抽象类实现,而不能使用接口

策略模式优点

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

使用策略模式可以避免使用多重条件(if-else)语句,使得代码更加容易维护。

策略模式缺点

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

策略模式需要把每个具体的策略实现都多带带封装成类,如果备选策略很多,对象数目则会比较多

代码地址

https://github.com/petterheng/JavaDesign

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/68971.html

相关文章

  • Java设计模式-策略模式

    摘要:可以使用其他模式来修正这个缺陷,如工厂方法模式代理模式或享元模式。我们的策略模式只是实现了策略的管理,但是没有严格地定义适当的场景使用适当的策略,在实际项目中,一般通过工厂方法模式来实现策略类的声明。源码地址参考文献设计模式之禅 定义 Define a family of algorithms,encapsulate each one,and make them interchange...

    dabai 评论0 收藏0
  • 设计模式策略模式

    摘要:一定义定义维基百科策略模式作爲一種軟件設計模式,指對象有某個行爲,但是在不同的場景中,該行爲有不同的實現算法。二策略模式图我们看看策略模式是有怎样设计结构的。如中创建线程池,线程池任务满时,对提交的任务做处理就使用了策略模式。以前完整的看过《大话设计模式》,虽然完整看过,也做过笔记,但现在依然很多已经很模糊。这段时间趁着离职,有时间,打算重新过一遍,该篇将介绍策略模式。一、定义定义(维基百科...

    番茄西红柿 评论0 收藏0
  • 设计模式策略模式

    摘要:一定义定义维基百科策略模式作爲一種軟件設計模式,指對象有某個行爲,但是在不同的場景中,該行爲有不同的實現算法。二策略模式图我们看看策略模式是有怎样设计结构的。如中创建线程池,线程池任务满时,对提交的任务做处理就使用了策略模式。以前完整的看过《大话设计模式》,虽然完整看过,也做过笔记,但现在依然很多已经很模糊。这段时间趁着离职,有时间,打算重新过一遍,该篇将介绍策略模式。一、定义定义(维基百科...

    番茄西红柿 评论0 收藏0
  • 设计模式策略模式

    摘要:一定义定义维基百科策略模式作爲一種軟件設計模式,指對象有某個行爲,但是在不同的場景中,該行爲有不同的實現算法。二策略模式图我们看看策略模式是有怎样设计结构的。如中创建线程池,线程池任务满时,对提交的任务做处理就使用了策略模式。以前完整的看过《大话设计模式》,虽然完整看过,也做过笔记,但现在依然很多已经很模糊。这段时间趁着离职,有时间,打算重新过一遍,该篇将介绍策略模式。一、定义定义(维基百科...

    MangoGoing 评论0 收藏0
  • 我的Java设计模式-策略模式

    摘要:孙膑心里一万个草泥马在奔腾,差点没噎死自己滚一边去,我们这盘跟他赛马开始,策略模式上场。在设计模式之禅中的提出通过策略枚举和反射机制对策略模式进行改良,膜拜了但是要添加或淘汰策略,还是得去对枚举进行修改,也不符合开闭原则。 今天给大家说说田忌赛马的故事。如有雷同,纯属巧合!话说在战国时期,群雄割据,硝烟四起,茶余饭后还是少不了娱乐活动的,其中赛马是最火爆的。一天,孙膑看到田忌像个死鸡似...

    zilu 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<