1. 程式人生 > >設計模式讀書筆記:Template Method(模板方法)

設計模式讀書筆記:Template Method(模板方法)

意圖:

定義一個操作中的演算法的骨架,而將一些步驟延遲到子類中。TemplateMethod 使得子類可以不改變一個演算法的結構即可重定義該演算法的某些特定步驟。

結構圖:來自 《23種設計模式 - 郗曉勇》


AbstractClass

#include <iostream>

namespace NS_TEMPLATEMETHOD {

class AbstractClass {
public:
	AbstractClass() {}
	virtual ~AbstractClass() {}
	void templateMethod(void)
	{
		begin();
		primitiveOperation();
		end();
	}

	void begin(void)	{ std::cout << "This is a popular calculator." << std::endl; }
	void end(void)		{ std::cout << "Bye-bye." << std::endl; }

protected:	// 只被模板方法呼叫
	virtual void primitiveOperation(void) {}
};

} /* namespace NS_TEMPLATEMETHOD */
ConcreteClass
#include "AbstractClass.h"

namespace NS_TEMPLATEMETHOD {

class ConcreteClass : public AbstractClass
{
public:
	ConcreteClass() {}
	virtual ~ConcreteClass() {}

	// 若不實現將使用父類方法
	virtual void primitiveOperation(void)
	{
		int a, b;
		std::cin >> a;std::cin >> b;
		std::cout << "a+b = " << a+b << std::endl;
	}
};

} /* namespace NS_TEMPLATEMETHOD */
main
#include "TemplateMethod/ConcreteClass.h"
using namespace NS_TEMPLATEMETHOD;
int main(void)
{
	ConcreteClass cc;
	cc.templateMethod();
}
附加:

相關推薦

設計模式讀書筆記Template Method模板方法

意圖: 定義一個操作中的演算法的骨架,而將一些步驟延遲到子類中。TemplateMethod 使得子類可以不改變一個演算法的結構即可重定義該演算法的某些特定步驟。 結構圖:來自 《23種設計模式 - 郗曉勇》 AbstractClass #include <ios

設計模式3.Template Method模板方法

設計模式目的: 模板方法,在父類中定義好演算法步驟順序,將演算法中的某一具體部分延遲到子類中實現,使得可以在不改變演算法的前提下,將體重特定的部分改變實現。 XML類圖: 模式核心概述: 從模式描述中就能知道,模板方法模式的類圖很簡單,僅涉及到父類

設計模式Template Method模板方法

動機(Motivation) 在軟體構建過程中,對於某一項任務,它常常有穩定的整體操作結構,但各個子步驟卻有很多改變的需求,或者由於固有的原因(比如框架與應用之間的關係)而無法和任務的整體結構同時實現。 如何在確定穩定操作結構的前提下,來靈活應對各個子步驟的變

操作型模式Template Method模板方法模式

1.如果你期望在一個方法中實現一個演算法,把演算法中的某些步驟的定義推遲到子類中去重新定義,可使用Template Method(模板方法)模式 2.舉例 //演算法框架抽象類 public abstract class AbstractMethod {

設計模式19Template Method Pattern (模板方法模式)

Define:Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method lets subclasses redefine c

交給子類: Template Method模板方法模式【PHP】

pri align 子類 特定 itl area 圖結構 -a abs Template Method(模板方法模式) ---- 將具體處理交給子類 Template Method 就是定義一個操作中的算法骨架,而將一些步驟延遲到子類中,使得子類可以不改變一個算法

圖解設計模式讀書筆記——Strategy策略模式

顧名思義,策略模式一般應用在使用多種策略(演算法)的情況下,比如一些棋牌遊戲中,電腦會有多種策略去應付使用者,如入門級別,高手級別等。 策略模式將操作抽象成介面,具體的演算法由子類實現,有一個上下文環境Context來使用策略進行操作,context只需持有Strategy

圖解設計模式讀書筆記——Decorator裝飾模式

應用場景: 最主要的應用場景就是當要增加一些基本功能的排列組合而產生的非常大量的功能時。 舉幾個例子: 1.文中的裝飾顯示的例子,有多種裝飾方式,比如在字串兩邊加 “|”,或者上下加一行“+------+”這種符號,文中只提到對單行的String的裝飾,還可能會有其他型

圖解設計模式讀書筆記十五——Memento備忘錄模式

