资源描述:
《使用GoF的TemplateMethod设计模式》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、使用GoF的TemplateMethod設計模式不要期待一部汽車能在街道上,也能在沙灘上跑。不要期待_支AP能在WinMobile上跑,也能在Android上跑。但是,如果能隨時抽換輪胎的話,汽車就有可能。但是,如果能隨時抽換應用子類的話,AP就有可能。簡介GoFTemplateMethod設計模式大家熟知的TemplateMethod模式,就是來自GoF的«DesignPatterns»一書,其介紹這個常用的模式,如下圖:冋目I口
2、占Fb
3、^
4、t
5、
6、〒p>卜计q[q
7、c
8、日
9、丄In
10、・・Tt
11、口Abstractcl
12、ass+TemplateMethodO:void+PrimitiveOperationl0:void+PrimitiveOperation2Q:voidTemplateMethodQ{PrimitiveOperation10;PrimitiveOperation20;……}ConcreteClass+PrimitiveOperation10:void+PrimitiveOperation40:void圖1GoF的TemplateMethod模式圖由於模式是專家們從過去經驗中坤鍊出來的,用來引導人們的思維,可促進人們「
13、依樣畫葫蘆」,進而「舉一反三」以便能更有效化解目前或未來所面臨的問題。例如,我們能「依樣畫葫蘆」並加以修正,發揮Java的介面定義機制,如下圖:目I口冋T▼司f丨亍丨十IQ
14、q
15、C
16、q丄I口
17、•”“It
18、lWi抽象類與Client的介面於是,可以依據此圖而編寫代碼如下:w撰寫代碼》Step-1.建立一個Java應用Project:Ex03-06°Ex03-06sd?src二田(defaultpackage)®0Bird.java由0IShape.java由;0JMain.java•••土0Shape.javaJ•St
19、ep-2.定義IShape介面。//IShape.javaimportjava.awt.Graphics;interfaceIShape{voidtemplate_paint(Graphicsgr);IStep-3.撰寫Shape類。//Shape.javaimportjava.awt.*;publicabstractclassShapeimplementsIShape{publicvoidtemplate_paint(Graphicsgr){//畫背景invariant_paint(gr);//畫前貞hook_pa
20、int(gr);}privatevoidinvariant_paint(Graphicsgr){//畫天空背景gr.setColor(Color.Z?/acA:);gr.fillRect(1030,200,100);//畫前景Iprotectedvoidhook_paint(Graphicsgr){}}Step-4.撰寫Bird類。//Bird.javaimportjava.awt.*;publicclassBirdextendsShape{@Overridepublicvoidhook_paint(Graphics
21、gr){//畫圖(海鷗)指令gr.sctColor(Color.Qwz);gr.drawArc(3O,8O,90,110,40,100);gr.drawArc(88,93,90,100,40,80);gr.setColor(Color.KAzre);gr.drawArc(30,55,90,150,35,75);gr.drawArc(90,80,90,90,40,80);)1Step-5.撰寫JMain類。//JMain.javaimportjava.awt.*;importjavax.swing.*;classJPe
22、xtendsJPanel{publicvoidpaintComponent(Graphicsgr){super.paintComponents(gr);IShapeisp=newBird();isp.template_paint(gr);1)publicclassJMainextendsJFrame{publicJMain(){setTitle("°);selSize(350,250);}publicstaticvoidmain(String[]args){JMainfrm=newJMain();JPpanel=ne
23、wJP();frm.add(panel);frm.setDefaultCloseOperation(JFrame.EX77LOALCLOSE);frm.setVisible(true);}}vv說明>>在本章裡,我們運用「變與不變分離」手藝來設計出Shape與Bird父、子類,再參考TemplateMethod模式,而得到更優越的設計,如3-5