外觀模式
提供管理某一類具有對象的一層封裝
比如要完成某一工作,需要同時協(xié)同某幾個對象溪猿。為了防止頻繁的調(diào)用一大堆代碼钩杰。所以再寫一個類纫塌,然后封裝他們。
其實感覺就像一個函數(shù)而已讲弄。
例如編譯器措左,他會預處理、編譯避除、匯編怎披、鏈接。但我們有時候要直接得到最終結(jié)果瓶摆,并不關(guān)心過程凉逛。
同時我們有時又可以逐項執(zhí)行。
也好比我們有時候?qū)懞枚嗟男『瘮?shù)群井,然后最后寫一個大函數(shù)去執(zhí)行這些小函數(shù)状飞。使這些小函數(shù)可以復用。
//job共同的基類
class job
{
public:
virtual void do()=0;
};
//同時還有job1书斜、2诬辈、3、4等等荐吉。
class job1:public job
{
public:
virtual void do();
};
class DoJob
{
public:
DoJob();
void addJob(job* j);
void doJob();
void removeJob(int i);
private:
vector<job*> _list;
};
為什么使用一個抽象基類自晰?其實好像也不用是吧?
不是的稍坯,根據(jù)依賴倒置,需要這樣做搓劫。
其中如果僅僅需要默認的功能那么其DoJob
默認構(gòu)造函數(shù)里可以提供瞧哟。
如果需要執(zhí)行不同的功能,那么我們不要構(gòu)造函數(shù)枪向,然后自己添加也可以勤揩。
如果說僅僅是為了執(zhí)行一堆對象的某一系列操作,而這些操作本身就沒有什么統(tǒng)統(tǒng)的特征秘蛔,也就是說沒有共同的一個基類陨亡,那么就沒有必要使用抽象層。
模板模式
模板方法模式在一個方法中定義一個算法的骨架深员,而將一些步驟延遲到子類中负蠕,模板方法使得子類可以在不改變算法結(jié)構(gòu)的情況下,重新定義算法中的某些步驟
嗯倦畅,就是說遮糖,實現(xiàn)一個功能,需要多個步驟叠赐,而每個步驟用的工具又可能是不同的欲账。所以那屡江,基類先定義一個完成功能步驟的算法框架。然后子類根據(jù)選用工具的不同去實現(xiàn)這一些功能赛不。
比如說惩嘉,編譯器:預處理->編譯->匯編->連接。假設(shè)踢故,我使用不同的編譯器文黎,那他的處理步驟是相同的啊。所以不同的編譯器畴椰,繼承編譯器這個基類臊诊,然后去實現(xiàn)自己的功能。但是總的算法的框架是不變的斜脂。
UML
代碼
class compiler
{
public:
virtual void doit()
{
pretreatment();
compile();
assembly();
link();
}
private:
virtual void pretreatment()=0;
virtual void compile()=0;
virtual void assembly()=0;
virtual void link()=0;
};
//具體的子類
class Gun:public compiler
{
//具體實現(xiàn)
};
模板模式和外觀模式很相似抓艳,都是封裝函數(shù),不同的是外觀模式封裝的是不同對象的函數(shù)帚戳。