Java設計模式(七)策略模式 模板模式

(十三)策略模式

策略模式定義了多個封裝起來的算法,封裝的算法可以相互替換,並且算法的變化不會影響到使用算法的客戶。借用另一位大神的例子。

interface ICalculator{
	public int calculate(String exp);
}
abstract class AbstractCalculator{
	public int[] split(String exp,String opt){
		String array[] = exp.split(opt);
		int arrayInt[] = new int[2];
		arrayInt[0] = Integer.parseInt(array[0]);
		arrayInt[1] = Integer.parseInt(array[1]);
		return arrayInt;
	}
}
class Plus extends AbstractCalculator implements ICalculator{
	public int calculate(String exp){
		int arrayInt[] = split(exp, "\\+");
		return arrayInt[0]+arrayInt[1];
	}
}
class Minus extends AbstractCalculator implements ICalculator{
	public int calculate(String exp){
		int arrayInt[] = split(exp,"-");
		return arrayInt[0] = arrayInt[1];
	}
}
class Multiply extends AbstractCalculator implements ICalculator{
	public int calculate(String exp){
		int arrayInt[] = split(exp,"\\*");
		return arrayInt[0] * arrayInt[1];
	}
}
public class Strategy {
	public static void main(String[] args){
		String exp = "2*8";
		ICalculator cal = new Multiply();
		System.out.println(cal.calculate(exp));
	}
}
系統提供不同算法的實現,對於各種算法封裝好,用戶決定使用哪個算法。策略模式多使用在算法決策系統中,例如電子商務價格算法。跟抽象類很相似,我感覺。

(十四)模板方法模式

模板方法的意義是一個父類方法提供大部分的算法,子類完成剩餘的算法。父類調用子類的實現。

abstract class TemplateCalc{
	//主方法
	public final int calculate(String exp,String opt){
		int array[] = split(exp,opt);
		return calculate(array[0],array[1]);
	}
	public int[] split(String exp,String opt){
		String array[] = exp.split(opt);
		int arrayInt[] = new int[2];
		arrayInt[0] = Integer.parseInt(array[0]);
		arrayInt[1] = Integer.parseInt(array[1]);
		return arrayInt;
	}
	abstract public int calculate(int num1,int num2);
}
class PlusTemp extends TemplateCalc{
	public int calculate(int num1,int num2){
		return num1 + num2;
	}
}
public class Template{
	public static void main(String[] args){
		TemplateCalc tem = new PlusTemp();
		System.out.println(tem.calculate("12*23", "\\*"));
	}
}
將一個子類初始化,調用父類的 calculate 方法,父類執行完分解,調用子類的相加,其實 * 並不代表乘,只是個切分符號。

發佈了58 篇原創文章 · 獲贊 14 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章