Factory-Methode: Definieren Sie eine Schnittstelle zum Erstellen von Objekten und lassen Sie Unterklassen welche Klasse instanziieren. Die Factory-Methode verzögert die Instanziierung einer Klasse für ihre Unterklassen.
Der Unterschied zu einer einfachen Fabrik: Eine einfache Fabrik muss die ursprüngliche Klasse ändern, was gegen das Öffnungs- und Schließprinzip verstößt. Die Factory-Methode vermeidet dieses Klassenproblem. Es behält die Vorteile der Kapselung des Objekterstellungsprozesses bei und muss nur eine Fabrikklasse hinzufügen, wodurch das Problem der einfachen Beurteilung von Fabrikzweigen gelöst wird.
Factory-Methodenmuster enthält vier Rollen:
Produkt: abstraktes Produkt
ConcreteProduct: konkretes Produkt
Factory: abstrakte Fabrik
ConcreteFactory : Spezifische Fabrik
UML-Klassendiagramm
Erfahren Sie hier Lei Feng, Verwendet beispielsweise das Fabrikmethodenmodell und betrachtet die Methode von Lei Feng als ein abstraktes Produkt, das einer abstrakten Fabrik entspricht. Diejenigen, die von Lei Feng lernen, betrachten sie als ein konkretes Produkt, das einer konkreten Fabrik entspricht. Wenn Sie Kategorien von Personen hinzufügen möchten, die von Lei Feng lernen, müssen Sie nur die entsprechenden Kategorien hinzufügen, ohne die ursprünglichen Kategorien zu ändern.
Testfälle:
[code]int main(){ //工厂方法 IFactory *factory = new UnderGraduateFactory; //new一个大学生工厂 //创建学雷锋的学生 LeiFeng *student = factory->createLeiFeng(); //学生干了哪些雷锋方法 student->BuyRice(); //买米 student->Sweep(); //扫地 student->Wash(); //清洗 return 0; }
Lei Feng-Klasse (abstraktes Produkt):
[code]class LeiFeng{ public: virtual void BuyRice(){ std::cout << "Buy rice.\n"; } virtual void Sweep(){ std::cout << "Sweep.\n"; } virtual void Wash(){ std::cout << "Wash.\n"; } };
Personen, die von Lei Feng lernen (spezifische Produkte):
[code]class UnderGraduate: public LeiFeng{ }; //学雷锋的志愿者(具体产品) class Volunteer: public LeiFeng{ };
Lei Feng-Fabrikklasse (abstrakte Fabrik):
[code]class IFactory{ public: //创建学雷锋对象 virtual LeiFeng* createLeiFeng(){ return NULL; } };
Lernen Sie Lei Fengs Objektfabrik (Betonfabrik):
[code]class UnderGraduateFactory: public IFactory{ LeiFeng* createLeiFeng(){ return new UnderGraduate; } }; class VolunteerFactory: public IFactory{ LeiFeng* createLeiFeng(){ return new Volunteer; } };
Das Obige ist der Inhalt der Fabrik Methodenmuster des C++-Entwurfsmusters. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (m.sbmmt.com)!