工厂模式

本文深入探讨了工厂模式的核心概念,解释了如何通过抽象接口和延迟实例化来创建对象,同时分析了工厂模式的优点和局限性,并展示了如何通过参数化方法解决特定问题。此外,文章还介绍了工厂模式在不同场景下的应用,以及它与其他设计模式的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

个人理解主要是定义了创建对象的接口,封装了子类创建的细节,不需要在客户代码中出现例如:new 子类,这样的书写,同时使得具体化类的工作延迟到了子类中。

Uml

简单的代码实现(实现直接作为内联实现了,大致说明思想):

class Product

{

public:

virtual ~Product() = 0{}

protected:

Product(){}

};

class ConcreteProduct : public Product

{

public:

ConcreteProduct(){cout<<"创建成功"<<endl;}

~ConcreteProduct(){}

};


class Factory

{

public:

virtual ~Factory() = 0{}

virtual Product* CreateProduct() = 0;

protected:

Factory(){}

};

class ConcreteFactory : public Factory

{

public:

ConcreteFactory(){}

~ConcreteFactory(){}

Product* CreateProduct()

{

return new ConcreteProduct;

}


};


int _tmain(int argc, _TCHAR* argv[])

{


Factory* fac = new ConcreteFactory;

Product* p = fac->CreateProduct();

delete fac;

delete p;

//这里产品的销毁可以delete,更好的是在工厂中创建一个方法用来销毁

return 0;

}


工厂模式也会带来一些问题:

如果为每个具体的产品类实例化提供一个函数,则必须新建一个方法来处理这个新建的ConcreteProduct,这样Factory接口永远不能封闭。也可以通过创建子类的方法实现,但这是以新建一个类作为代价的。

实现中可以通过参数化工厂方法,即通过传入一个参数来决定创建具体哪一个Product的子类,方法就是将具体的Product类作为模板参数,类似这样Factory<Product>

Factory模式仅仅局限于一类类(具体的Product有共同基类),如果要为不同类的类提供一个对象创建的接口,那就要用到下节提到的AbstractFactory模式了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值