設計模式5--策略模式(Strategy)

策略模式的本質:分離算法,選擇實現
package com;

public interface Strategy {
	
	double caclPrice(double goodsPrice);
	
}
package com.impl;

import com.Strategy;

public class StrategyA implements Strategy {

	@Override
	public double caclPrice(double goodsPrice) {
		System.out.println("普通客戶沒有折扣哦!");
		return goodsPrice;
	}

}
package com.impl;

import com.Strategy;

public class StrategyB implements Strategy {

	@Override
	public double caclPrice(double goodsPrice) {
		System.out.println("VIP客戶可以打8折哦!");
		return goodsPrice * (1 - 0.2);
	}

}
package com;

import com.Strategy;

public class Context {
	private Strategy strategy;

	public Strategy getStrategy() {
		return strategy;
	}

	public void setStrategy(Strategy strategy) {
		this.strategy = strategy;
	}
	
	public double caclPrice(double goodsPrice){
		return strategy.caclPrice(goodsPrice);
	}
}
import com.Context;
import com.impl.StrategyA;
import com.impl.StrategyB;

public class Client {
	public static void main(String[] args) {
		Context context = new Context();
		context.setStrategy(new StrategyA());
		System.out.println(context.caclPrice(100));
		
		context.setStrategy(new StrategyB());
		System.out.println(context.caclPrice(100));
	}
}


策略算法是相同行爲的不同實現。

如果沒有上下文,那麼就需要客戶端來直接與具體的策略交互,尤其是當需要提供一些公共功能,或者相關狀態存儲的時候,會大大增加客戶端使用的難度。因此,引入上下文還是很必要的,有了上下文,這些工作就由上下文來完成了,客戶端只需要與上下文交互就可以了,這樣會讓整個設計模式更獨立、更有整體性,也讓客戶端更簡單。



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