strategy模式
定义: 运行时刻选择算法
表面上看起来,state模式和strategy模式是非常相似的,但既然他们分成两种不同的模式,就有一定的区别,用一句话来概括就是:
策略用来处理算法方式变化,而状态则是处理状态变化。
具体可以参考:http://blog.csdn.net/lwzcjd/archive/2009/05/19/4201828.aspx
下面举个strategy的例子:
- package com.factory.commonality;
-
-
-
- interface Strategy {
- void algorithmInterface();
- }
- class ConcreteStrategyA implements Strategy {
- public void algorithmInterface() {
- System.out.println("Called ConcreteStrategyA.algorithmInterface()");
- }
- }
- class ConcreteStrategyB implements Strategy {
- public void algorithmInterface() {
- System.out.println("Called ConcreteStrategyB.algorithmInterface()");
- }
- }
- class ConcreteStrategyC implements Strategy {
- public void algorithmInterface() {
- System.out.println("Called ConcreteStrategyC.algorithmInterface()");
- }
- }
- class Context {
- Strategy strategy;
- public Context(Strategy strategy) {
- this.strategy = strategy;
- }
- public void doAlgorithm() {
- strategy.algorithmInterface();
- }
- }
- public class StrategyPatternTest {
- public static void main(String[] args) {
- Context c1 = new Context(new ConcreteStrategyA());
- c1.doAlgorithm();
- Context c2 = new Context(new ConcreteStrategyB());
- c2.doAlgorithm();
- Context c3 = new Context(new ConcreteStrategyC());
- c3.doAlgorithm();
- }
- }
运行结果:
Called ConcreteStrategyA.algorithmInterface()
Called ConcreteStrategyB.algorithmInterface()
Called ConcreteStrategyC.algorithmInterface()
policy模式
尽管 GoF 说Policy 模式只是Strategy 模式的一个别名,但是他们给出的Strategy 模式的例子隐含的假定了strategy 对象只使用一个方法――也就是说假定你已经把可能变化的算法拆成了一段单独的代码。
其他人用Policy 模式来表示一个对象有多个方法的情况,对于不同的类,这些方法可能相互独立变化。相对于(Strategy 模式) 只能有一个方法而言,Policy 模式具有更大的灵活性。
例如,当某个产品需要被运送到不同国家的时候,与该产品相关的海运政策(shipping policy)可以被用来说明一些与运输有关的问题。这些问题可能包括运输方式,如何计算邮资或者运费,客户需求以及费用,特殊处理的费用等等。所有这些东西可能会互不相干的变化,而且很重要的一点是在运输过程中你可能会在不同地点(points)需要上述信息。
通常情况下,把Strategy 模式和Policy 模式区别开来是很有好处的,用Strategy 模式处理一个方法(变化)的情况,而用Policy 模式处理多个方法。
分享到:
相关推荐
【Java设计模式】(2)策略模式Strategy
2、爪哇语言抽象工厂创立性模式介绍 3、工厂方法创立性模式介绍 4、单态创立性模式介绍 5、单态创立性模式介绍 6、观察者模式介绍7、责任链模式 8、设计模式之Observer 9、设计模式之Strategy(策略) 10、设计模式之...
创建模式: 设计模式之Factory 设计模式之Prototype(原型) 设计模式之Builder 设计模式之Singleton(单态) ...设计模式之Strategy(策略) 设计模式之Mediator(中介者) 设计模式之Interpreter(解释器) 设计模式之Visitor
走进设计模式之 策略模式(Strategy) 代码
设计模式-策略模式(Strategy)结合Android小知识讲解,简单明了
javase 设计模式的strategy pattern《JAVA与模式》之策略模式详解
这是JAVA设计模式中属于行为模式的部分,包括Template(模板模式)、Chain of Responsibility(责任链模式)、Memento(纪念品模式)、Mediator(中介模式)、Strategy(策略模式)、State 、Observer(观察者模式)、Visitor...
C#面向对象设计模式 (行为型模式) Strategy 策略模式 视频讲座下载
C#面向对象设计模式纵横谈(23):(行为型模式) Strategy 策略模式
设计模式C++学习之策略模式(Strategy)
java设计模式之策略模式 内含策略模式讲解ppt 自己根据ppt写了一个小例子 先不用策略模式 后用策略模式 形成了鲜明对比 对初学者很有用
策略模式(Strategy Pattern) 模板模式(Template Pattern) 访问者模式(Visitor Pattern) 4 J2EE 模式 这些设计模式特别关注表示层。这些模式是由 Sun Java Center 鉴定的。 MVC 模式(MVC Pattern) 业务代表...
主要介绍了Java设计模式之策略模式(Strategy模式)介绍,Strategy是属于设计模式中对象行为型模式,要是定义一系列的算法,这些算法一个个封装成单独的类,需要的朋友可以参考下
《java设计模式(第2版)》通过一个完整的java项目对经典著作design patterns一书介绍的23种设计模式进行了深入分析与讲解,实践性强,却又不失对模式本质的探讨。本书创造性地将这些模式分为5大类别,以充分展现各个...
。
。
AbstractFactory ( 抽象工厂 ) FactoryMethod ( 工厂方法 ) Singleton ( 单态模式 ) Builder ( 建造者模式 ) ...Strategy ( 策略模式 ) TemplateMethod ( 模板方法 ) Visitor ( 访问者模式 )
。
。
这份文档讲诉了设计模式之策略(Strategy)模式,希望可以帮助学习的人!