design pattern——模板方法模式

针对问题:许多类可能做着大同小异的事情,很多方法都有重复,可以将这些类抽象出一个继承结构,将重复的部分放在父类中来实现复用,而不同的地方由子类提供实现,和工厂方法模式类似。并且由子类提供实现这些思想可以大量用于类似回调的功能,例如java api 集合的排序功能。

模板方法模式 定义了一个算法的步骤,并允许子类为一个或多个步骤提供其实践方式。让子类别在不改变算法架构的情况下,重新定义算法中的某些步骤。

模板方法模式结构图:


模板方法模式实现代码:

/**
 * 模板父类
 * @author bruce
 *
 */
public abstract class AbstractClass {
	
	/**
	 * 模板方法
	 */
	public void templateMethod(){
		
		// other method
		primitiveOperation1();
		
		//other method
		
		primitiveOperation2();
		
		//other method
	}
	
	public abstract void primitiveOperation1();
	
	public abstract void primitiveOperation2();
	
}



/**
 * 模板方法实现类A
 * @author bruce
 *
 */
public class ConcreteClassA extends AbstractClass{

	@Override
	public void primitiveOperation1() {
		// TODO Auto-generated method stub
		System.out.println("A: operation1");
	}

	@Override
	public void primitiveOperation2() {
		// TODO Auto-generated method stub
		System.out.println("A: operation2");
	}

}







/**
 * 模板方法实现类B
 * @author bruce
 *
 */
public class ConcreteClassB extends AbstractClass{

	@Override
	public void primitiveOperation1() {
		// TODO Auto-generated method stub
		System.out.println("B: operation1");
	}

	@Override
	public void primitiveOperation2() {
		// TODO Auto-generated method stub
		System.out.println("B: operation2");
	}

}






/**
 * 测试
 * @author bruce
 *
 */
public class Client {
	
	public static void main(String[] args) {
		AbstractClass aClass=new ConcreteClassA();
		aClass.templateMethod();
		
		System.out.println("----------");
		
		aClass=new ConcreteClassB();
		aClass.templateMethod();
		
		/**
		 * output:
		   A: operation1
		   A: operation2
		   ----------
		   B: operation1
		   B: operation2
		 */
	}
}

猜你喜欢

转载自xieyaxiong.iteye.com/blog/1604479