phpcmsv9网站地图,西部数码网站备案核验单,一个完整的工程项目流程,手工艺品外贸公司网站建设方案一、概述
1、抽象工厂模式#xff1a;提供一个创建一系列相关或相互依赖对象的接口#xff0c;而无需指定它们具体的类。
2、抽象工厂模式#xff1a;一个工厂可以生产一系列产品#xff08;一族产品#xff09;#xff0c;极大减少了工厂类的数量
3、抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口而无需指定它们具体的类。
2、抽象工厂模式一个工厂可以生产一系列产品一族产品极大减少了工厂类的数量
3、抽象工厂模式是所有形式工厂模式中最为抽象和最具有一般性的一种形式
4、抽象工厂模式中的具体工厂不只是创建一种产品它负责创建一族产品
二、抽象工厂模式的结构
抽象工厂模式包含以下4个角色
1AbstractFactory抽象工厂
2ConcreteFactoruy具体工厂
3AbstractProduct抽象产品
4ConcreteProduct具体产品
三、模式优点
1、隔离了具体类的生成使得客户端不需要知道什么被创建
2、当一个产品族中的多个对象被设计成一起工作时它能够保证客户端始终只使用同一个产品族中的对象
3、增加新的产品族很方便无须修改已有系统符合开闭原则
四、模式缺点
1、增加新的产品等级结构麻烦需要对原有系统进行较大的修改甚至需要修改抽象层代码这显然会带来较大的不便违背了开闭原则
五、产品等级结构与产品族
1、产品等级结构产品等级结构即产品的继承结构
2、产品族产品族是指由同一个工厂生产的位于不同产品等级结构中的一组产品
六、工厂方法和抽象工厂的区别
1、工厂方法模式
1每个具体工厂只有一个或者一组重载工厂方法只能生产一种产品可能会导致系统中存在大量的工厂类势必会增加系统的开销·
2一个抽象产品类一个抽象工厂类
2、抽象工厂模式
1一个工厂可以生产一系列产品一族产品极大减少了工厂类的数量
2多个抽象产品类一个抽象工厂类
七、抽象工厂模式示例代码
#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;
}