设计模式学习—策略模式(Strategy Design Pattern)

本文详细介绍了策略模式的概念及其在Java中的具体实现方式,并通过一个简单的算术运算实例来演示如何使用策略模式来改变对象的行为。

一、我的理解


策略模式讲究为某个类的对象提供不同的初始化参数(策略),那么它在执行某一动作时会采用不同的方法(初始化参数中实现的实际方法体)

二、实现方式


面向接口编程,为某个类初始化时提供不同的实现了相同接口的类的实例对象,该类实际执行动作时执行的是初始化参数中实际实现的方法体

三、实例



Java实例

Strategy接口:策略的抽象接口,统一策略的执行方法入口

package com.study.dp.strategy;

public interface Strategy {
    
    public int doOperation(int num1, int num2);

}
OperationAdd类:实际实现的策略一,加法

package com.study.dp.strategy;

public class OperationAdd implements Strategy {

    @Override
    public int doOperation(int num1, int num2) {
        return num1+num2;
    }

}
OperationSubstract类:实际实现的策略二,减法

package com.study.dp.strategy;

public class OperationSubstract implements Strategy {

    @Override
    public int doOperation(int num1, int num2) {
        return num1-num2;
    }

}
OperationMultiply类:实际实现的策略三,乘法

package com.study.dp.strategy;

public class OperationMultiply implements Strategy {

    @Override
    public int doOperation(int num1, int num2) {
        return num1*num2;
    }

}
Context类:策略的执行类,向其传入不同策略的实例,则会执行不同的策略

package com.study.dp.strategy;

public class Context {
    
    private Strategy strategy;

    public Context(Strategy strategy) {
        super();
        this.strategy = strategy;
    }
    
    public int executeStrategy(int num1, int num2) {
        return strategy.doOperation(num1, num2);
    }

}
Demo类:测试类

package com.study.dp.strategy;

public class Demo {
    
    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元

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

抵扣说明:

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

余额充值