黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

模版方法模式

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

模版方法模式


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論