天天看點

Java 模闆方法模式的實作

版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。 https://blog.csdn.net/u010046908/article/details/50600552

Java 模闆方法模式的實作

1.定義:

定義一個操作中的算法的架構,而将一些步驟延遲到子類中,使子類可以不改變一個算法的結構。可以重新定義該算法的某些特定步驟。

2.使用場景:

(1).多個子類有公有的方法,并且邏輯基本相同。

(2).重要、複雜的算法,可以把核心算法設計為模闆方法,周邊相關的細節則在子類中實作。

(3).重構時,模闆方法模式是一個經常使用的模式,把相同的代碼抽到父類中,然後通過鈎子方法函數限制其行為。

     3.UML類圖

 4.模闆方法的簡單示例

 模闆方法的實際是封裝一個固定的流程,就像是一套執行模闆一樣,第一步該做什麼,第二部該做什麼都是已經

 在抽象類中定義好了。而子類可以有不同的算法實作。在架構不被修改的情況下實作某些步驟的算法替換。下面

 打開計算機的的動作的簡單模闆方法。

        5.代碼實戰:

AbstractComputer .java

package abs;
/**
 * 
 * @author lidong
 *
 */
public abstract class AbstractComputer {


public void powerOn() {
System.out.println("打開電源");
}


public void checkHardware() {
System.out.println("檢查硬體");
}


public void loadOS() {
System.out.println("加入作業系統");
}


public void login() {
System.out.println("小白的計算機無驗證,直接進入系統");
}

public  final void startUp(){
System.out.println("=====開機==start======");
powerOn();
checkHardware();
loadOS();
login();
System.out.println("=====關機==stop======");
}
}           
package abs;
/**
 * 程式員的計算機
 * @author lidong
 *
 */
public class CoderComputer extends AbstractComputer {

@Override
public void login() {
super.login();
System.out.println("程式員隻需要進行使用者和密碼的驗證就可以了");
}


}           
public class MilitaryComputer  extends AbstractComputer{
    
@Override
public void checkHardware() {
super.checkHardware();
System.out.println("檢查硬體防火牆");
}

@Override
public void login() {
super.login();
System.out.println("進行指紋識别");
}

}           
package abs;

測試程式:
public class Test {


public static void main(String[] args) {
       AbstractComputer comp = new CoderComputer();
       comp.startUp();
       
       comp = new MilitaryComputer();
       comp.startUp();
}


}           

結果:

=====開機==start======
打開電源
檢查硬體
加入作業系統
小白的計算機無驗證,直接進入系統
程式員隻需要進行使用者和密碼的驗證就可以了
=====關機==stop======
=====開機==start======
打開電源
檢查硬體
檢查硬體防火牆
加入作業系統
小白的計算機無驗證,直接進入系統
進行指紋識别
=====關機==stop======            

Demo的下載下傳位址:

https://github.com/lidong1665/JAVA_DESIGN_PATTERNS