您的位置:首页 > 其它

深入设计模式之一:策略模式

2012-07-30 21:12 141 查看
合作开发的这段时间,看了不少设计模式,这次分享下我对几个模式的理解,这次说说“策略模式”

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

如何理解呢?定义里说到的“封装算法”,这我们可以理解成封装变化,这是设计模式里重要的原则之一。把容易变化的部分抽取出来,以便以后需求变化时修改此部分,而不会影响不变的部分。

封装完,是如何达到相互替换的呢?这需要使用到设计模式的另一个原则:面向接口编程。

面向接口编程和简单的使用接口有何不同呢?

简单的使用接口是这样:定义一个鸭子类,然后定义一个飞行接口。鸭子如果向飞,直接拿接口实现就可以了。如果还有其他的很多动物像猫呀,狗呀什么的想要飞,就拿这个接口来实现了。这样的好处是谁想实现都可以拿去用,非常灵活。那缺点是什么呢?缺点是,代码的复用性低,想要实现就得自己把内实现内容敲出来。

面向接口编程怎么解释呢:面向接口编程可以理解成“面向超类编程”。打个比方,把超类理解成变量的声明类型,实现该接口的类就是变量。类的任何对象都符合该类型,也就是都可以付给超类。

如何再模式图和代码中实现面向接口编程呢?这时候用策略模式来解释,就十分恰当了



这张图就是策略模式的一个应用:Duck类是实现算法的客户,封装起来的飞行和叫的行为就是算法。通过客户的duck类的setFlyBehavior和setQuackBehavior方法,设置具体要实现的封装中的方法。这样把要实现的行为交给了外部类,从而实现了松耦合,也就是面向接口编程的好处。

灵活的运用接口不是把接口实现在类里,而是通过接口调用实现接口的类。换个解释方法,不要继承,要组合,组合的好处在于降低了类间的耦合。
这是我对策略模式的理解,与其说讲模式,不如说通过模式讲模式原则,只懂模式只能生搬硬套,懂了原则用模式肯定没问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: