哈哈,真沒想到,不知不覺已寫到第7篇文章了,看來本人還是很有毅力的。其實堅持1件事很簡單,只要你每天不斷的朝著自己的目標動身,任何事情都不會擋著你。好了大道理不多說,誰都懂,那看看這個模板模式大家懂不懂了。
對模板模式可能聽起來很嚇人,其實大家都用過,只是不知道罷了,也很簡單。從字面意思上看就是我寫出1個模板,然后其他類直接繼承它就能夠具有模板類中的東西了,聽起來像繼承的定義,是的,就像現在開發1個論壇,為了能夠開發速度更快,我們通常就是網上找1個模板下載下來,然后在模板基礎上進行2次開發,道理1個樣。
模板模型定義:定義1個操作中的算法的股價,而將1些步驟延遲到子類中。模板方法使得子類可以不改變1個算法的結構便可重定義該算法的某些特定步驟。
<<大話設計模式>>對本章是以“小菜”http://www.vxbq.cn/cxyms/解答選擇題為故事展開的,意思是所有的選擇題都是1樣的,不1樣的就是答題者的答案而已,那末開發這個程序的變化點就是答案,不變的就是題目,那好我們將題目封裝到抽象類中,子類封裝答案便可,這就是模板模型。
空話不多說,照樣上代碼
1、模板抽象類,將子類共有的代碼封裝起來
publicabstractclass AbstratorClass {
publicabstractvoid method1();
publicabstractvoid method2();
//模板方法,其實就是將公共的東西放到抽象類里面去了,即子類繼承1個共同的模板,減少代碼重合,增強復用
publicvoid templateMethod(){
method1();
method2();
System.out.println("我是模板");
}
}
2、子類A和B
publicclass ClassA extends AbstratorClass {
@Override
publicvoid method1() {
// TODO Auto-generatedmethod stub
System.out.println("我是類A的方法1");
}
@Override
publicvoid method2() {
// TODO Auto-generatedmethod stub
System.out.println("我是類A的方法2");
}
}
publicclass ClassB extends AbstratorClass {
@Override
publicvoid method1() {
// TODO Auto-generatedmethod stub
System.out.println("我是類B的方法1");
}
@Override
publicvoid method2() {
// TODO Auto-generatedmethod stub
System.out.println("我是類B的方法2");
}
}
3、客戶端調用
publicclass TemplateClient {
/**
* @param args
*/
publicstaticvoid main(String[] args) {
// TODO Auto-generatedmethod stub
AbstratorClass class1 = new ClassA();
class1.templateMethod();
class1 = new ClassB();
class1.templateMethod();
}
}
其實關鍵代碼就1個地方,就是抽象類中封裝的模板方法,而子類中的方法就是自己的邏輯了,想怎樣寫都可以了與其他子類無關,唯1相同的就是模板中的邏輯了。
總結:模板方法模式是通過把不變行動搬移到超類,去除子類中的重復代碼來體現它的優勢。其實就是提供了1個很好的代碼復用平臺,由于有時候,我們會遇到由1系列步驟構成的進程需要履行。這個進程從高層次上看是相同的,但是步驟的實現可能不同。這時候候,模板方法模式該上場了………
附上代碼:http://download.csdn.net/detail/jzhf2012/8102387
下一篇 sql 兩張表關聯修改數據