设计模式-行为型模式-策略模式

策略模式(Strategy):它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。[DP]

复制代码
//首先,我们定义一个策略接口:


public interface Strategy {
    public int doOperation(int num1, int num2);
}
//接着,我们创建实现了策略接口的具体策略类:


public class OperationAdd implements Strategy {
    @Override
    public int doOperation(int num1, int num2) {
        return num1 + num2;
    }
}

public class OperationSubtract implements Strategy {
    @Override
    public int doOperation(int num1, int num2) {
        return num1 - num2;
    }
}

public class OperationMultiply implements Strategy {
    @Override
    public int doOperation(int num1, int num2) {
        return num1 * num2;
    }
}
//然后,我们创建一个上下文类,它接受一个策略对象并使用该策略对象执行操作:


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);
    }
}
//最后,我们编写客户端代码来演示如何使用策略模式:


public class StrategyPatternDemo {
    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 OperationSubtract());    
        System.out.println("10 - 5 = " + context.executeStrategy(10, 5));

        context = new Context(new OperationMultiply());    
        System.out.println("10 * 5 = " + context.executeStrategy(10, 5));
    }
}
相关推荐
秋田君3 小时前
深入理解JavaScript设计模式之策略模式
javascript·设计模式·策略模式
不会编程的小江江5 小时前
【设计模式】UML类图与工厂模式
c++·设计模式
lpfasd1236 小时前
备忘录模式(Memento Pattern)
java·设计模式·备忘录模式
lpfasd1236 小时前
模板方法模式(Template Method Pattern)
java·开发语言·设计模式·模板方法模式
lpfasd1238 小时前
策略模式(Strategy Pattern)
策略模式
lpfasd1239 小时前
状态模式(State Pattern)
java·设计模式·状态模式
Dream耀10 小时前
解锁JavaScript函数式编程的核心技能
前端·javascript·设计模式
qqxhb12 小时前
零基础设计模式——行为型模式 - 中介者模式
java·设计模式·go·中介者模式
♚卜卦1 天前
面向对象 设计模式简述(1.创建型模式)
开发语言·设计模式
周某某~1 天前
七.适配器模式
java·设计模式·适配器模式