三、策略模式Strategy

一、定義

定義算法家族,分別封裝起來,讓他們之間可以互相替換,此模式讓算法的替換不會影響到使用算法的客戶。

二、特點

可以以相同的方式調用所有的算法(可以通過類繼承的向上轉型或者一個接口多個實現類的方式),減少了各種算法類與使用算法類之間的耦合[DPE]。簡化單元測試,每個算法都有自己的類,可以通過自己的接口單元測試。

將算法行爲封裝在一個個獨立的類中,可以在使用這些行爲的類中消除條件語句


三、結構圖



四、示例代碼

1、策略抽象類Strategy.java

/**
 * 策略抽象類
 * @author lattice
 *
 */
public abstract class Strategy {
	public abstract void algorithmInterface();
}
/**
 * 策略抽象類子類,實現抽象方法
 * @author lattice
 *
 */
class ConcreteStrategyA extends Strategy{
	@Override
	public void algorithmInterface(){
		System.out.println("策略A實現方法");
	}
}

class ConcreteStrategyB extends Strategy{
	@Override
	public void algorithmInterface(){
		System.out.println("策略B實現方法");
	}
}

class ConcreteStrategyC extends Strategy{
	@Override
	public void algorithmInterface(){
		System.out.println("策略C實現方法");
	}
}
2、策略調度類context.java

/**
 * 策略調度類
 * @author lattice
 *
 */
public class Context {
	Strategy strategy;
	public Context(Strategy strategy){
		this.strategy=strategy;
	}
	
	public void ContextInterFace(){
		//根據具體的策略對象,調用其算法的方法
		this.strategy.algorithmInterface();
	}
}

3、使用類Action.java

/**
 * @策略模式實現
 * 	策略模式就是用來封裝算法的,把一系列的算法封裝到Strategy抽象類衍生的子類中,
 * 用Context來控制不同算法的調用
 * @author lattice
 * @date 2016-12-21
 */
public class Action {

	public static void main(String[] args) {
		Context context;
		context=new Context(new ConcreteStrategyA());
		context.ContextInterFace();
		context=new Context(new ConcreteStrategyB());
		context.ContextInterFace();
		context=new Context(new ConcreteStrategyC());
		context.ContextInterFace();

	}
}





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章