14.Strategy-策略模式

Strategy 策略模式

  • 策略模式:
    也称为政策模式(Policy)。策略模式定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户。
    这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有算法,
    减少各种算法类与使用类之间的耦合。策略模式是一种对象行为型模式。

  • 结构图:
    Strategy_structure

  • 示例类图:
    Strategy_uml

  • 示例代码:

// Strategy
public interface Operation {
    public int doOperation(int x, int y);
}

// ConcreteStrategy
public class OperationAdd implements Operation {
    @Override
    public int doOperation(int x, int y) {
        return x + y;
    }
}
public class OperationMultiply implements Operation {
    @Override
    public int doOperation(int x, int y) {
        return x * y;
    }
}
public class OperationSubstract implements Operation {
    @Override
    public int doOperation(int x, int y) {
        return x - y;
    }
}

// Context
public class Calculator {
    private Operation operation;

    public Calculator(Operation operation) {
        this.operation = operation;
    }

    public void setOperation(Operation operation) {
        this.operation = operation;
    }

    public int executeOperation(int x, int y) {
        return operation.doOperation(x, y);
    }
}

public class StrategyTest {

    public static void main(String[] args) {
        Calculator calculator = new Calculator(new OperationAdd());
        System.out.println(calculator.executeOperation(1000, 24));

        calculator.setOperation(new OperationMultiply());
        System.out.println(calculator.executeOperation(1000, 24));
    }

}

角色:
1. Context(环境类):
环境类是使用算法的角色,它在解决某个问题(即实现某个方法)时可以采用多种策略。在环境类中维持一个对抽象策略类的引用实例,用于定义所采用的策略。

  1. Strategy(抽象策略类):
    它为所支持的算法声明了抽象方法,是所有策略类的父类,它可以是抽象类或具体类,也可以是接口。
    环境类通过抽象策略类中声明的方法在运行时调用具体策略类中实现的算法。
      
  2.  ConcreteStrategy(具体策略类):
    它实现了在抽象策略类中声明的算法,在运行时,具体策略类将覆盖在环境类中定义的抽象策略类对象,使用一种具体的算法实现某个业务处理。

    • 策略模式解析
      策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相通的工作,
      只是实现不同,它可以以相同的方式调用所有的算法,减少各种算法类和使用算法类之间的耦合。
      策略模式就是用来封装算法的,但是实践中,我们发现可以用它来分装几乎任何类型的规则,
      只要在分析过程中听到需要在不同的时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值