定義:
定義乙個操作中的演算法的框架,而將一些步驟延遲到子類中。使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。
abstractclass 叫抽象模板,他的方法分為兩類:
基本方法:即基本操作,是由子類實現的方法,並且在模板方法被呼叫。
模板方法:可以有乙個或幾個,一般是乙個具體方法,即乙個框架,實現對基本方法的排程,完成固定的邏輯
注:為了防止被惡意操作,c++中可以使用兩種方式
類圖中的 concreteclass1 和 concreteclass2 屬於具體模板,實現父類所定義的乙個或多個抽象方法,也就是父類定義的基本方法在子類中得以實現。
注:抽象模板中的基本方法盡量設計為 protected 型別,符合迪公尺特法則,不需要暴露的屬性或方法盡量不要設定為 protected 型別。實現類若非必要,盡量不要擴大父類中的訪問許可權。
// ********** 2.抽象模板 ,**清單10-2:***************//
};class concreteclass1:public abstractclass
virtual void doangthing()
};class concreteclass2:public abstractclass
virtual void doangthing()
};int main ()
悍馬車有兩個型號,h1和h2。按需求,只需要給出悍馬車模型。此處有乙個抽象類,然後兩個不同型號的模型實現類,通過簡單繼承就可以實現業務需求。
hummermodel 抽象類,在類中定義了發動、停止、鳴笛、引擎、跑幾個方法。根據不同型號來進行不同的實現。
********** 1.抽象悍馬模型 ,**清單10-1:***************//
};class hummerh1model:public hummermodel
virtual void stop()
virtual void alarm()
virtual void enginboom()
};class hummerh2model:public hummermodel
virtual void stop()
virtual void alarm()
virtual void enginboom()
};int main()
一般設計習慣,抽象類負責宣告最抽象的事物屬性和方法,實現類完成具體的事物屬性和方法。但是模板方法點到了,抽象類定義了部分抽象方法,由子類實現,子類執行的結果影響了父類的結果,也就是子類對父類產生了影響,在複雜的專案中,會帶來**閱讀的難度。
增加需求 h1的喇叭是否響可控,h2的喇叭不響
在抽象類 hummermodel 中增加了乙個實現方法 isalarm,確定各個型號的車是否需要聲音,由各個實現類覆寫該方法,同時其他基本方法由於不需要對外提供訪問,因此也設計為 protected 型別
// ********** 3.抽象悍馬模型擴充套件 ,**清單10-3:***************//
class hummermodel
public:
void run()
this->stop();
}
};class hummerh1model:public hummermodel
protected:
virtual void start()
virtual void stop()
virtual void alarm()
virtual void enginboom()
virtual bool isalarm()
private:
bool m_alarmflag;
};class hummerh2model:public hummermodel
virtual void stop()
virtual void alarm()
virtual void enginboom()
virtual bool isalarm()
};int main()
提問:父類是否可以呼叫子類方法?
回答:能,但是不建議這麼做,合適的3個方式如下:
以上方法可以解決問題,但不建議用父類呼叫子類方法。
合適的方法:
父類建立框架,子類重寫了父類部分方法後,再呼叫從父類繼承的方法,產生不同的結果,即模板方式。
開元框架中的使用:
開元框架提供了乙個抽象類,然後有一堆子類,如果需要擴充套件功能,可以繼承這個抽象類,然後覆寫 protected 方法,然後呼叫乙個類似 execute方法,即可擴充套件。
參考文獻《秦小波. 設計模式之禪》(第2版) (華章原創精品) 機械工業出版社
C 設計模式(4) 模板方法模式
在程式開發中,經常會遇到這種情況 某個方法要實現的演算法需要多個步驟,但其中有一些步驟是固定不變的,而另一些步驟則是不固定的。為了提高 的可擴充套件性和可維護性,模板方法模式在這種場景下就派上了用場。定義乙個操作中演算法的框架,而將一些步驟延遲到子類中。模板方法模式使得子類可以不改變乙個演算法的結構...
設計模式(4) 模板方法模式
模板方法模式 定義 定義乙個操作中的演算法框架,而將一些步驟延遲到子類中。使得子類能夠不改變乙個演算法的結構就可以重定義該演算法的某些特定步驟。模板方法模式很easy,只使用了j a的繼承機制,但它是乙個應用很廣泛的模式。在軟體開發project中,假設同樣一段 複製過兩次,就須要對設計產生懷疑。架...
C 實現 設計模式 4 模板方法模式
參考書籍 公司接到乙個xx模型公司的的訂單 需要生產10萬悍馬的車模 只做基本的實現 不靠慮擴充套件性 那麼就開始埋頭幹 先按照最一般的經驗設計類圖 如圖所示 非常簡單的實現 悍馬車有兩個型號 h1和h2 按照需求 只需要悍馬模型 那就給你悍馬模型 先寫乙個抽象類 然後兩個不同型號的模型實現類 通過...