亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

模版方法模式

系統(tǒng) 1774 0
模版方法(Template Method)模式 :屬于類的行為模式,它的用意是定義一個操作中的算法的骨架,將一些操作延遲到子類中。使得子類可以不改變一個算法的結(jié)構(gòu)即可重新定義該算法的某些特定步驟。
模版方法模式的類圖如下:
模版方法模式有兩個角色:
1、 抽象模版(Abstract Template)角色 :定義了一個或多個抽象操作,同時定義了一個模版方法,它是一個具體的方法,作為抽象模版的骨架。實(shí)際的邏輯在抽象操作中,推遲到子類實(shí)現(xiàn)。
2、 實(shí)現(xiàn)模版(Concrete?Template)角色 :實(shí)現(xiàn)了抽象模版中一個或多個抽象方法。
?
這里舉個模擬計(jì)算器的例子來說模版方法模式,我們知道計(jì)算器計(jì)算的時候首先獲取操作數(shù)1,然后獲取操作數(shù)2,再進(jìn)行加減乘除運(yùn)算,最后顯示在屏幕上,對于計(jì)算器來說不管是計(jì)算加減乘除那一種,都是要獲取兩個操作數(shù),計(jì)算后再顯示。可以建立以下類圖模型:
模版方法模式
?
?舉例代碼如下:
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. ?????*描述:獲取第一個操作數(shù) ?
  28. ?????*/ ??
  29. ???? private ? int ?getNum1(){??
  30. ???????? return ? 8 ;??
  31. ????}??
  32. ???? /** ?
  33. ?????*? ?
  34. ?????*作者:alaric ?
  35. ?????*時間:2013-8-9下午8:21:49 ?
  36. ?????*描述:獲取第二個操作數(shù) ?
  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( "結(jié)果是:" +?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. }??
?運(yùn)行結(jié)果:
結(jié)果是:10
結(jié)果是:6
結(jié)果是:16
結(jié)果是:4
整個計(jì)算過程(取操作數(shù),計(jì)算,顯示)使用了模版方法模式,模版方法規(guī)定程序?qū)崿F(xiàn)步驟,并且在子類中無法改變,而子類必須實(shí)現(xiàn)abstract修飾的抽象方法,不同的實(shí)現(xiàn)類可以有不同的實(shí)現(xiàn),這也是模版方法模式的用意。如果你了解策略模式,你會發(fā)現(xiàn)在每條算法的封裝上很像策略模式,而又不是策略模式,策略模式是利用委派的方法提供不同的算法行為,而模版方法是利用繼承來提供不同的算法行為的。

模版方法模式


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产一区二区精品久久91 | 国产精品免费久久久久影院 | 国产亚洲图片 | 久久99国产乱子伦精品免 | 91亚洲最新精品 | 国产精品国产三级国产an | 国产小福利| 日本不卡视频在线 | 天天干天天操天天爽 | 亚洲在线观看一区 | 亚洲视频一区二区在线观看 | 国产国拍亚洲精品福利 | 亚洲第一在线 | 日韩久久免费视频 | 欧美日韩在线成人免费视频大全 | 97国产精品视频观看一 | 色欧美在线视频 | 欧美嫩草 | 免费伊人 | 欧洲成人全免费视频网站 | 日本精品1在线区 | 亚洲国产精品乱码在线观看97 | 老子影院午夜理伦手机不卡 | 欧美一级在线看 | 香蕉视频黄色片 | 老司机精品视频个人在观看 | 99在线视频免费观看 | 亚洲欧美在线中文字幕不卡 | 全部精品孕妇色视频在线 | 国产伦精品一区二区三区免费迷 | 日本在线观看永久免费网站 | 亚洲欧美精品国产一区色综合 | www.天天干| 久久久午夜精品 | 日韩大片在线 | 99爱在线观看精品视频 | 欧美 激情 在线 | 日本黄大片影院一区二区 | 中文字幕在线影院 | fxxxx性欧美高清 | 国产高清精品自在久久 |