2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Der einfache Factory-Modus löst hauptsächlich das Problem der Schnittstellenauswahl.
Der Kernteil von Factory ist für die Implementierung der internen Logik zur Erstellung aller Produkte verantwortlich. Die Factory-Klasse kann direkt von der Außenwelt aufgerufen werden, um die erforderlichen Objekte zu erstellen.
- // SingletonPattern.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
- //
-
- #include <iostream>
- using namespace std;
-
- //抽象汽车
- class AbstractCar
- {
- public:
- virtual void ShowCarName() = 0;
- };
-
- //具体产品的汽车继承->抽象汽车类,并且对他方法进行重写操作
- //凯美瑞
- class Camry :public AbstractCar
- {
- virtual void ShowCarName()
- {
- cout << "Camry Car." << endl;
- }
- };
- //迈腾
- class Magotan :public AbstractCar
- {
- virtual void ShowCarName()
- {
- cout << "Magotan Car." << endl;
- }
- };
- //奥迪
- class Aodi :public AbstractCar
- {
- virtual void ShowCarName()
- {
- cout << "Aodi Car." << endl;
- }
- };
-
- //奔驰
- class Benz :public AbstractCar
- {
- virtual void ShowCarName()
- {
- cout << "Benz Car." << endl;
- }
- };
-
- //通过传递参数来确定需要生成汽车
- //汽车工厂
- class Carfactory
- {
- public:
- static AbstractCar* CreateCarFunc(string cname)
- {
- if (cname == "Camry")
- //具体生产细节....
- return new Camry;
- else if (cname == "Magotan")
- //具体生产细节....
- return new Magotan;
- else if (cname == "Aodi")
- //具体生产细节....
- return new Aodi;
- else if (cname == "Benz")
- //具体生产细节....
- return new Benz;
- else
- return nullptr;
- }
- };
- int main()
- {
-
- //创建工厂
- Carfactory* fty = new Carfactory;
-
- //创建汽车
-
- AbstractCar* car;
-
- //指定工厂需要创建的汽车
-
- car = fty->CreateCarFunc("Benz");
-
- car->ShowCarName();
-
- delete car;
-
-
- return 0;
-
- }
-
Abstract Factory Pattern ist ein kreatives Muster in Designmustern und wird zum Aufbau von Produktfamilien verwendet. Die abstrakte Fabrik ist die abstrakteste und allgemeinste Form aller Fabrikmuster. Abstrakte Fabrik bezieht sich auf ein Fabrikmuster, das verwendet wird, wenn mehrere abstrakte Rollen vorhanden sind. Das abstrakte Factory-Muster kann eine Schnittstelle zum Client bereitstellen, die es dem Client ermöglicht, Produktobjekte in mehreren Produktfamilien zu erstellen, ohne die spezifischen Produkte anzugeben. Jede Form im Fabrikmuster ist eine Lösung für ein bestimmtes Problem. Die Fabrikmethode zielt auf mehrere Produktserienstrukturen ab, während das abstrakte Fabrikmuster auf mehrere Produktfamilienstrukturen mit mehreren Produktserien innerhalb einer Produktfamilie abzielt.
Stellt eine Schnittstelle zum Erstellen einer Reihe voneinander abhängiger Objekte bereit, ohne deren konkrete Klassen anzugeben. Hauptzweck der Lösung: Hauptsächlich die Auswahl von Schnittstellenproblemen lösen.
Im abstrakten Factory-Muster ist der Client nicht mehr für die Erstellung von Objekten verantwortlich, sondern überlässt diese Verantwortung bestimmten Factory-Klassen. Der Client ist nur für den Aufruf von Objekten verantwortlich, wodurch die Verantwortlichkeiten jeder Klasse geklärt werden.
Im abstrakten Fabrikmuster gibt es vier Rollen:abstrakte Fabrikrolle、Spezifische Fabrikrollen, abstrakte Produktpersönlichkeit,Spezifische Produktrollen.
Codebeispiel
- #include <iostream>
- using namespace std;
-
- // 抽象西瓜
- class AbstractWatermelon {
- public:
- virtual void PrintName() = 0;
- AbstractWatermelon() {
- cout << "抽象西瓜构造函数." << endl;
- }
- ~AbstractWatermelon() {
- cout << "抽象西瓜析构函数." << endl;
- }
- };
-
- // 抽象桔子
- class AbstractOrange {
- public:
- virtual void PrintName() = 0;
- AbstractOrange() {
- cout << "抽象桔子构造函数." << endl;
- }
- ~AbstractOrange() {
- cout << "抽象桔子析构函数." << endl;
- }
- };
-
- // 中国西瓜
- class ChinaWatermelon :public AbstractWatermelon {
- public:
- virtual void PrintName() {
- cout << "中国西瓜最好吃." << endl;
- }
- ChinaWatermelon() {
- cout << "中国西瓜构造函数." << endl;
- }
- ~ChinaWatermelon() {
- cout << "中国西瓜析构函数." << endl;
- }
- };
-
- // 中国桔子
- class ChinaOrange :public AbstractOrange
- {
- public:
- virtual void PrintName() {
- cout << "中国桔子最甜的.n" << endl;
- }
- ChinaOrange() {
- cout << "中国桔子构造函数." << endl;
- }
- ~ChinaOrange() {
- cout << "中国桔子析构函数" << endl;
- }
- };
-
- // 埃及西瓜
- class EgyptWatermelon :public AbstractWatermelon {
- public:
- virtual void PrintName() {
- cout << "埃及西瓜:早在四千年前就种植西瓜." << endl;
- }
- EgyptWatermelon() {
- cout << "埃及西瓜构造函数." << endl;
- }
- ~EgyptWatermelon() {
- cout << "埃及西瓜析构函数." << endl;
- }
- };
-
- // 埃及桔子
- class EgyptOrange :public AbstractOrange {
- public:
- virtual void PrintName() {
- cout << "埃及桔子光照条件最好,供应高质量的桔子.n" << endl;
- }
- EgyptOrange() {
- cout << "埃及桔子构造函数." << endl;
- }
- ~EgyptOrange() {
- cout << "埃及桔子析构函数." << endl;
- }
- };
-
-
- // 抽象工厂 主要针对产品转换
- class AbstrctFactory {
- public:
- virtual AbstractWatermelon* CreateWatermelon() = 0;
- virtual AbstractOrange* CreateOrange() = 0;
-
- AbstrctFactory() {
- cout << "抽象工厂构造函数." << endl;
- }
- ~AbstrctFactory() {
- cout << "抽象工厂析构函数." << endl;
- }
- };
-
- // 中国工厂
- class ChinaFactory :public AbstrctFactory
- {
- public:
- virtual AbstractWatermelon* CreateWatermelon() {
- return new ChinaWatermelon;
- }
- virtual AbstractOrange* CreateOrange() {
- return new ChinaOrange;
- }
- ChinaFactory() {
- cout << "中国工厂构造函数." << endl;
- }
- ~ChinaFactory() {
- cout << "中国工厂析构函数." << endl;
- }
-
-
- };
-
- // 埃及工厂
- class EgyptFactory :public AbstrctFactory {
- public:
- virtual AbstractWatermelon* CreateWatermelon() {
- return new EgyptWatermelon;
- }
- virtual AbstractOrange* CreateOrange() {
- return new EgyptOrange;
- }
- EgyptFactory() {
- cout << "埃及工厂构造函数." << endl;
- }
- ~EgyptFactory() {
- cout << "埃及工厂析构函数." << endl;
- }
- };
-
-
- int main()
- {
- cout << "****************************************************************************" << endl;
- //抽象工厂基类指针派生类对象
- AbstrctFactory* cfactory = new ChinaFactory;
- /*
- 抽象工厂构造函数.
- 中国工厂构造函数.
- */
- //抽象西瓜基类指针
- AbstractWatermelon* cwatermelon = cfactory->CreateWatermelon();
- /*
- 抽象西瓜构造函数.
- 中国西瓜构造函数.
- */
- AbstractOrange* corange = cfactory->CreateOrange();
- /*
- 抽象桔子构造函数.
- 中国桔子构造函数.
- */
- cwatermelon->PrintName();
- /*
- 中国西瓜最好吃.
- */
- corange->PrintName();
- /*
- 中国桔子最甜的.
- */
-
- delete corange; corange = nullptr;
- //抽象桔子析构函数.
- delete cwatermelon; cwatermelon = nullptr;
- //抽象西瓜析构函数.
- delete cfactory; cfactory = nullptr;
- //抽象工厂析构函数.
- cout << "****************************************************************************" << endl;
-
-
- cout << "nn****************************************************************************" << endl;
- AbstrctFactory* efactory = new EgyptFactory;
- /*
- 抽象工厂构造函数.
- 埃及工厂构造函数
- */
- AbstractWatermelon* ewatermelon = efactory->CreateWatermelon();
- /*
- 抽象西瓜构造函数
- 埃及西瓜构造函数.
- */
- AbstractOrange* eorange = efactory->CreateOrange();
- /*
- 抽象橘子构造函数
- 埃及橘子构造函数.
- */
- ewatermelon->PrintName();
- /*
- 埃及西瓜:早在四千年前就种植西瓜.
- */
- eorange->PrintName();
- /*
- 埃及桔子光照条件最好,供应高质量的桔子.
- */
- delete eorange; eorange = nullptr;//抽象桔子析构函数.
- delete ewatermelon; ewatermelon = nullptr;//抽象西瓜析构函数.
- delete efactory; efactory = nullptr;
- /*
- 抽象工厂析构函数.
- */
- cout << "****************************************************************************" << endl;
- return 0;
- }