【第三天】策略模式

策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。文章通过一个计算器的案例展示了如何创建策略接口和实现类,以及如何在上下文对象中使用这些策略,从而减少if...else语句,提高代码的灵活性和可扩展性。

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

前言

策略模式是针对不同算法给出不同实现的方式,解耦代码,减少代码中if.....else代码书写量。

一、策略模式UNL类图

 

对象角色
Context

上下文对象,依赖Strategy接口,一般像Context传入Strategy实现对象,执行策略方法

Strategy为不同实现类定义要执行策略的方法的接口
StrategyImpl具体算法逻辑实现类,主要是实现不同的算法实现

二、代码案例

 以计算器的案例为例,一个计算器要对两个数字进行加减乘除得算法,最终都会得到一个结果。我们把执行加减乘除看做是不同的策略。

1、抽象出计算器加减乘除策略接口

public interface CallulatorStrategy  {

    public double countResult(int a, int b);
}

2、定义加减乘除类的四个实现,继承CalclulatorStrategy接口

public class CallulatorAdd implement CallulatorStrategy {

    @Overide
    public double countResult(int a, int b) {

        return a  + b;
    }

}

public class CallulatorSubtract implement CallulatorStrategy {

    @Overide
    public double countResult(int a, int b) {

        return a  - b;
    }

}

public class CallulatorMultiplication implement CallulatorStrategy {

    @Overide
    public double countResult(int a, int b) {

        return a  * b;
    }

}

public class CallulatorDivision  implement CallulatorStrategy {

    @Overide
    public double countResult(int a, int b) {

        return a  / b;
    }

}

3、定义一个策略类,用来执行策略类

public class StrategyContext {

    private CallulatorStrategy strategy;

    public StrategyContext (CallulatorStrategy strategy) {

        this.strategy = strategy;
    }


    public double strategyExecute (double a, double b) {

        this.strategy.countResult(a, b);
    }

}

4、调用示例

public class Demo {
   public static void main(String[] args) {
      StrategyContext context = new StrategyContext (new CallulatorAdd());    
      System.out.println(context.strategyExecute(10, 5));
 
      context = new Context(new CallulatorSubtract());      
      System.out.println(context.strategyExecute(10, 5));
 
      context = new Context(new CallulatorMultiply());    
      System.out.println(context.strategyExecute(10, 5));
   }
}

三、总结 

优点

1、减少了代码中的逻辑判断

2、算法可自由切换、实际开发算法实现类可配置在配置文件、数据库中

3、扩展性好

缺点

1、 策略类会随着业务扩展越来越多

2、策略类均要对外暴露

使用场景

1、减少判断语句

2、同一个对象不同的算法实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值