使用場景: 需要儲存狀態,以便將來執行redo/undo操作來恢復狀態。多用在棋牌類遊戲,書寫編輯類應用上。 基本思想: 在保證封裝性的基礎上,將類的屬性狀態在外部儲存起來。 保證封裝性的方式起始就是控制好memento類的可見性,即對於敏感資料,不使用public修

圖解設計模式讀書筆記十一——Chain of Responsibility責任鏈模式

看到這個模式,最先想到的就是okhttp跟Android的事件處理機制了。 使用場景: 當功能出現分層,層級之間相對獨立這種情況,可考慮使用責任鏈模式。 類關係圖: Handler是一個抽象類,它擁有屬性next,型別是自身型別,並有處理請求但request方法。

圖解設計模式讀書筆記十七——Flyweight輕量/享元模式

使用場景: 物件可以複用/共享的情況,只new一次,然後將物件例項儲存起來,下次需要使用的時候,先檢視該物件是否已經存在,過存在則直接返回,不存在再new。 類關係圖 一般有一個Flyweig

設計模式讀書筆記 Bridge橋樑模式

一、模式介紹 GOF 在《設計模式》中給橋樑模式的定義為:將抽象部分與它的實現部分分離,使它 們都可以獨立地變化。這裡的抽象部分和實現部分不是我們通常認為的父類與子類、介面與 實現類的關係,而是組合關係。也就是說,實現部分是被抽象部分呼叫,以用來完成(實現)

大話設計模式讀書筆記設計模式基本原則

前面兩部分分別講述了簡單工廠模式和策略模式,後面還舉了例子進行簡單實現,這裡,讓我們瞭解下軟體設計的初衷,整合書上分為3章書寫的內容,這裡我們統一介紹我們寫程式碼應該注意的基本原則:分別是a、單一職責原則:就一個類而言,應該僅有一個引起它變化的原因。如果一個類承擔的職責過多,

基本設計模式學習筆記常見的七種面向物件設計原則

0.概述      面向物件設計原則為支援可維護性複用而誕生,這些原則蘊含在很多設計模式中,他們是從許多設計方案中總結出來的指導性原則1.單一原則     一個類只負責一個功能領域中的相應職責,或者說:就一個類而言,應該只有一個引起它變化的原因。個人總結:將不同職責的方法放在

設計模式設計模式-- 大話設計模式讀書筆記

設計模式是面向物件的最佳實踐(程式碼無錯未必優) (適度封裝,合理繼承,結構多型)=》降耦合; 整體已維護,易複用,可擴充套件=》靈活度; 面向物件的好處:可維護,可擴充套件,可複用,靈活性好; 面向物件的標誌:依賴倒轉=》抽象不應該依賴細節,細節應該依賴於抽象=》程式中所有的依賴關係都終止於抽象類或者介面(

重構改善既有代碼設計--重構手法02Inline Method 內聯函數& 03 Inline Temp(內聯臨時變量)

臨時變量 替代 xtra 移動 get replace 16px ber ble Inline Method (內聯函數) 一個函數調用的本體與名稱同樣清楚易懂。在函數調用點插入函數體,然後移除該函數。 int GetRating()

重構改善既有代碼設計--重構手法01Extract Method 提煉函數

設置 都是 覆寫 list() 為什麽 新建 細粒度 align 容易 背景: 你有一段代碼可以被組織在一起並獨立出來。將這段代碼放進一個獨立函數,並讓函數名稱解釋該函數的用途。 void PrintOwing(double amount)

設計模式學習筆記 C#代碼

內容 編程 繼承 color 模式 c# 派生類 ive spa 《深入淺出設計模式》學習筆記第一章 原始需求和設計 事情是這樣開始的,公司需要做一套程序,鴨子,設計如下: 一個鴨子父類,多個派生類,三個可override的方法。 第一次需求變更 我們要會飛的鴨子!!!!

【大話設計模式讀書筆記——開閉原則】

等等 使用方式 價值 log 變更 重用 中間 多種實現 過程 開閉原則 在面向對象編程領域中,開閉原則規定“軟件中的對象(類,模塊,函數等等)應該對於擴展是開放的,但是對於修改是封閉的”[1],這意味著一個實體是允許在不改變它的源代碼的前提下變更它的行為。該特性在產品化

【大話設計模式讀書筆記——代理模式

oid write 實現 == str href proxy logs i++ 代理模式 代理者是指一個類別可以作為其它東西的接口。代理者可以作任何東西的接口:網絡連接、內存中的大對象、文件或其它昂貴或無法復制的資源。 維基百科-代理模式 代理模式實現遠程圖片加載 /