设计模式学习笔记--策略模式

本文介绍策略模式的概念及其在软件设计中的应用。策略模式允许在运行时更改一个类的行为或算法,通过定义一系列可互换的算法并封装它们来实现。文章详细展示了如何通过Java代码实现策略模式,包括创建策略接口及其实现类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二十三、策略模式

策略模式(Strategy Pattern),可以使得一个类的行为或算法,在运行时进行更改。有点类似状态模式,需要创建表示各种策略的对象,
以及一个行为随着策略而变化的context对象,通过策略对象的改变,来改变执行对象的行为算法。

简介

定义一系列的算法,并封装起来作为策略,可相互替换。
- 优点:算法可以自由切换,避免使用多重条件判断,扩展性好。
- 缺点:策略类较多,且需要对外公开。
若是策略类真的多了,可以使用混合模式,不要局限于单一的设计模式。

实现

定义一个活动的Strategy接口和它的实现类,以及Context,使用了某个策略的行为类。
strategy
- 创建接口

Strategy.java

public interface Strategy {
    public int doOperation(int num1,int num2);
}
  • 接口实现

OperationAdd.java

public class OperationAdd implements Strategy {
    @override
    public int doOperation(int num1,int num2){
        return num1+num2;
    }
}
````
`OperationSubstract.java`




<div class="se-preview-section-delimiter"></div>

```java
public class OperationSubstract implements Strategy{
    @override
    public int doOperation(int num1,int num2){
        return num1-num2;
    }
}

OperationMultiply.java

public class OperationMultiply implements Strategy {
        @override
        public int doOperation(int num1,int num2){
            return num1*num2;
        }
}
  • 创建行为类

Context.java

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);
    }
}
  • 演示

StrategyPatternDemo.java

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 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值