抽象工廠模式
-
為什么要用抽象工廠模式?
* -
舉個實際應用的例子,一個顯示幕電路板廠商,旗下的顯示幕電路板種類有非液晶的和液晶的;這個時候,廠商建造兩個工廠,工廠A負責生產非液晶顯示幕電路板,工廠B負責生產液晶顯示幕電路板;工廠一直就這樣運行著,有一天,總經理發現,直接生產顯示幕的其余部分也挺掙錢,所以,總經理決定,再建立兩個工廠C和D;C負責生產非液晶顯示幕的其余部件,D負責生產液晶顯示幕的其余部件,此時,旁邊參謀的人就說了,經理,這樣做不好,我們可以直接在工廠A中添加一條負責生產非液晶顯示幕的其余部件的生產線,在工廠B中添加一條生產液晶顯示幕的其余部件的生產線,這樣就可以不用增加廠房,只用將現有廠房進行擴大一下,同時也方便工廠的管理,而且生產非液晶顯示幕電路板的技術人員對非液晶顯示的其余部件的生產具有指導的作用,生產液晶顯示幕電路板也是同理,總經理發現這是一個不錯的主意,
-
再回到軟體開發的程序中來,總經理再次建立工廠C和D,就是重復工廠方法模式,只是生產的產品不同罷了,這樣做的弊端就如參謀所說的那樣,增加了管理成本和人力成本,在面向物件開發的程序中,是很注重物件管理和維護的,物件越多,就越難進行管理和維護;如果工廠數量過多,那么管理和維護的成本將大大增加;雖然生產的是不同的產品,但是可以二者之間是有微妙的關系的,如參謀所說,技術人員的一些技術經驗是可以借鑒的,這就相當于同一個類中的不同物件,之間是可以公用某些資源的,那么,增加一條流水線,擴大廠房,當然是最好的主意了,
-
UML圖

- 可以簡單的把
Factory看做是工廠A,Factory1Factory2看做兩條生產線,這樣就集中了生產線的管理
//程式實體(抽象工廠模式)
//單核
class SingleCore
{
public:
virtual void Show() = 0;
};
class SingleCoreA: public SingleCore
{
public:
void Show() { cout << "Single Core A" << endl; }
};
class SingleCoreB:public SingleCore
{
public:
void Show() { cout << "Single Core B" << endl; }
};
//多核
class MultiCore
{
public:
virtual void Show() = 0;
};
class MultiCoreA: public MultiCore
{
public:
void Show() { cout << "Multi Core A" << endl; }
};
class MultiCoreB: public MultiCore
{
public:
void Show() { cout << "Multi Core B" << endl; }
};
//工廠
class CoreFactory
{
public:
virtual SingleCore* CreateSingleCore() = 0;
virtual MultiCore* CreateMultiCore() = 0;
};
//工廠A,專門用來生產A型號的處理器
class FactoryA:public CoreFactory
{
public:
SingleCore* CreateSingleCore() { return new SingleCoreA(); }
MultiCore* CreateMultiCore() { return new MultiCoreA(); }
};
//工廠B,專門用來生產B型號的處理器
class FactoryB: public CoreFactory
{
public:
SingleCore* CreateSingleCore() { return new SingleCoreB(); }
MultiCore* CreateMultiCore() { return new MultiCoreB(); }
};
本文來自博客園,作者:打工搬磚日記,轉載請注明原文鏈接:https://www.cnblogs.com/FlyingDoG--BoxPiG/p/17024140.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/541231.html
標籤:其他
上一篇:Auto-Job任務調度框架
下一篇:設計模式簡單介紹
