工厂方法模式:核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。
UML类图:
类之间的依赖关系:
程序源码:
#include<iostream>
#include<string>
using namespace std;
/* 抽象产品基类 */
class AbstractProduct
{
public:
AbstractProduct(){}
virtual void doSomeThing(){}; //示例
virtual ~AbstractProduct(){}; //设置为虚析构函数,防止内存泄漏 ,使用delete删除基类时保证使用子类的析构函数
};
/* 抽象工厂基类 */
class AbstractFactory
{
public:
virtual AbstractProduct* createProduct(int productType) = 0;
virtual ~AbstractFactory(){}
};
/* 具体产品 */
class ConcreteProduct : public AbstractProduct
{
public:
ConcreteProduct(){}
void doSomeThing(){ cout<<"Product"<<endl; }
~ConcreteProduct(){ cout<<"ConcreteProduct Destructor"<<endl; }
};
/* 具体工厂 */
class ConcreteFactory : public AbstractFactory
{
public:
AbstractProduct *createProduct(int productType);
~ConcreteFactory(){ cout<<"ConcreteFactory Destructor"<<endl; }
};
AbstractProduct * ConcreteFactory::createProduct(int productType)
{
AbstractProduct * product;
switch(productType)
{
case 1:
product = new ConcreteProduct();
break;
}
return product;
}
int main()
{
AbstractFactory *factory = new ConcreteFactory();
AbstractProduct * product = factory->createProduct(1);
product->doSomeThing();
delete factory;
delete product;
return 0;
}
本文深入探讨工厂方法模式的核心概念,包括核心工厂与抽象工厂的角色及其在设计模式中的应用。通过UML类图展示类之间的依赖关系,并提供C++程序源码实例,帮助理解如何在实际项目中实现这一设计模式。
789

被折叠的 条评论
为什么被折叠?



