簡單工廠模式 工廠模式 抽象工廠模式

2021-07-02 11:49:20 字數 2896 閱讀 2186

其實這個三個c++的設計模式已經學習很長時間了,今晚才想起來要寫這三個設計模式,為什麼要用c++中的設計模式呢?for example,你已經會開車了,正著開,倒著開,轉彎,這些都是開車基本的,但是你並沒有很高的車技,並不會炫酷。漂移,就好像c++中的設計模式一樣,在你學好c++的基礎上,嫻熟的應用出的新技能,能讓你的車開的更好。 為什麼要用簡單工廠模式,記得上一次,我雖然敲完了**,但是當別人突然問一句,你為什麼要用簡單工廠模式,我突然就愣住了,**很簡單,一看就懂了。重要的還是思想。專門定義乙個類來負責建立其他類的例項,這個專門建立物件的類,向外暴漏建立物件的介面,供外部呼叫。工廠模式有一種非常形象的描述,建立物件的類就如乙個工廠,而需要被建立的物件就是乙個產品;在工廠中加工產品,使用產品的人,不用在乎產品是如何生產出來的。從軟體開發的角度來說,這樣就有效的降低了模組之間的耦合。

這次我就用老婆和菜來說明簡單工廠模式,我有乙個老婆,她就是工廠factory,老婆factory會做的菜就是producta(西紅柿炒雞蛋),productb(炒餅絲),productc(香嘴魚),我就是老公。我今天對老婆說,我要吃productb(炒餅絲),然後老婆就說好,而我並不需要老婆是怎麼做,或者是不是我老婆做的(她也可以叫外賣),最後我只要看見productb(炒餅絲)就好了。

下面的這個uml我只是簡單的畫了一下,並沒有新增資料成員,但是你們在**中看出來了,我也會詳細的說的

第乙個簡單工廠模式就是這個樣子了,在客戶端只要建立你想想要吃的菜,那麼只要個老婆factory一說,就讓她去做吧,然後呢,你就可以坐等吃飯。上**:

/*

簡單工廠模式

*/#include using namespace std;

class product

}; class producta:public product

~factory()

};int main(int argc, char** argv)

上面的**注釋很清晰了,建立乙個基類指標指向乙個西紅柿炒雞蛋的物件,建立乙個基類指標指向乙個炒餅絲的物件,建立工廠的指標,然後呼叫一下就可以了。

演示結果:

其實這個簡單工廠模式肯定不好啊,如果你想你要吃更多的菜的話,那還不把自己的老婆累死,為了減輕老婆的壓力,我們可以在取老婆,這個時候抽象出來乙個大老婆factory,管其他的老婆factorya,factoryb。讓乙個老婆做乙個菜,factorya老婆就做producta西紅柿炒雞蛋,factoryb就做productb炒餅絲,這沒啥,任性,錢多。。。

說正經的,擴充套件工廠使其不同的工廠負責不同的功能。來點專業的說法,工廠方法模式的意義是定義乙個建立產品物件的工廠介面,將實際建立工作推遲到子類當中。核心工廠類不再負責產品的建立,這樣核心類成為乙個抽象工廠角色,僅負責具體工廠子類必須實現的介面,這樣進一步抽象化的好處是使得工廠方法模式可以使系統在不修改具體工廠角色的情況下引進新的產品。

**實現如下:

/*

這是之前的簡單工廠模式演化而來

工廠模式

*/#include using namespace std;

//做啥菜

class product

}; class producta:public product

};class factoryb:public factory

void dofun()

};int main(int argc, char** argv)

很清楚了,**有注釋,想吃啥,就弄啥,結果演示:

其實這個樣子還不好,還是前面說到的問題,隨著菜品類的增加,老婆的增加,這也就越來越複雜了,如果增加乙個菜,你就來乙個老婆,這就違背了開閉原則(在之前的部落格提到過),這不好啊。因此我們再次抽象菜的種類。比如說,我把陝西的菜歸為乙個類producta,把四川的菜歸為乙個productb,山東的菜歸為乙個productc,說到底,為了 所有東西,為了簡單都是抽象在抽象。也不多唧唧歪歪了,上圖:

**演示:

/*

這是之前的工廠模式演化而來

抽象工廠模式

*/#include using namespace std;

class product

}; class productsichuan:public product;

class producta:public productsichuan

};class factoryb:public factory

void dofun()

};class factoryc:public factory

void dofun()

};int main(int argc, char** argv)

結果演示:

這個時候突然想起來一點還沒有說呢,就是在uml圖中,factory中就有product的資料成員,這樣就實現了類與類之間的通訊。

本人菜菜鳥一枚,如果有啥錯誤,歡迎指出,感激不盡,

簡單工廠 工廠模式 抽象工廠模式

簡單工廠模式 public class operation set public double numberb set public virtual double getresult 加減乘除類 class operationadd operation class operationsub oper...

簡單工廠模式,工廠模式,抽象工廠模式

三種模式看了一天,記錄下自己的理解 headfirst,比薩店為例 1,簡單工廠模式 乙個具體的工廠類 pizzafactory 乙個抽象的產品類pizza,可以派生出多個具體的產品類 客戶 pizzastore類 工廠類 pizzafactory類關聯產品類pizza,工廠生產出不同型別的pizz...

簡單工廠模式 工廠模式 抽象工廠模式

簡單工廠模式 簡單工廠模式的最大優點在於工廠類中包含了必要的邏輯判斷,根據客戶端的選擇條件動態例項化相關類,對於客戶端來說,去除了與具體產品的依賴。但增加功能時,需增加 case 邏輯判斷分支條件,修改了原有的類,我們不但對擴充套件開發了,對修改也開放了,違背了開放 封閉原則。工廠方法模式,定義了乙...