模版方法設計模式

qianby發表於2021-09-09

首先要說一下我為什麼要寫這個設計模式呢?因為我在聽security這門課的時候涉及到了大體如下

圖片描述

懵逼不,反正我第一次看的時候是比較懵逼的,所以我特意寫了這篇文章來由淺入淺的方式來講解一下。

我們再來看一個簡單的圖:

圖片描述

透過上圖我們不難看出,大體意思就是把動作抽象出來(激動,大學聽抽象這次一臉懵逼,我今天居然能自己講了!),一會我們就開個車,好好講一把。抽象出來之後由子類繼承並實現,然後父類再調取子類的實現。這點就符合架構師的一條原則了 “以增量的方式去實現修改”,意思大概就是在不改原有程式碼的基礎下去增加新的程式碼,就能達到自己目。

好處顯而易見: 重用性更高

來,來,來  車子開起來

public  abstract class Abstract {  
//模板方法,上廁所之小便流程的流程 //申明為final,不希望子類覆蓋這個方法,防止更改流程的執行順序 
        final void washroom(){  
           this.go();        //第一步:走到廁所
           this.takeOff();   //第二步:脫褲子
           this.urinate()      //第三步:尿
           this.dress()      //第四步:提褲子
           this.out()  //第五步:出廁所
      
//定義結構裡哪些方法是所有過程都是一樣的可複用的,哪些是需要子類進行實現的
           
     //第一步:走到廁所是一樣的,所以直接實現
    void go(){  
        System.out.println("走著,上廁所去");  
      }  

     //第二步:同理
     void takeOff(){  
        System.out.println("脫褲子,準備開始");  
    }  

     //第三步:重點來了,男生是站立而尿(別扯犢子你也想蹲下或者坐下)女生則是蹲著所以這裡不同,我們要抽象這個方法
      abstract void  urinate();
    
     //第四步:同理 直接實現
    void dress();{  
        System.out.println("提上我的小褲子");  
    } 
    //第五步:同理 直接實現
     void out();{  
        System.out.println("尿完收工");  
   }   
}


//男生尿的類
  public class boy_biubiu extend  Abstract {
   
    @Override    
    public void  urinate(){  
        System.out.println("掏槍發射,戰一個昏天黑地");  
    }  
    
    
}//女生尿的類
  public class girls_biubiu extend  Abstract {
   
    @Override    
    public void  urinate(){  
        System.out.println("頷首低眉,來一個水淹七軍");  
    }  
}

public class Template Method{  public static void main(String[] args){
     //男生上廁所
    boy_biubiu boy= new boy_biubiu ();
    boy.washroom();
     
    //女生上廁所
    girls_biubiu girls= new girls_biubiu ();
    girls.washroom();
    }

}



result:
走著,上廁所去
脫褲子,準備開始
掏槍發射,戰一個昏天黑地
提上我的小褲子
尿完收工

走著,上廁所去
脫褲子,準備開始
頷首低眉,來一個水淹七軍
提上我的小褲子
尿完收工


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3549/viewspace-2810064/,如需轉載,請註明出處,否則將追究法律責任。

相關文章