乙個工廠通常包含一些介面類,而工廠就是「生產」這些介面類的具體物件的。工廠本身通常是乙個單例模式的類。說的好像不明不白的。看例子吧。
先不建立工廠,這會兒先寫乙個介面類:
class ianimal
};
介面類很簡單,一會兒會用這個介面類生成具體的類。工廠中包含的就是這個介面類。
還是先不忙寫工廠,這時再寫幾個具體的類,繼承這個介面:
class cat : public ianimal
virtual void getlegs()
static cat* createself()
~cat()
};class dog : public ianimal
virtual void getlegs()
static dog* createself()
~dog()
};
cat類和dog類實現ianimal介面。
現在來寫工廠類。這是乙個單例(singleton類),意味著只有乙個工廠例項。
class animalfactory
ianimal* create(string animal)
return null;
}private:
std::mapfactory_map;
void registe(string animal, ianimal* ia)
animalfactory()
};
工廠類中,使用靜態方法instance()實現單例,工廠類的建構函式是私有的(只有這樣才能單例)。接下來使用create()方法取得介面類的指標,用來指向各式的子類物件,這樣工廠就能「創造出」各種動物了(多型的體現啊)。
好了,就這樣,已經完成了。在main中試試效果:
int main()
else
}return 0;
}
下面是完整的程式,如果想親手試試可以直接copy。本人使用mingw4.8編譯通過。
#include #include using namespace std;
class ianimal
};class cat : public ianimal
virtual void getlegs()
static cat* createself()
~cat()
};class dog : public ianimal
virtual void getlegs()
static dog* createself()
~dog()
};class jiji : public ianimal
virtual void getlegs()
static jiji* createself()
~jiji()
};class monkey : public ianimal
virtual void getlegs()
static monkey* createself()
~monkey()
};class animalfactory
ianimal* create(string animal)
return null;
}private:
std::mapfactory_map;
void registe(string animal, ianimal* ia)
animalfactory()
};int main()
else
}return 0;
}
抽象工廠模式(c 描述)
在抽象工廠模式中,我引用從網上看來的一篇例子來說明。隨著時間的推移,走過的地方越來越多,你天南海北的朋友也越來越多。你發現菜原來還分了許多菜系,魯菜 粵菜 湘菜等等,你招待 不同的朋友要用不同的菜系,這下難辦了,你的廚師都是魯菜風味,怎麼辦,廣東的朋友來了吃不慣。現在我們再回到簡單工廠模式,我們把 ...
設計模式C 描述 抽象工廠模式
閱讀此文應先閱讀簡單工廠模式與工廠方法模式抽象工廠模式是物件的建立模式,它是工廠方法模式的進一步推廣。假設乙個子系統需要一些產品物件,而這些產品又屬於乙個以上的產品等級結構。那麼為了將消費這些產品物件的責任和建立這些產品物件的責任分開,可以引進抽象工廠模式。這樣的話,消費產品的客戶不需要直接參與產品...
設計模式C 描述 抽象工廠模式
設計模式c 描述 抽象工廠模式 閱讀此文應先閱讀簡單工廠模式與工廠方法模式 抽象工廠模式是物件的建立模式,它是工廠方法模式的進一步推廣。假設乙個子系統需要一些產品物件,而這些產品又屬於乙個以上的產品等級結構。那麼為了將消費這些產品物件的責任和建立這些產品物件的責任分開,可以引進抽象工廠模式。這樣的話...