Strategy 策略模式

模式定义

 

Strategy模式定义了一系列不同的算法封装成不同的类,使客户端通过环境类来调用这些不同的算法类,实现统一对象的不同行为。

使用范围

 

  • 同一个对象在不同的情形下具有不同的行为

举例说明

 

假设现有两个数字,他们在不同的情况下需要做不同的数学运算,加减乘除,具体由客户端来决定何时实现这些不同行为。我们首先定义一个Strategy接口,提供了execute的方法。同时这个execute具体内部的行为由Strategy的实现类来决定是加还是减,乘还是除。

public interface Strategy {
	public int execute(int arg1, int arg2);
}

--------
public class StrategyAdd implements Strategy{
	public int execute(int arg1, int arg2) {
		return arg1 + arg2;
	}
}

--------
public class StrategyMultiply implements Strategy{
	public int execute(int arg1, int arg2) {
		return arg1 * arg2;
	}
}

--------
public class StrategySubstract implements Strategy{
	public int execute(int arg1, int arg2) {
		return arg1 - arg2;
	}
}

至此,客户端完全可以通过调用这些不同的类来实现具体的数学运算。但是Strategy的模式提供了一个环境类,使客户在调用这些不同的类时能使用一致的接口。客户无需知道这些算法类具体如何运算,它只需在环境类中注入它需要的类对象即可。

public class StrategyContext {

	private Strategy strategy;
	public StrategyContext(Strategy s){
		strategy = s;
	}
	
	public int executeStrategy(int arg1, int arg2){
		return strategy.execute(arg1, arg2);
	}
}

客户类通过创建环境类对象,注入算法类。

public class StrategyClient {
	public static void main(String args[]){
		int r1, r2, r3;
		
		StrategyContext sm = new StrategyContext(new StrategyAdd());
		r1 = sm.executeStrategy(2, 4);
		sm = new StrategyContext(new StrategySubstract());
		r2 = sm.executeStrategy(2, 4);
		sm = new StrategyContext(new StrategyMultiply());
		r3 = sm.executeStrategy(2, 4);
		
		System.out.println("r1=" + r1);
		System.out.println("r2=" + r2);
		System.out.println("r3=" + r3);
	}

}

运算结果:

r1=6
r2=-2
r3=8

下载示例

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值