俊介三

一天更新一点,一天积累一点

导航

Strategy Pattern

Posted on 2013-03-18 19:59  俊介三在前进  阅读(110)  评论(0)    收藏  举报

先贴一个策略模式的示例类图:

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

上面类图的意思就是鸭子有飞的行为和叫的行为。但不同鸭子有不同的飞和叫的行为。因此把飞和叫的行为(算法)独立出来。各个具体的鸭子分别使用各自需要的行为。

我认为策略模式的核心就是:把会变化的、可扩展的独立出来。面向接口来编程。高层(即抽象)的只调用高层接口、类等。具体的类再通过抽象的方法进行调用。

利用这个例子再通俗地讲一次吧:我有一只抽象的鸭子,它有很多具体的实现类,如橡皮鸭子、红头鸭子等。这些鸭子在非常抽象的层面上都有共同的行为,如怎么飞和怎么叫。那么,现在就把那只抽象的鸭子的飞和叫的行为(接口)和这两个接口进行composite关联起来,再用各种具体的需要用到的实现方法来实现飞的接口和叫的接口。就能很灵活地创造一些需要的具体鸭子。如扛着火箭那样飞的、像狗狗一样叫的鸭子,如低空飞的、叫声惨烈的鸭子。等等。要怎么扩展再建需要的类来实现这两个接口就好。