版本方法模式是基於繼承的代碼複用的基本技術,版本方法模式的結構和用法也是面向對象設計的核心。包括基本方法和模塊方法, java
模板方法模式涉及的角色 編程
1: 抽象模板角色有以下的責任: app
a: 定義了一個或多個抽象方法,以便讓子類實現,這些抽象方法叫作基本方法,他們是一個頂級邏輯的組成步驟。 ide
b:定義並實現了一個模板方法,這個模板方法通常是一個具體方法,他給出了一個頂級邏輯的骨架,而邏輯的組成步驟在相應的抽象操做中,推遲到子類實現。頂級邏輯也是調用一些具體方法。 spa
2:具體模板角色有如下的責任: 設計
a:實現父類所定義的一個或多個抽出方法,他們是一個頂級邏輯的組成步驟。 code
b:每一個抽象模板角色均可以有任意多個具體模板角色與之對應,而每一個具體模板角色均可以給出這些抽象方法的不一樣的實現,從而使得頂級邏輯的實現。 對象
例如: 繼承
abstract public class AbstractClass} it
/////////////////////////////////////////////////////////////
public class ConcreteClass extends AbstractClass
{
public void doOperation1()
{
System.out.println("doOperation1();");
}
public void doOperation2()
{
//The following should not happen:
// doOperation3();
//write your code here
System.out.println("doOperation2();");
}
}
/////////////////////////////////////////////////////
/**
*
* @author jerry
*
*
*/
public class MyClient
{
/**
* @param args
*/
public static void main(String[] args)
{
AbstractClass abstractClass=new ConcreteClass();
abstractClass.doOperation1();
System.out.println("----------------------");
abstractClass.TemplateMethod();
abstractClass=new ConcreteClass2();
abstractClass.doOperation1();
abstractClass.doOperation2();
System.out.println("==========");
abstractClass.TemplateMethod();
}
}
在這個能夠運行的基礎上,我再添加一個具體類,方便本身和網友理解
public class ConcreteClass2 extends AbstractClass
{
@Override
protected void doOperation1()
{
System.out.println("---ConcreteClass2---doOperation1---");
}
@Override
protected void doOperation2()
{
System.out.println("---ConcreteClass2---doOperation2---");
}
}
參考資料
1《java編程思想》
2《java與模式》