TemplatePattern.cpp 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #include <iostream>
  2. using namespace std;
  3. class AbstractClass {
  4. public:
  5. virtual void TemplateMethod() {
  6. PrimitiveOperation1();
  7. PrimitiveOperation2();
  8. }
  9. virtual ~AbstractClass() { }
  10. protected:
  11. virtual void PrimitiveOperation1() = 0;
  12. virtual void PrimitiveOperation2() = 0;
  13. AbstractClass() { }
  14. };
  15. class ConcreteClass1 :public AbstractClass {
  16. public:
  17. void PrimitiveOperation1() {
  18. cout << "ConcreteClass1::PrimitiveOperation1" << endl;
  19. }
  20. void PrimitiveOperation2() {
  21. cout << "ConcreteClass1::PrimitiveOperation2" << endl;
  22. }
  23. };
  24. class ConcreteClass2 :public AbstractClass {
  25. public:
  26. void PrimitiveOperation1() {
  27. cout << "ConcreteClass2::PrimitiveOperation1" << endl;
  28. }
  29. void PrimitiveOperation2() {
  30. cout << "ConcreteClass2::PrimitiveOperation2" << endl;
  31. }
  32. };
  33. int main() {
  34. AbstractClass *p1 = new ConcreteClass1();
  35. AbstractClass *p2 = new ConcreteClass2();
  36. p1->TemplateMethod();
  37. p2->TemplateMethod();
  38. delete p1;
  39. delete p2;
  40. return 0;
  41. }