Java设计模式笔记之策略模式

本文介绍了策略模式的概念、结构、示例代码及其应用场景。策略模式是一种行为设计模式,它将一系列算法封装到具有相同接口的不同类中,使这些算法可以互换。通过这种方式,系统可以在运行时动态选择合适的算法。

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

1.策略模式

策略模式是对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。


2.策略模式的结构

参与角色:

  • Context:环境角色,持有一个引用,并给客户端提供一个方法,调用策略。
  • Strategy:抽象策略角色,定义所有策略算法的公共接口,给Context调用提供一个统一的接口。
  • StrategyImplA/B/C:具体策略角色,实现一个具体的策略。

3.示例代码:

Strategy.java
public abstract class Strategy {
	/**
	 * 統一操作
	 */
	public abstract void operation();

}

StrategyImplA.java
public class StrategyImplA extends Strategy {

	@Override
	public void operation() {

		System.out.println("第一种操作");
	}

}

Context.java
/**
 * 环境角色,保存一个策略引用,也可以保存一些环境数据,供策略使用
 * @author chenxh
 *
 */
public class Context {
	
	Strategy stra;
	    
	public Context(Strategy stra) {
		this.stra = stra;
	}
	
	//get客户端调用
	public void doOperation() {
		stra.operation();
	}


}

Client.java
public class Client {

	public static void main(String[] args) {
		Context context = new Context(new StrategyImplA());
		context.doOperation();
		
		context =  new Context(new StrategyImplC());		
		context.doOperation();
		
	}

}

运行结果:

第一种操作
第三种操作

4.策略模式的适用场景

  1. 如果在一个系统中有许多类,他们之间的区别仅在于他们的行为,使用策略模式分离这种行为变化,可以动态让一个对象在许多行为中选择一个行为
  2. 一个系统需要动态地在几种算法中选择一种
  3. 一个系统的算法使用的数据不可以让客户端知道。策略模式把算法使用的数据封装在策略类中。
  4. 如果一个对象有很多行为,使用策略模式,把这些模式转移到具体策略类中,防止条件选择语句的出现

5.策略模式的优点和缺点

策略模式的优点
  • 策略模式提供了管理相关算法族的办法。策略模式的策略继承体系(示例图中只有3个具体策略,而且只有一层结构,实际中可能更多),把公共的代码移到父类中,避免重复代码
  • 策略模式用委托代替继承。系统可以动态改变算法的行为
  • 避免使用多重条件转移语句
策略模式的缺点:
  • 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
  • 策略模式造成很多策略类。可以使用享元模式来减少对象的数量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值