前面两篇文章分别介绍了,简单工厂模式以及工厂方法模式。接下来我将介绍一下,抽象工厂模式。抽象工厂模式主要用于具有复杂层级和分类的设计中。比如,分别把网卡驱动和声卡驱动当作一种product。那windows和linux以及mac都需要这两种product。此类设计使用抽象工厂模式最合适不过。抽象工厂模式比较易于交换产品系列。
UML图如下。
从UML图中可以看出,想要某xie li
具体实现代码如下。
工厂类设计
//factory
#pragma once
#include "product.h"
class AbstractFactory
{
public:
AbstractFactory();
virtual AbstractProductA* createProductA() = 0;
virtual AbstractProductB* createProductB() = 0;
};
class Factory1 : public AbstractFactory
{
public:
Factory1();
AbstractProductA* createProductA()
{
return new ProductA1;
};
AbstractProductB* createProductB()
{
return new ProductB1();
}
};
class Factory2 : public AbstractProductB
{
public:
Factory2();
AbstractProductA* createProductA()
{
return new ProductA2;
}
AbstractProductB* createProductB()
{
return new ProductB2;
}
};
产品类设计
//product
#pragma once
class AbstractProductA
{
public:
AbstractProductA(){};
virtual void operation()=0;
};
class ProductA1:public AbstractProductA
{
public:
ProductA1(){};
void operation()
{
};
};
class ProductA2:public AbstractProductA
{
public:
ProductA2(){};
void operation(){};
};
class AbstractProductB
{
public:
AbstractProductB(){};
virtual void operation() = 0;
};
class ProductB1:public AbstractProductB
{
public:
ProductB1(){};
void operation(){};
};
class ProductB2:public AbstractProductB
{
public:
ProductB2(){};
void operation(){};
};
主函数中使用
#include "factory.h"
int main(int argc, char* argv[])
{
AbstractFactory* factory = new Factory1;
AbstractProductA* productA1 = factory->createProductA();
AbstractProductB* productB1 = factory->createProductB();
productA1->operation();
productB1->operation();
return 0;
}
以上便是抽象工厂模式的整个介绍。当然这种方法仍有弊端,比如要增加某个产品,那么最少需要改变三个类。这样会加大工作量,所以具体设计过程中仍然需要具体考虑,将其设计与其他设计模式融合,设计出最符合自己需求的模式。