创建型模式之抽象工厂模式

一、概述

1、抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

2、抽象工厂模式:一个工厂可以生产一系列产品(一族产品),极大减少了工厂类的数量

3、抽象工厂模式:是所有形式工厂模式中最为抽象和最具有一般性的一种形式

4、抽象工厂模式:中的具体工厂不只是创建一种产品,它负责创建一族产品

二、抽象工厂模式的结构

抽象工厂模式包含以下4个角色

(1)AbstractFactory(抽象工厂)

(2)ConcreteFactoruy(具体工厂)

(3)AbstractProduct(抽象产品)

(4)ConcreteProduct(具体产品)

三、模式优点

1、隔离了具体类的生成,使得客户端不需要知道什么被创建

2、当一个产品族中的多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品族中的对象

3、增加新的产品族很方便 ,无须修改已有系统,符合开闭原则

四、模式缺点

1、增加新的产品等级结构麻烦 ,需要对原有系统进行较大的修改,甚至需要修改抽象层代码,这显然会带来较大的不便,违背了开闭原则

五、产品等级结构与产品族

1、产品等级结构:产品等级结构即产品的继承结构

2、产品族:产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品

六、工厂方法和抽象工厂的区别

1、工厂方法模式

(1)每个具体工厂只有一个或者一组重载工厂方法,只能生产一种产品,可能会导致系统中存在大量的工厂类,势必会增加系统的开销·

(2)一个抽象产品类,一个抽象工厂类

2、抽象工厂模式

(1)一个工厂可以生产一系列产品(一族产品),极大减少了工厂类的数量

(2)多个抽象产品类,一个抽象工厂类

七、抽象工厂模式示例代码

cpp 复制代码
#include <iostream>
using namespace std;

class RAM
{
public:
	virtual void show() = 0;
};
class CPU
{
public:
	virtual void show() = 0;
};

class PcRAM : public RAM
{
public:
	virtual void show()
	{
		cout << "Pc的RAM在工作中" << endl;
	}
};

class PcCPU : public CPU
{
public:
	virtual void show()
	{
		cout << "Pc的CPU在工作中" << endl;
	}
};

class MacRAM : public RAM
{
public:
	virtual void show()
	{
		cout << "Mac的RAM在工作中" << endl;
	}
};
class MacCPU : public CPU
{
public:
	virtual void show()
	{
		cout << "Mac的CPU在工作中" << endl;
	}
};

class AbstractFactory
{
public:
	virtual RAM* createRAM() = 0;
	virtual CPU* createCPU() = 0;
};

class PcFactory : public AbstractFactory
{
public:
	virtual RAM* createRAM()
	{
		return new PcRAM;
	}
	virtual CPU* createCPU()
	{
		return new PcCPU;
	}
};

class MacFactory : public AbstractFactory
{
public:
	virtual RAM* createRAM()
	{
		return new MacRAM;
	}
	virtual CPU* createCPU()
	{
		return new MacCPU;
	}
};

int main()
{
	int id;
	cout << "---请输入要选择的平台---" << endl;
	cout << "---------1、Pc------------" << endl;
	cout << "---------2、Mac-----------" << endl;

	AbstractFactory* factory = nullptr;
	CPU* cpu = nullptr;
	RAM* ram = nullptr;

	cin >> id;
	if (id == 1)
	{
		factory = new PcFactory;
		cpu = factory->createCPU();
		ram = factory->createRAM();
	}
	else if (id == 2)
	{
		factory = new MacFactory;
		cpu = factory->createCPU();
		ram = factory->createRAM();
	}

	cpu->show();
	ram->show();

	delete factory;
	delete cpu;
	delete ram;
	return 0;
}
相关推荐
码农爱java2 天前
设计模式--抽象工厂模式【创建型模式】
java·设计模式·面试·抽象工厂模式·原理·23种设计模式·java 设计模式
澄澈i5 天前
设计模式学习[13]---抽象工厂模式+简单工厂+工厂方法模式回顾
学习·设计模式·抽象工厂模式
MatthewMao13 天前
设计模式12:抽象工厂模式
设计模式·抽象工厂模式
西岭千秋雪_13 天前
设计模式の单例&工厂&原型模式
java·单例模式·设计模式·简单工厂模式·工厂方法模式·抽象工厂模式·原型模式
打工人笔记19 天前
6. 一分钟读懂“抽象工厂模式”
java·设计模式·抽象工厂模式
夜空晚星灿烂19 天前
c# 设计模式--抽象工厂模式 (Abstract Factory)
设计模式·c#·抽象工厂模式
无尽的大道20 天前
Kotlin设计模式之抽象工厂模式
设计模式·抽象工厂模式
huaqianzkh22 天前
抽象工厂模式的理解和实践
java·设计模式·抽象工厂模式
萨达大24 天前
23种设计模式-抽象工厂(Abstract Factory)设计模式
java·c++·设计模式·抽象工厂模式·软考·创建型设计模式·软件设计师
山猪打不过家猪1 个月前
C#设计模式——抽象工厂模式(重点)
设计模式·c#·抽象工厂模式