欧美三区_成人在线免费观看视频_欧美极品少妇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條評論
主站蜘蛛池模板: 春色www在线视频观看 | 国产精品你懂的在线播放 | 青娱乐欧美视频 | 日本美女一区二区三区 | 深夜电影网 | 人人精品 | 欧美黄色网 | 日日干夜夜操 | 欧美一区二区三区播放 | 国产精品久久久99 | 高清人人天天夜夜曰狠狠狠狠 | 欧美日韩亚洲国内综合网俺 | 久久精品视频在线看99 | 亚洲国产精品一区二区久久 | 国产精品毛片久久久久久 | 精品国内在线视频2019百度 | 欧美综合国产 | 一级毛片在线完整免费观看 | 成人资源在线观看 | 国产福利视频在线 | 欧美日韩精品乱国产 | 亚洲视频 欧美视频 | 成人精品鲁一区一区二区 | 91青青操 | 欧美精品成人一区二区三区四区 | 日韩性色 | 成人高清在线 | 亚洲视频免费在线 | 好爽~好硬~好紧~蜜芽 | 亚洲视频在线视频 | 91精品国产综合久久福利软件 | 天堂在线亚洲 | 一个色综合亚洲色综合 | 香港三级大全 | 国产欧美亚洲精品a | 亚洲日本中文字幕区 | 亚洲国产日韩欧美在线 | 欧美综合激情网 | 久久久久久国产精品 | 欧美日本免费 | 91久久国产视频 |