我們首先看一下模闆方法的定義:
模闆方法模式:定義一個操作中算法的架構,而将一些步驟延遲到子類中。模闆方法模式使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。
Template Method Pattern: Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure.
我們定義一個抽象類WorkTemplate,該類中定義一個模闆方法doWork()定義了一天上班的過程架構,同時提供了一些基本的方法,子類可以覆寫基本方法來實作自己的上班過程。
package com.templateMethod;
public abstract class WorkTemplate {
//定義的模闆方法,定義了一個過程的架構
public void doWork(){
goToWork();
if(!isFestival()){
Work();
}
goOffWork();
}
//定義基本方法,是模闆方法的組成部分
public abstract int goToWork();//抽象方法
public void Work(){//具體方法
System.out.println("正在幹體力活");
}
public abstract int goOffWork();
public boolean isFestival(){//hook method,鈎子方法
return true;
}
}
下面我們提供兩個實作類
package com.templateMethod;
public class WorkTemplateImpl extends WorkTemplate{
@Override
public int goToWork() {
System.out.println("去上班。。。");
return 0;
}
@Override
public void Work() {
System.out.println("正在幹活。。。");
}
@Override
public int goOffWork() {
System.out.println("下班了。。。。");
return 0;
}
@Override
public boolean isFestival() {
// 預設是要幹活的
return false;
}
}
package com.templateMethod;
public class WorkTemplateImpl2 extends WorkTemplate{
@Override
public int goToWork() {
System.out.println("去上班。。。");
return 0;
}
@Override
public int goOffWork() {
System.out.println("下班了。。。。");
return 0;
}
@Override
public boolean isFestival() {
// TODO Auto-generated method stub
return false;
}
}
測試類
package com.templateMethod;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
WorkTemplate template=new WorkTemplateImpl2();
template.doWork();
}
}
模闆方法模式是一種基于繼承的代碼複用技術,它是一種類行為型模式。
模闆方法模式是結構最簡單的行為型設計模式,在其結構中隻存在父類與子類之間的繼承關系