设计模式之策略模式

本文介绍了策略模式,它是行为型模式,可在运行时更改类的行为或算法。能解决多重 if-else 难以维护的问题,有算法自由切换等优点,也存在策略类增多等缺点。还结合生活和程序示例说明,强调其是不同解决方案可随时替换。

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

引言:何为策略模式?策略模式是为了解决哪种类型的问题?

策略模式:在策略模式中,一个类的行为或算法可以在运行时更改。这种类型的设计模式属于行为型模式。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象的改变而改变的context对象。策略对象改变context对象的执行算法。

意图:定义一系列算法,把他们一个个封账起来。并且使他们可以相互替换

主要解决:在有多种算法相似的情况下,解决多重if。。 else的难以维护的问题

优点:1. 算法可以自由切换。 2.避免使用多重判断 。3.扩展性良好

缺点:1.策略类会随着算法的增多而变多。2.策略类必须要对外暴露

使用场景:1.如果在一个系统中有许多类,他们之间的区别仅在于他们的行为,那么使用策略模式可以动态的让一个对象在许多行为中选择一种行为。2.一个系统需要动态的在几种算法中选择一种。3.如果一个对象有很多行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现

以上摘自菜鸟教程-策略模式介绍

说一说我自己对策略模式的理解

1.首先重中文理解策略一词,策略,指计策谋略。一般是指:1. 可以实现目标的方案集合;2. 根据形势发展而制定的行动方针和斗争方法;3. 有斗争艺术,能注意方式方法。

“策略”就是为了实现某一个目标,首先预先根据可能出现的问题制定的若干对应的方案,并且,在实现目标的过程中,根据形势的发展和变化来制定出新的方案,或者根据形势的发展和变化来选择相应的方案,最终实现目标。

2.反应到现实生活的事情,比如说出门,出门可以选择很多交通工具,车,飞机,火车等等。那么这些交通工具就是出门的解决方案策略,而且互相直接可以替代,比方出门选择坐车,途中觉得车的速度慢,可以选择换成飞机。

3.用程序来描述,首先得有出门这个行为的载体,比方说先定义一个旅行的接口,接口中有出门的抽象方法,然后定义多个实行旅行接口的实体策略类,每个策略类实行出门的抽象方法,有的实现为坐车,有的实现为乘飞机等等

现在用一个例子来描述策略模式

实现

我们将创建一个定义活动的 Strategy 接口和实现了 Strategy 接口的实体策略类。Context 是一个使用了某种策略的类。

StrategyPatternDemo,我们的演示类使用 Context 和策略对象来演示 Context 在它所配置或使用的策略改变时的行为变化。

策略模式的 UML 图

 

//步骤 1
//创建一个接口。
public interface Strategy {
   public int doOperation(int num1, int num2);
}

//步骤 2
//实现接口的实体类。每一个实现类都做了不同的操作
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;
   }
}

//步骤 3
//创建 Context 类。


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);
   }
}

//步骤 4
//使用 Context 来查看当它改变策略 Strategy 时的行为变化。

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));
   }
}

步骤 5

执行程序,输出结果:

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

总结策略模式就是一件事情的不同解决方案,这些解决方案可以随时随地进行替换,而不影响到使用策略的对象

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值