【設計模式】--模板方法

ZeroWM發表於2016-01-18


模板方法

  在一個方法中定義一個演算法的骨架,而將具體的實現延遲到子類。模板方法使得子類在不改變演算法結構的情況下,重新定義演算法中的某些步驟。下圖中AbstractClass就是我們定義的抽象的演算法骨架,ConcreteClass就是對演算法具體的實現。




AbstractClass

/**
 * @ClassName:AbstractClass
 * @Description:TODO
 * @author wm
 * @date 2016年1月16日下午8:08:50
 */
public abstract class AbstractClass {

	public static final String METHOD_1="m1";
	public static final String METHOD_2="m2";
	
	public void templateMethod( String methodName){
		if(METHOD_1.equals(methodName)){
			doOperation1(methodName);
		}
		if(METHOD_2.equals(methodName)){
			doOperation2(methodName);
		}
	}
	
	protected abstract void doOperation1(String methodName);   
	protected abstract void doOperation2(String methodName);

}

ConcreteClass

/**
 * @ClassName:ConcreteClass
 * @Description:TODO
 * @author wm
 * @date 2016年1月18日下午3:03:11
 */
public class ConcreteClass extends AbstractClass {


	@Override
	protected void doOperation1(String methodName) {
		System.out.println("ConcreteClass-->>doOperation1()" + methodName);

	}

	@Override
	protected void doOperation2(String methodName) {
		System.out.println("ConcreteClass-->>doOperation2()" + methodName);
	}

}

測試類

/**
 * @ClassName:Test
 * @Description:TODO
 * @author wm
 * @date 2016年1月18日下午3:04:40
 */
public class Test {

	public static void main(String[] args){
		AbstractClass a=new ConcreteClass();
		//a.templateMethod(AbstractClass.METHOD_1);
		a.templateMethod(AbstractClass.METHOD_2);
	}

}

templateMethod傳入引數METHOD_1就呼叫doOperation1方法,2類似。類比Servlet,AbstractClass類似於Servlet中的doGet,doPost方法,具體的實現由子類完成。




-------------------------------------------wm 點點滴滴的積累----------------------------------------------------



相關文章