C++设计模式-模板方法模式
生活随笔
收集整理的這篇文章主要介紹了
C++设计模式-模板方法模式
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
目錄
?
?
基本概念
例子和實(shí)例
?
基本概念
模板方法模式:定義一個(gè)操作中的算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個(gè)算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟。
結(jié)構(gòu)圖如下(此圖來自大話設(shè)計(jì)模式):
模板方法模式是通過把不變行為搬移到超類中,去除子類中的重復(fù)代碼來提現(xiàn)他的優(yōu)勢。
模板方法模式提供了一個(gè)很好的代碼復(fù)用。
當(dāng)不變和可變的行為在方法的子類實(shí)現(xiàn)中混合在一起的時(shí)候,不變的行為就會(huì)在子類中重復(fù)出現(xiàn)。通過模板方法模式把這些行為搬移到單一的地方,這樣就幫助子類擺脫重復(fù)不變行為的糾纏。
?
例子和實(shí)例
程序運(yùn)行截圖如下:
源碼如下:
Head.h
#ifndef HEAD_H #define HEAD_Hclass Fundamental{public:virtual void primitiveOperation1();virtual void primitiveOperation2();void templateMethod();virtual ~Fundamental(); };class ConcreteClassA: public Fundamental{public:void primitiveOperation1();void primitiveOperation2();virtual ~ConcreteClassA(); };class ConcreteClassB: public Fundamental{public:void primitiveOperation1();void primitiveOperation2();virtual ~ConcreteClassB(); };#endif //HEAD_HHead.cpp
#include "Head.h" #include <iostream> #include <string> using namespace std;void Fundamental::primitiveOperation1() {cout << "Fundamental::primitiveOperation1()" << endl; }void Fundamental::primitiveOperation2() {cout << "Fundamental::primitiveOperation1()" << endl; }void Fundamental::templateMethod() {this->primitiveOperation1();this->primitiveOperation2(); }Fundamental::~Fundamental() {cout << "Fundamental::~Fundamental()" << endl; }void ConcreteClassA::primitiveOperation1() {cout << "ConcreteClassA::primitiveOperation1()" << endl; }void ConcreteClassA::primitiveOperation2() {cout << "ConcreteClassA::primitiveOperation1()" << endl; }ConcreteClassA::~ConcreteClassA() {cout << "ConcreteClassA::~ConcreteClassA()" << endl; }void ConcreteClassB::primitiveOperation1() {cout << "ConcreteClassB::primitiveOperation1()" << endl; }void ConcreteClassB::primitiveOperation2() {cout << "ConcreteClassB::primitiveOperation2()" << endl; }ConcreteClassB::~ConcreteClassB() {cout << "ConcreteClassB::~ConcreteClassB()" << endl; }main.cpp
#include "Head.h" #include <iostream> #include <string> using namespace std;int main(int *argc, int *argv[]){Fundamental *fundamental = new ConcreteClassA;fundamental->templateMethod();delete fundamental;cout << "-------------- 華麗的分割線 --------------" << endl;Fundamental *concrete = new ConcreteClassB;concrete->templateMethod();delete concrete;getchar();return 0; }?
總結(jié)
以上是生活随笔為你收集整理的C++设计模式-模板方法模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java方法的反射(对反射的进一步认识)
- 下一篇: C++设计模式-工厂模式