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 方法,父类执行完分解,调用子类的相加,其实 * 并不代表乘,只是个切分符号。

Java设计模式(七)策略模式 模板模式,布布扣,bubuko.com

Java设计模式(七)策略模式 模板模式

上一篇:Effective C++ Item 33 避免遮掩继承过来的名称


下一篇:一切皆为 JavaScript