欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

模版方法模式

系統 1867 0
模版方法(Template Method)模式 :屬于類的行為模式,它的用意是定義一個操作中的算法的骨架,將一些操作延遲到子類中。使得子類可以不改變一個算法的結構即可重新定義該算法的某些特定步驟。
模版方法模式的類圖如下:
模版方法模式有兩個角色:
1、 抽象模版(Abstract Template)角色 :定義了一個或多個抽象操作,同時定義了一個模版方法,它是一個具體的方法,作為抽象模版的骨架。實際的邏輯在抽象操作中,推遲到子類實現。
2、 實現模版(Concrete?Template)角色 :實現了抽象模版中一個或多個抽象方法。
?
這里舉個模擬計算器的例子來說模版方法模式,我們知道計算器計算的時候首先獲取操作數1,然后獲取操作數2,再進行加減乘除運算,最后顯示在屏幕上,對于計算器來說不管是計算加減乘除那一種,都是要獲取兩個操作數,計算后再顯示。可以建立以下類圖模型:
模版方法模式
?
?舉例代碼如下:
Java代碼?? 收藏代碼
  1. package ?templateMethod;??
  2. /** ?
  3. ?*? ?
  4. ?*作者:alaric ?
  5. ?*時間:2013-8-9下午8:15:18 ?
  6. ?*描述:抽象模版角色 ?
  7. ?*/ ??
  8. public ? abstract ? class ?AbstractClass?{??
  9. ??
  10. ???? /** ?
  11. ?????*? ?
  12. ?????*作者:alaric ?
  13. ?????*時間:2013-8-9下午8:17:00 ?
  14. ?????*描述:模版方法 ?
  15. ?????*/ ??
  16. ???? public ? final ? void ?templateMethod(){??
  17. ???????? int ?m?=?getNum1();??
  18. ???????? int ?n?=?getNum2();??
  19. ???????? int ?s?=?operate(m?,n);??
  20. ????????show(s);??
  21. ????}??
  22. ??
  23. ???? /** ?
  24. ?????*? ?
  25. ?????*作者:alaric ?
  26. ?????*時間:2013-8-9下午8:21:49 ?
  27. ?????*描述:獲取第一個操作數 ?
  28. ?????*/ ??
  29. ???? private ? int ?getNum1(){??
  30. ???????? return ? 8 ;??
  31. ????}??
  32. ???? /** ?
  33. ?????*? ?
  34. ?????*作者:alaric ?
  35. ?????*時間:2013-8-9下午8:21:49 ?
  36. ?????*描述:獲取第二個操作數 ?
  37. ?????*/ ??
  38. ???? private ? int ?getNum2(){??
  39. ???????? return ? 2 ;??
  40. ????}??
  41. ???? /** ?
  42. ?????*? ?
  43. ?????*作者:alaric ?
  44. ?????*時間:2013-8-9下午8:19:53 ?
  45. ?????*描述:算法 ?
  46. ?????*/ ??
  47. ???? public ? abstract ? int ?operate( int ?m, int ?n);??
  48. ???? /** ?
  49. ?????*? ?
  50. ?????*作者:alaric ?
  51. ?????*時間:2013-8-9下午8:20:59 ?
  52. ?????*描述:顯示 ?
  53. ?????*/ ??
  54. ???? public ? void ?show( int ?s){??
  55. ????????System.out.println( "結果是:" +?s);??
  56. ????}??
  57. ??????
  58. }??
?
Java代碼?? 收藏代碼
  1. package ?templateMethod;??
  2. /** ?
  3. ?*? ?
  4. ?*作者:alaric ?
  5. ?*時間:2013-8-9下午8:57:06 ?
  6. ?*描述:加法 ?
  7. ?*/ ??
  8. public ? class ?AddClass? extends ?AbstractClass{??
  9. ??
  10. ???? @Override ??
  11. ???? public ? int ?operate( int ?m, int ?n)?{??
  12. ???????? return ?m+n;??
  13. ????}??
  14. ??
  15. }??
?
Java代碼?? 收藏代碼
  1. package ?templateMethod;??
  2. /** ?
  3. ?*? ?
  4. ?*作者:alaric ?
  5. ?*時間:2013-8-9下午8:57:24 ?
  6. ?*描述:減法 ?
  7. ?*/ ??
  8. public ? class ?SubClass? extends ?AbstractClass{??
  9. ??
  10. ???? @Override ??
  11. ???? public ? int ?operate( int ?m, int ?n)?{??
  12. ???????? return ?m-n;??
  13. ????}??
  14. ??
  15. }??
