程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++設計模式實現--模板(Template)模式

C++設計模式實現--模板(Template)模式

編輯:C++入門知識

一. 問題

在面向對象系統的分析與設計過程中經常會遇到這樣一種情況:對於某一個業務邏輯(算法實現)在不同的對象中有不同的細節實現,但是邏輯(算法)的框架(或通用的應用算法)是相同的。Template提供了這種情況的一個實現框架。

二. 模式

Template 模式是采用繼承的方式實現這一點:將邏輯(算法)框架放在抽象基類中,並定義好細節的接口,子類中實現細節

\

三. 代碼

[cpp] view plaincopy
  1. //抽象基類,實現了一個模板方法
  2. class AbstractClass
  3. {
  4. public:
  5. virtual ~AbstractClass()
  6. {
  7. }
  8.  
  9. //模板方法,只在抽象基類中實現
  10. void TemplateMethod()
  11. {
  12. this->PrimitiveOperation1();
  13. this->PrimitiveOperation2();
  14. }
  15.  
  16. protected:
  17. virtual void PrimitiveOperation1() = 0;
  18.  
  19. virtual void PrimitiveOperation2() = 0;
  20.  
  21. AbstractClass()
  22. {
  23. }
  24. };
  25.  
  26. //具體子類,實現操作的特定細節
  27. class ConcreteClass1:public AbstractClass
  28. {
  29. public:
  30. ConcreteClass1()
  31. {
  32. }
  33.  
  34. ~ConcreteClass1()
  35. {
  36. }
  37.  
  38. protected:
  39. void PrimitiveOperation1()
  40. {
  41. cout<<"ConcreteClass1...PrimitiveOperation1"< }
  42.  
  43. void PrimitiveOperation2()
  44. {
  45. cout<<"ConcreteClass1...PrimitiveOperation2"< }
  46. };
  47.  
  48. //具體子類,實現操作的特定細節
  49. class ConcreteClass2:public AbstractClass
  50. {
  51. public:
  52. ConcreteClass2()
  53. {
  54. }
  55.  
  56. ~ConcreteClass2()
  57. {
  58. }
  59.  
  60. protected:
  61. void PrimitiveOperation1()
  62. {
  63. cout<<"ConcreteClass2...PrimitiveOperation1"< }
  64.  
  65. void PrimitiveOperation2()
  66. {
  67. cout<<"ConcreteClass2...PrimitiveOperation2"< }
  68. };
  69.  
  70.  
  71. int main()
  72. {
  73. AbstractClass* p1 = new ConcreteClass1();
  74. AbstractClass* p2 = new ConcreteClass2();
  75.  
  76. p1->TemplateMethod();
  77. p2->TemplateMethod();
  78.  
  79. return 0;
  80. } 其關鍵點就是將通用算法封裝在抽象基類中,並將不同的算法細節放到子類中實現。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved