1、策略模式

2019-10-18  本文已影响0人  slowwalkerlcr

策略模式

一、基本概念

策略模式是行为型设计模式。

其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换

策略模式使得算法可以在不影响到客户端的情况下发生变化。

二、结构

下面是基本结构:

image.png

三类角色:

三、案例

案例实现:

定义一族算法,可以实现对两个数的操作,例如+、-、*、/等。

实现代码整体框架图:

image.png

具体代码实现:

Context类:

/**
 * Context 是一个使用了某种策略的类。 实现了 Strategy 接口的实体策略类
 */
public class Context {

    private Strategy strategy;

    public Context(Strategy strategy) {
        this.strategy = strategy;
    }

    public int executeStrategy(int num1, int num2){
        return strategy.doOperation(num1, num2);
    }
}

Strategy接口:

/**策略的公共接口*/
public interface Strategy {
    int doOperation(int num1, int num2);
}

三种对应的算法实现:

/** 算法1: 实现加法 */
public class OperationAdd implements Strategy {
    @Override
    public int doOperation(int num1, int num2) {
        return num1 + num2;
    }
}
/** 算法2:实现减法 */
public class OperationSubstract implements Strategy{
    @Override
    public int doOperation(int num1, int num2) {
        return num1 - num2;
    }
}
/** 算法3: 实现乘法 */
public class OperationMultiply implements Strategy{
    @Override
    public int doOperation(int num1, int num2) {
        return num1 * num2;
    }
}

测试类:

public class MyTest {
    public static void main(String[] args) {

        Context context = new Context(new OperationAdd());

        System.out.println("10 + 5 = " + context.executeStrategy(10, 5));

        context = new Context(new OperationSubstract());
        System.out.println("10 - 5 = " + context.executeStrategy(10, 5));

        context = new Context(new OperationMultiply());
        System.out.println("10 * 5 = " + context.executeStrategy(10, 5));
    }
}

程序输出:

10 + 5 = 15
10 - 5 = 5
10 * 5 = 50

四、总结

上一篇下一篇

猜你喜欢

热点阅读