?
Java代碼?? 收藏代碼
  1. package ?templateMethod;??
  2. /** ?
  3. ?*? ?
  4. ?*作者:alaric ?
  5. ?*時間:2013-8-9下午8:57:38 ?
  6. ?*描述:乘法 ?
  7. ?*/ ??
  8. public ? class ?MultiClass? extends ?AbstractClass{??
  9. ??
  10. ???? @Override ??
  11. ???? public ? int ?operate( int ?m, int ?n)?{??
  12. ???????? return ?m*n;??
  13. ????}??
  14. ??
  15. }??
?
Java代碼?? 收藏代碼
  1. package ?templateMethod;??
  2. /** ?
  3. ?*? ?
  4. ?*作者:alaric ?
  5. ?*時間:2013-8-9下午8:57:50 ?
  6. ?*描述:除法 ?
  7. ?*/ ??
  8. public ? class ?DivClass? extends ?AbstractClass{??
  9. ??
  10. ???? @Override ??
  11. ???? public ? int ?operate( int ?m, int ?n)?{??
  12. ???????? return ?m/n;??
  13. ????}??
  14. ??
  15. }??
?
Java代碼?? 收藏代碼
  1. package ?templateMethod;??
  2. /** ?
  3. ?*? ?
  4. ?*作者:alaric ?
  5. ?*時間:2013-8-9下午8:14:34 ?
  6. ?*描述:測試類 ?
  7. ?*/ ??
  8. public ? class ?Client?{??
  9. ??
  10. ???? /** ?
  11. ?????*作者:alaric ?
  12. ?????*時間:2013-8-9下午8:14:28 ?
  13. ?????*描述: ?
  14. ?????*/ ??
  15. ???? public ? static ? void ?main(String[]?args)?{??
  16. ???????? //加 ??
  17. ????????AbstractClass?c1?=? new ?AddClass();??
  18. ????????c1.templateMethod();??
  19. ???????? //減 ??
  20. ????????AbstractClass?c4?=? new ?SubClass();??
  21. ????????c4.templateMethod();??
  22. ???????? //乘 ??
  23. ????????AbstractClass?c2?=? new ?MultiClass();??
  24. ????????c2.templateMethod();??
  25. ???????? //除 ??
  26. ????????AbstractClass?c3?=? new ?DivClass();??
  27. ????????c3.templateMethod();??
  28. ??????????
  29. ??
  30. ????}??
  31. ??
  32. }??
?運行結果:
結果是:10
結果是:6
結果是:16
結果是:4
整個計算過程(取操作數,計算,顯示)使用了模版方法模式,模版方法規定程序實現步驟,并且在子類中無法改變,而子類必須實現abstract修飾的抽象方法,不同的實現類可以有不同的實現,這也是模版方法模式的用意。如果你了解策略模式,你會發現在每條算法的封裝上很像策略模式,而又不是策略模式,策略模式是利用委派的方法提供不同的算法行為,而模版方法是利用繼承來提供不同的算法行為的。

模版方法模式


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 99精品视频在线观看免费专区 | 欧美乱强性伦xxxxx | 国产在线小视频 | 成年网站视频在线观看 | 天天操夜夜操夜夜操 | 天天擦天天干 | 高清一区二区三区四区五区 | 久久青| 男女午夜| 在线观看亚洲一区二区 | 午夜视频网址 | 国产福利观看 | 夜婷婷 | 五月综合色| 人人干人人模 | 韩国成人毛片aaa黄 人人天天操 | 亚洲视频国产精品 | 欧美高潮 | a级欧美片免费观看 | 国产精品久久久久久久久免费 | 中文字幕 在线观看 | 美国一级特色大黄 | 一区二区三区四区在线观看视频 | 久草中文网 | 国产亚洲综合成人91精品 | 亚洲精品久久婷婷丁香51 | 一级欧美黄色片 | 在线观看视频亚洲 | 国产精品视频免费的 | 啪啪免费网站入口链接 | 毛片免费大全短视频 | 欧美性爽xxxⅹbbbb | 成人午夜大片 | 免费观看日本a毛片 | 成人二区三区 | 国产精品三级在线播放 | 99久久99 | 日韩欧美综合在线 | 国产一区二区三区福利 | 国产午夜精品视频 | 亚洲热在线观看 |