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

策略模式

时间:2017-08-30 14:15:07      阅读:96      评论:0      收藏:0      [点我收藏+]

标签:set   它的   定义   head   声明   log   思考   策略   自己   

  说起对策略模式的学习,那可真是莫名奇妙,在看Head First设计模式开篇的过程中,不知不觉就发现自己了解了策略模式的大致模型。不得不感叹啊,Head First系列真是不错!

  现在来分析分析。

  “策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。”

  技术分享

  首先,我们有一个鸭子类,它声明了QuackBehavior和FlyBehavior接口,并可以通过构造函数、set方法实例化它们。

  而Quack,Squeak,MuteQuack则是QuackBehavior的实现类。

  ADuck继承了Duck,它的performQuack方法里面是这样实现的: quackBehavior.quack(); 

  因为没有初始化quackBehavior,这样当然不行,所以,我们ADuck aDuck = new ADuck()之后呢,需要 aDuck.setQuackBehavior(???); 

  其中???自然就是QuackBehavior的实现类了。 ADuck想怎么叫,就把相对应实现类塞进去就可以了。

  这样,QuackBehavior的几个实现类,其实是可以互相替换的。

  这样的处理方式,就是策略模式。

  那么,这样用的好处在哪里呢?

  如果我们不这样实现,可以怎样实现? 

  把fly,quack做成接口,flyable,quackable,然后各个Duck实现。这样,每一个duck,都需要实现它们,这样当然可以,不过是不是略显麻烦?

  我有一批的duck,其实是同一种叫法的,另一批duck又是另一种叫法,这样重复实现quack()的代码就会特别多吧。

  我们再思考一下,要不,由Duck来实现flyable,quackable。子类继承了普遍的方法,有特别需求的时候,这样好像可以,不过上述问题,如果一种算法要改,则非常麻烦了。

 

  策略模式的决定权在用户,系统本身提供不同算法的实现,对各种算法做封装。因此,策略模式多用在算法决策系统中,外部用户只需要决定用哪个算法即可。

策略模式

标签:set   它的   定义   head   声明   log   思考   策略   自己   

原文地址:http://www.cnblogs.com/dinolin-630/p/7452712.html

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