您的位置:首页 > 其它

策略模式

2016-03-08 23:41 274 查看

策略模式

策略模式是一种定义一系列算法的方法

* 当一些算法完成的都是相同的工作,只是实现不同,就可以用同样的方式调用所有的算法。

* 策略模式可以降低算法的使用类与算法类之间的耦合。

封装变化点是面向对象的一种很重要的思维方式。而策略模式就是封装了一系列概念上相同而实现不同的算法的变化之处。

所需的类:

Strategy 策略类(一系列算法类的抽象父类)

ConcreteStarategyA 具体算法类(继承自Strategy类)

Context 上下文类(策略对象在此类中生成)

策略模式的Strategy类为Context定义了一系列可供重用的算法或行为,使用继承可以提取出算法类的公共功能。另外,由于每一个算法类都是单独存在的,所以策略模式可以简化单元测试。在此处我们将简单工厂模式和策略模式相结合,从而使得策略对象在Context类得以生成。

代码实现:

Strategy类

[code]/**
 * 抽象算法类
 */
public abstract class Strategy {

    //算法方法
    public abstract void AlgorithmInterface();
}


Context类

[code]public class Context {

    Strategy strategy;

    public Context(String type){

        switch (type) {
        case "A":
            strategy = new ConcreteStarategyA();
            break;
        case "B":
            strategy = new ConcreteStarategyB();
            break;
        default:
            break;
        }
    }
    //上下文接口
    public void contextInterface(){
        strategy.AlgorithmInterface();//根据具体的算法对象,调用其实现方法
    }

}


具体的算法类

[code]public class ConcreteStarategyA extends Strategy{

    @Override
    public void AlgorithmInterface() {
        // TODO Auto-generated method stub

        //算法A的具体实现
    }

}


[code]public class Application {

    public static void main(String args[]){
        //可以看出客户端只需要认识Context一个类就可以了,
        //相比于简单工厂模式这种(策略模式与简单工厂模式相结合)可以降低耦合度。
        Context context = new Context("B");
        context.contextInterface();
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: