模板方法模式【Template Method Pattern】
阿新 • • 發佈:2019-01-03
週三,9:00,我剛剛坐到位置,開啟電腦準備開始幹活。
“小三,小三,叫一下其它同事,到會議室,開會”老大跑過來吼,帶著淫笑。還不等大家坐穩,老
大就開講了,
“告訴大家一個好訊息,昨天終於把牛叉模型公司的口子打開了,要我們做悍馬模型,雖然是第一個
車輛模型,但是我們有能力,有信心做好,我們一定要…(中間省略20 分鐘的講話,如果你聽過領導人的
講話,這個你應該能夠續上)”
動員工作做完了,那就開始壓任務了,“這次時間是非常緊張的,只有一個星期的時間,小三,你負責
在一個星期的時間把這批10 萬車模(注:車模是車輛模型的意思,不是香車美女那個車模)建設完成…”
“一個星期?這個…,是真做不完,要做分析,做模板,做測試,還要考慮擴充套件性、穩定性、健壯性
等,時間實在是太少了”還沒等老大說完,我就急了,再不急我的小命就折在上面了!
“那這樣,你只做實現,不考慮使用設計模式,擴充套件性等都不用考慮”老大又把我壓回去了。
“不考慮設計模式?那…”
哎,領導已經佈置任務了,那就開始死命的做吧,命苦不能怨政府,點背不能怪社會呀,然後就開始
準備動手做,在做之前先介紹一下我們公司的背景,我們公司是做模型生產的,做過橋樑模型、建築模型、
機械模型,甚至是一些政府、軍事的機密模型,這個不能說,就是把真實的實物按照一定的比例縮小或放
大,用於試驗、分析、量化或者是銷售等等,上面提到的牛叉模型公司專門銷售車輛模型的公司,自己不
生產,我們公司是第一次從牛叉模型公司接單,那我怎麼著也要把活幹好,可時間很緊張呀,怎麼辦?
既然領導都說了,不考慮擴充套件性,那好辦,我先設計個類圖:
public abstract class HummerModel { /* * 首先,這個模型要能夠被髮動起來,別管是手搖發動,還是電力發動,反正 * 是要能夠發動起來,那這個實現要在實現類裡了 */ public String name; public HummerModel(String name) { this.name=name; } /* * 首先,這個模型要能夠被髮動起來,別管是手搖發動,還是電力發動,反正 * 是要能夠發動起來,那這個實現要在實現類裡了 */ protected abstract void start(); //能發動,那還要能停下來,那才是真本事 protected abstract void stop(); //喇叭會出聲音,是滴滴叫,還是嗶嗶叫 protected abstract void alarm(); //引擎會轟隆隆的響,不響那是假的 protected abstract void engineBoom(); //那模型應該會跑吧,別管是人推的,還是電力驅動,總之要會跑 final public void run() { //先發動汽車 this.start(); //引擎開始轟鳴 this.engineBoom(); //喇嘛想讓它響就響,不想讓它響就不響 if(this.isAlarm()){ this.alarm(); } //到達目的地就停車 this.stop(); } //鉤子方法,預設喇叭是會響的 protected boolean isAlarm(){ return true; } }
public class Smark extends HummerModel { private String name; public static boolean falg=true; public Smark(String name) { super(name); this.name=name; } @Override protected void start() { System.out.println(name+"開啟了"); } @Override protected void stop() { System.out.println(name+"停止了"); } @Override protected void alarm() { System.out.println(name+"喇叭擋擋的"); } @Override protected void engineBoom() { System.out.println(name+"傳送機嘀嘀的"); } @Override protected boolean isAlarm() { // TODO Auto-generated method stub return falg; } private void setAlarm(boolean b) { // TODO Auto-generated method stub falg=b; } public static void main(String[] args) { Smark smark=new Smark("大奔"); smark.setAlarm(false); smark.run(); } }