模板设计模式

模板设计模式是通过抽象类来实现的,该抽象类的方法可以分为两大类:模板方法和基本方法。

模板方法

  一个模板方法是定义在抽象类中的,把基本操作方法组合在一起形成一个总算法或一个总行为的方法。

  一个抽象类可以有任意多个模板方法,而不限于一个。每一个模板方法都可以调用任意多个具体方法。

  基本方法

  基本方法又可以分为三种:抽象方法(Abstract Method)、具体方法(Concrete Method)和钩子方法(Hook Method)。

  ●  抽象方法:一个抽象方法由抽象类声明,由具体子类实现。在Java语言里抽象方法以abstract关键字标示。

  ●  具体方法:一个具体方法由抽象类声明并实现,而子类并不实现或置换。

  ●  钩子方法:一个钩子方法由抽象类声明并实现,而子类会加以扩展。通常抽象类给出的实现是一个空实现,作为方法的默认实现。

 

模板方法就是一个方法(通常为final,不允许子类进行覆盖),该方法包含了一个算法的各个步骤(每个步骤相当于一个方法),在模版方法内调用的方法中有抽象的(待子类覆盖),也有具体的。另外在模版方法所属类中可以包含一个钩子方法(hook),该方法可以控制模版方法中的逻辑,该方法提供默认的实现。子类不是必须实现它。下面给出一个具体的例子。

模版方法类:

/**
 * 基于继承实现模板设计模式
 * @author Administrator
 *
 */
public abstract class MyJdbcTemplateByIn {

	private void beginConnection() {
		System.out.println("begin connection");
	}
	
	private void closeConnection() {
		System.out.println("close connection");
	}
	
	
	public abstract void run();
	
	
	/**
	 * 在模板设计模式中有一种函数叫做钩子函数,钩子函数的作用是让实现类可以通过一些方法来控制模板中的流程
	 * @return
	 */
	public boolean isLog(){return false;}
	
	//模板方法
	public final void execute() {
		beginConnection();
		if(isLog()) {
			System.out.println("加入了日志");
		}
		run();
		closeConnection();
	}
}

 不同的实现方法:

public class MessageDao extends MyJdbcTemplateByIn {

	@Override
	public void run() {
		System.out.println("msg add");
	}

	@Override
	public boolean isLog() {
		return true;
	}

}

 

public class RoleDao extends MyJdbcTemplateByIn {
	
	
	@Override
	public void run() {
		System.out.println("role add");
	}

	
}

 测试方法:

public class TestTemplate {

	@Test
	public void test01() {
		MyJdbcTemplateByIn mt = new RoleDao();
		mt.execute();
		MyJdbcTemplateByIn msgt = new MessageDao();
		msgt.execute();
		
		
	}
	
}

 

设计思想:

  作为模板的方法定义在父类(父类为抽象类),而方法定义使用抽象方法,实现抽象方法的是子类,要在子类实现方法,才能决定具体的操作。如果在不同的子类执行不同实现就可以发展出不同的处理内容。不过,无论在哪个子类执行任何一种实现,处理的大致流程都还是要依照父类制定的方式。

 

 

 

你可能感兴趣的:(设计模式)