深入设计模式之一:策略模式
2012-07-30 21:12
141 查看
合作开发的这段时间,看了不少设计模式,这次分享下我对几个模式的理解,这次说说“策略模式”
官方定义:策略模式定义了算法族,分别封装起来,使算法之间可以相互替换,使算法族独立于使用它的客户。
如何理解呢?定义里说到的“封装算法”,这我们可以理解成封装变化,这是设计模式里重要的原则之一。把容易变化的部分抽取出来,以便以后需求变化时修改此部分,而不会影响不变的部分。
封装完,是如何达到相互替换的呢?这需要使用到设计模式的另一个原则:面向接口编程。
面向接口编程和简单的使用接口有何不同呢?
简单的使用接口是这样:定义一个鸭子类,然后定义一个飞行接口。鸭子如果向飞,直接拿接口实现就可以了。如果还有其他的很多动物像猫呀,狗呀什么的想要飞,就拿这个接口来实现了。这样的好处是谁想实现都可以拿去用,非常灵活。那缺点是什么呢?缺点是,代码的复用性低,想要实现就得自己把内实现内容敲出来。
面向接口编程怎么解释呢:面向接口编程可以理解成“面向超类编程”。打个比方,把超类理解成变量的声明类型,实现该接口的类就是变量。类的任何对象都符合该类型,也就是都可以付给超类。
如何再模式图和代码中实现面向接口编程呢?这时候用策略模式来解释,就十分恰当了
![](http://my.csdn.net/uploads/201207/30/1343654889_6118.png)
这张图就是策略模式的一个应用:Duck类是实现算法的客户,封装起来的飞行和叫的行为就是算法。通过客户的duck类的setFlyBehavior和setQuackBehavior方法,设置具体要实现的封装中的方法。这样把要实现的行为交给了外部类,从而实现了松耦合,也就是面向接口编程的好处。
灵活的运用接口不是把接口实现在类里,而是通过接口调用实现接口的类。换个解释方法,不要继承,要组合,组合的好处在于降低了类间的耦合。
这是我对策略模式的理解,与其说讲模式,不如说通过模式讲模式原则,只懂模式只能生搬硬套,懂了原则用模式肯定没问题。
官方定义:策略模式定义了算法族,分别封装起来,使算法之间可以相互替换,使算法族独立于使用它的客户。
如何理解呢?定义里说到的“封装算法”,这我们可以理解成封装变化,这是设计模式里重要的原则之一。把容易变化的部分抽取出来,以便以后需求变化时修改此部分,而不会影响不变的部分。
封装完,是如何达到相互替换的呢?这需要使用到设计模式的另一个原则:面向接口编程。
面向接口编程和简单的使用接口有何不同呢?
简单的使用接口是这样:定义一个鸭子类,然后定义一个飞行接口。鸭子如果向飞,直接拿接口实现就可以了。如果还有其他的很多动物像猫呀,狗呀什么的想要飞,就拿这个接口来实现了。这样的好处是谁想实现都可以拿去用,非常灵活。那缺点是什么呢?缺点是,代码的复用性低,想要实现就得自己把内实现内容敲出来。
面向接口编程怎么解释呢:面向接口编程可以理解成“面向超类编程”。打个比方,把超类理解成变量的声明类型,实现该接口的类就是变量。类的任何对象都符合该类型,也就是都可以付给超类。
如何再模式图和代码中实现面向接口编程呢?这时候用策略模式来解释,就十分恰当了
![](http://my.csdn.net/uploads/201207/30/1343654889_6118.png)
这张图就是策略模式的一个应用:Duck类是实现算法的客户,封装起来的飞行和叫的行为就是算法。通过客户的duck类的setFlyBehavior和setQuackBehavior方法,设置具体要实现的封装中的方法。这样把要实现的行为交给了外部类,从而实现了松耦合,也就是面向接口编程的好处。
灵活的运用接口不是把接口实现在类里,而是通过接口调用实现接口的类。换个解释方法,不要继承,要组合,组合的好处在于降低了类间的耦合。
这是我对策略模式的理解,与其说讲模式,不如说通过模式讲模式原则,只懂模式只能生搬硬套,懂了原则用模式肯定没问题。
相关文章推荐
- [.net 面向对象程序设计深入](26)实战设计模式——策略模式 Strategy (行为型)
- 深入理解JavaScript系列(33):设计模式之策略模式
- 设计模式深入学习--Strategy 策略模式(行为型模式)
- 深入理解JavaScript系列(33):设计模式之策略模式
- 深入理解JavaScript系列(33):设计模式之策略模式
- 深入理解JavaScript系列(33):设计模式之策略模式
- 深入理解JavaScript系列(33):设计模式之策略模式
- 深入理解JavaScript系列(33):设计模式之策略模式(转)
- 深入理解JavaScript系列(33):设计模式之策略模式
- 深入理解JavaScript系列(33):设计模式之策略模式
- 深入理解JavaScript系列(33):设计模式之策略模式详解
- 深入解析C++编程中对设计模式中的策略模式的运用
- 深入理解JavaScript系列(33):设计模式之策略模式
- 深入理解JavaScript系列(33):设计模式之策略模式
- 深入理解JavaScript系列(33):设计模式之策略模式
- 深入理解JavaScript系列(33):设计模式之策略模式详解
- 深入理解JavaScript系列(33):设计模式之策略模式
- 设计模式之策略模式Strategy
- Android设计模式之策略模式
- 深入理解JavaScript系列(42):设计模式之原型模式