码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2014-07-12 17:19:01      阅读:270      评论:0      收藏:0      [点我收藏+]

标签: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设计模式(七)策略模式 模板模式

标签:java设计模式   策略模式   模板模式   

原文地址:http://blog.csdn.net/fanyun7654/article/details/37689535

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!