设计模式之工厂

本文介绍了三种常见的设计模式:简单工厂模式,工厂方法模式和抽象工厂模式。简单工厂模式通过封装对象创建,方便管理对象的创建过程;工厂方法模式进一步抽象,每个工厂专门生产特定产品,易于扩展;抽象工厂模式则适用于多种产品类别,允许不同工厂生产不同类别的产品,适应更复杂的场景。
摘要由CSDN通过智能技术生成

1、简单工厂模式

主要作用是封装对象的创建,把对象的创建和操作过程分离,用于批量管理对象的创建过程,便于程序的维护和扩展。
简单工厂是工厂模式最简单的一种实现,对于不同产品的创建定义一个工厂类,将产品的类型作为参数传入到工厂的创建函数,根据类型分支选择不同的产品构造函数。

typedef enum ProductTypeTag
{
    TypeA,
    TypeB,
    TypeC
}PRODUCTTYPE;

class Product        //产品抽象基类
{
	public:
		virtual void show() = 0;
};

class ProductA : public Product   //产品A
{
	public:
		void show()
		{
			cout<<"productA"<<endl;
		}
};
class ProductB : public Product   //产品B
{
	public:
		void show()
		{
			cout<<"productB"<<endl;
		}
};
class ProductC : public Product  // 产品C
{
	public:
		void show()
		{
			cout<<"productC"<<endl;
		}
};

class Factory     //工厂类:根据类型分支选择不同的产品构造函数。
{
	public:
		Product* CreateProduct(PRODUCTTYPE type)
		{
        	switch (type)
        	{
       		 case TypeA:
            	return new ProductA();
 
       		 case TypeB:
            	return new ProductB();
 
        	 case TypeC:
            	return new ProductC();
 
        	  default:
            	return NULL;
        	}
    	}
}

2、工厂方法模式

工厂方法模式在简单工厂模式的基础上增加对工厂的基类抽象,不同的产品创建采用不同的工厂创建。多个工厂多个产品,FactoryA专心负责生产ProductA

该模式相对于简单工厂模式的优势在于:便于后期产品种类的扩展。

typedef enum ProductTypeTag {
    TypeA,
    TypeB,
    TypeC
}PRODUCTTYPE;

class Product {//产品抽象基类
public:
    virtual void Show() = 0;
};

class ProductA : public Product {
public:
    void Show() {
        cout<<"ProductA"<<endl;
    }
};

class ProductB : public Product {
public:
    void Show() {
        cout<<"ProductB"<<endl;
    }
};
 
class Factory {        //工厂类
public:
    virtual Product *createProduct()=0;
};

class FactoryA:public Factory {
public:
    Product *createProduct() {
        return new ProductA();
    }
};

class FactoryB:public Factory {
public:
    Product *createProduct() {
        return new ProductB();
    }
};

3、抽象工厂模式

  • 工厂方法模式适用于产品种类结构单一的场合,为一类产品提供创建的接口;
  • 而抽象工厂方法适用于产品种类结构多的场合,就是当具有多个抽象产品类型的时候。
  • 抽象工厂模式更适合实际情况,受生产线所限,让低端工厂生产不同种类的低端产品,高端工厂生产不同种类的高端产品。
class ProductA {
public:
    virtual void Show() = 0;
};

class ProductA1 : public ProductA {//A类低端产品
public:
    void Show() {
        cout<<"I'm ProductA1"<<endl;
    }
};

class ProductA2 : public ProductA {//A类高端产品
public:
    void Show() {
        cout<<"I'm ProductA2"<<endl;
    }
};

class ProductB {
public:
    virtual void Show() = 0;
};

class ProductB1 : public ProductB {//B类低端产品
public:
    void Show()
    {
        cout<<"I'm ProductB1"<<endl;
    }
};

class ProductB2 : public ProductB { //B类高端产品
public:
    void Show() {
        cout<<"I'm ProductB2"<<endl;
    }
};
 
class Factory {
public:
    virtual ProductA *CreateProductA() = 0;
    virtual ProductB *CreateProductB() = 0;
};
 
class Factory1 : public Factory { //1号工厂用于生产低端产品
public:
    ProductA *CreateProductA() {
        return new ProductA1();
    }
 
    ProductB *CreateProductB() {
        return new ProductB1();
    }
};
 
class Factory2 : public Factory { //2号工厂用于生产高端产品
    ProductA *CreateProductA() {
        return new ProductA2();
    }
 
    ProductB *CreateProductB() {
        return new ProductB2();
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值