zoukankan      html  css  js  c++  java
  • 设计模式-策略模式

    参考:《大话设计模式》

    策略模式(Strategy):
    它定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让
    算法的变化,不会影响到使用算法的客户
    环境角色(Context):持有一个Strategy对象的引用
    抽象策略角色(Strategy):一般为抽象类和接口,给出所有的具体策略
    具体策略角色(ConcreteStrategy):包装了相关算法

    特点:
    1.封装变化的概念
    2.编程中使用接口

    优点:
    算法的自由切换
    避免使用多重条件判断
    扩展性良好
    简化单元测试
    缺点:
    策略类会增多
    所有策略类都需要对外暴露
    策略模式的适用场景:
    在分析过程中听到需要在不同时间应用不同的业务规则,就可以使用策略模式解决

    1. 策略类,定义所有支持的算法的公共接口

    public interface Strategy {
    //定义抽象方法
    public abstract int calc(int x,int y);
    }


    2. 具体策略类,封装了具体的算法和行为
    ConcreteStrategyA
    public class ConcreteStrategyA implements Strategy {

    //定义具体的策略方法 加法
    @Override
    public int calc(int x, int y) {
    return x+y;
    }
    }


    ConcreteStrategyB
    public class ConcreteStrategyB implements Strategy {

    //定义具体的策略方法 减法法
    @Override
    public int calc(int x, int y) {
    return x-y;
    }
    }

    3.定义Context上下文

    //使用策略模式和简单工厂模式
    public class Context {
    private Strategy strategy=null;
    public Context(String type){
    switch (type)
    {
    case "加法":
    ConcreteStrategyA concreteStrategyA=new ConcreteStrategyA();
    strategy=concreteStrategyA;
    break;
    case "减法":
    ConcreteStrategyB concreteStrategyB=new ConcreteStrategyB();
    strategy=concreteStrategyB;
    break;
    }
    }
    public int getResult(int a,int b){
    return strategy.calc(a,b);
    }
    }

    4.测试代码
    public class test {
    public static void main(String[] args) {
    Context context=new Context("减法");
    System.out.println(context.getResult(2,5));
    }
    }
     
     

  • 相关阅读:
    服务器端和客户端有什么区别
    在 CSS 中,width 和 height 指的是内容区域的宽度和高度
    弹出框
    cdn 查询库
    超链接 a的小手
    jsonk可以传递boolean
    list,set中可以存放Object类型对象
    $("p").click();触发每一个匹配元素的click事件
    jquery选择器中的逗号
    <input type="text" onfocus="func();" onblur="func1();"/>
  • 原文地址:https://www.cnblogs.com/lijing1/p/10548830.html
Copyright © 2011-2022 走看看