C++设计模式-抽象工厂(Abstract Factory)

目录

C++设计模式-抽象工厂(Abstract Factory)

一、意图

二、适用性

三、结构

四、参与者

五、代码


C++设计模式-抽象工厂(Abstract Factory)

一、意图

提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

二、适用性

  • 一个系统要独立于它的产品的创建、组合和表示时。
  • 一个系统要由多个产品系列中的一个来配置时。
  • 当你要强调一系列相关的产品对象的设计以便进行联合使用时。
  • 当你提供一个产品类库,而只想显示它们的接口而不是实现时。

三、结构

 C++设计模式-抽象工厂(Abstract Factory)_第1张图片

四、参与者

  • AbstractFactory

       声明一个创建抽象产品对象的操作接口。

  • ConcreteFactory

        实现创建具体产品对象的操作。

  • AbstractProduct

        为一类产品对象声明一个接口。

  • ConcreteProduct

        定义一个将被相应的具体工厂创建的产品对象。

        实现AbstractProduct接口。

  • Client

        仅使用由AbstractFactory和AbstractProduct类声明的接口。

五、代码

#include
using namespace std;

class AbstractProduct {
public:
	virtual void ShowInformation() = 0;
};

class AbstractProductA : public  AbstractProduct {};

class ProductA1 : public AbstractProductA {
public:
	void ShowInformation() {
		cout << "ProductA1 Information" << endl;
	}
};

class ProductA2 : public AbstractProductA {
public:
	void ShowInformation() {
		cout << "ProductA2 Information" << endl;
	}
};

class AbstractProductB : public  AbstractProduct {};

class ProductB1 : public AbstractProductB {
public:
	void ShowInformation() {
		cout << "ProductB1 Information" << endl;
	}
};

class ProductB2 : public AbstractProductB {
public:
	void ShowInformation() {
		cout << "ProductB2 Information" << endl;
	}
};

class AbstractFactory {
public:
	virtual AbstractProductA* CreateProductA() = 0;
	virtual AbstractProductB* CreateProductB() = 0;
};

class FactoryOne : public  AbstractFactory {
public:
	AbstractProductA* CreateProductA() {
		return new ProductA1;
	}
	AbstractProductB* CreateProductB() {
		return new ProductB1;
	}
};

class FactoryTwo : public  AbstractFactory {
public:
	AbstractProductA* CreateProductA() {
		return new ProductA2;
	}
	AbstractProductB* CreateProductB() {
		return new ProductB2;
	}
};

int main() {

	AbstractFactory* factoryOne = new FactoryOne;
	AbstractProduct* productA1 = factoryOne->CreateProductA();
	AbstractProduct* productB1 = factoryOne->CreateProductB();
	productA1->ShowInformation();
	productB1->ShowInformation();

	AbstractFactory* factoryTwo = new FactoryTwo;
	AbstractProduct* productA2 = factoryTwo->CreateProductA();
	AbstractProduct* productB2 = factoryTwo->CreateProductB();
	productA2->ShowInformation();
	productB2->ShowInformation();
	return 0;
}

你可能感兴趣的:(设计模式(C++),设计模式,开发语言,c++)