策略模式

一、创建Strategy抽象类,定义所有支持的算法的公共接口:

public abstract class Strategy {
    public abstract void AlgorithmInterface();
}

二、创建一系列ConcreteStrategy类,继承与Strategy:
ConcreteStrategyA:

public class ConcreteStrategyA extends Strategy {
    @Override
    public void AlgorithmInterface() {
        System.out.println("实现 Algorithm A!");
    }
}

ConcreteStrategyB:

public class ConcreteStrategyB extends Strategy {
    @Override
    public void AlgorithmInterface() {
        System.out.println("实现 Algorithm B!");
    }
}

ConcreteStrategyC:

public class ConcreteStrategyC extends Strategy {
    @Override
    public void AlgorithmInterface() {
        System.out.println("实现 Algorithm C!");
    }
}

三、创建Context,用一个ConcreteStrategy来配置、维护一个队Strategy对象的引用:

public class Context {
    Strategy strategy;
    //初始化时传入具体的策略对象。
    public Context(Strategy strategy){
        this.strategy = strategy;
    }
    //上下文接口
    //根据具体的策略对象,调用其算法方法
    public void ContextInterface(){
        strategy.AlgorithmInterface();
    }
}

四、StrategyMain:

public class StrategyMain {
    public static void main(String[] args) {
        Context context;
        context = new Context(new ConcreteStrategyA());
        context.ContextInterface();
        context = new Context(new ConcreteStrategyB());
        context.ContextInterface();
        context = new Context(new ConcreteStrategyC());
        context.ContextInterface();
    }
}

五、小结:
策略模式是一种定义一系列算法的模式,从整体看来这些算法的目的都是一致的,只是实现不同。策略模式可以以相同的方式调用所有的算法,减少了算法类与使用算法的类之间的耦合。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 场景问题# 1.1 报价管理## 向客户报价,对于销售部门的人来讲,这是一个非常重大、非常复杂的问题,对不同的...
    七寸知架构阅读 5,121评论 9 62
  • 1 场景问题 1.1 报价管理 向客户报价,对于销售部门的人来讲,这是一个非常重大、非常复杂的问题,对不同的客户要...
    4e70992f13e7阅读 3,107评论 2 16
  • 本文仅仅为入门,高手勿喷。 实际工作中,我们总会遇到类似如下的需求:某支付系统接入以下几种商户进行充值:易宝网易,...
    JarvanMo阅读 14,254评论 14 26
  • 1.问题例1:一个菜单功能能够根据用户的“皮肤”首选项来决定是否采用水平的还是垂直的排列形式。同事可以灵活增加菜单...
    小飞猪阅读 380评论 0 0
  • 1.概述 demo地址,欢迎star 例子1: 商场产品销售:可以正常价格售出,可以打折形式售出,也可以通过积分的...
    barry阅读 769评论 0 1