版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。 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