c++ 设计模式 --- 工厂模式

什么是工厂模式?

和简单工厂模式区别不大,只是为工厂提供了一个抽象方法:c++ 设计模式 --- 单例模式、简单工厂_小雪菜本菜的博客-CSDN博客_c++单例工厂

工厂方法模式同样属于类的创建型模式又被称为多态工厂模式 。工厂方法模式的意义是 定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。 核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类 必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工 厂角色的情况下引进新的产品

为什么使用工厂模式

工厂方法模式与简单工厂模式在结构上的不同不是很明显。工厂方法类的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体类上。 工厂方法模式之所以有一个别名叫多态性工厂模式是因为具体工厂类都有共同的接口, 或者有共同的抽象父类。 当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体对象以及一个具体工厂对 象,原有工厂对象不需要进行任何修改,也不需要修改客户端,很好的符合了“开放-封闭” 原则。而简单工厂模式在添加新产品对象后不得不修改工厂方法,扩展性不好。工厂方法模式退化后可以演变成简单工厂模式。

工厂模式实现步骤

1.提供一个抽象工厂类:所有具体工厂类的父类

2.提供与产品对应的工厂类:负责实例化产品对象

3.提供一个抽象产品类:所有产品的父类

4.提供一个或多个产品类:工厂方法模式所创建的具体实例对象

简单工厂的类图

抽象出一个抽象工厂,抽象工厂会有多个工厂,不同的工厂负责生产不同的产品,下面给出工厂模式的类图

工厂模式的交互由抽象工厂和抽象产品之间去完成的,实际的工厂类产生实际的产品

类图中有生产 A 产品的工厂、生产 B 产品的工厂、生产 C 产品的工厂,不同的工厂生产不同的产品

工厂模式实现代码

#include <iostream>
using namespace std;
//造火箭、造飞机是两个不同的事件 需要抽象一个火箭工厂和一个飞机工厂提供火箭和飞机
//抽象产品类
class AbstractProduct
{
public:
    //存在父类指针和子类指针的操作 可以用虚析构函数
	virtual ~AbstractProduct() {}
    //虚函数创建产品
	virtual void makeProduct() = 0;
};

//抽象工厂负责创建一个产品
class  AbstractFactory
{
public:
	virtual ~AbstractFactory() {}
	virtual AbstractProduct* CreateProduct() = 0;
};

//针对抽象类写一个具体的实现类 <具体产品类>继承<抽象产品类>
//飞机
class PlaneProduct :public AbstractProduct
{
public:
    //实现抽象产品类的纯虚函数即可
	void makeProduct() 
	{
		cout << "飞机......" << endl;
	}
};
//飞机工厂
class PlaneFactory :public AbstractFactory 
{
    //实现纯虚方法即可
	AbstractProduct* CreateProduct() 
	{
        //飞机工厂负责创建飞机 直接返回
		return  new PlaneProduct;
	}
};
//火箭
class RocketProduct :public AbstractProduct 
{
public:
    //实现抽象产品类的纯虚函数即可
	void makeProduct() 
	{
		cout << "火箭......" << endl;
	}
};
//火箭工厂
class RocketFactory :public AbstractFactory
{
    //实现纯虚方法即可
	AbstractProduct* CreateProduct() 
	{
         //火箭工厂负责创建火箭 直接返回
		return new RocketProduct;
	}
};
//也可以把整个过程封装成一个函数 由于是统一的行为所以可以统一接口
//传入一个工厂和一个产品
void test(AbstractFactory* factory,AbstractProduct* product)
{
    //统一接口 只需要传入不同对象就可以了
	factory->CreateProduct();
	product->makeProduct();
}

int main() 
{
    //首先要有工厂 先 new 一个飞机工厂
	AbstractFactory* factory = new PlaneFactory;
    //有工厂就可以创建商品
	AbstractProduct* product = factory->CreateProduct();
    //输出产品信息
	product->makeProduct();
    //再 new 一个火箭工厂
	factory = new RocketFactory;
	product = factory->CreateProduct();
	product->makeProduct();
	return 0;
}

/* 输出 */

飞机......
火箭......

工厂模式优缺点

优点

  • 需求改变时改动最小

  • 具体的创建实例过程与客户端分离

缺点

  • 新增功能时,工程量稍大(上面的例子,如果要添加新的工厂,代码比较累赘,需要添加两个类,如果要造轮船,需要写一个轮船产品的类和一个轮船工厂的类)

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
设计模式是在软件开发中常用的一种编程思想,它提供了一种解决问题的方法论,可以帮助开发者更加灵活和高效地开发软件。基于qt4开源跨平台开发框架的PDF设计模式主要包括以下几个方面。 首先,观察者模式是一种常用的设计模式,它可以用于实现PDF文件的订阅和通知功能。通过该模式,用户可以选择关注自己感兴趣的PDF文件,并在文件更新时接收到通知。 其次,工厂模式是常用的创建型设计模式,它可以帮助开发者根据需要创建不同类型的PDF文件。例如,可以使用工厂模式创建基本的PDF文件、加密的PDF文件或者带有水印的PDF文件。 再次,装饰器模式是一种结构型设计模式,可以用于在不修改现有代码的情况下为PDF文件添加额外的功能。开发者可以通过装饰器模式为PDF文件添加页眉、页脚、书签等功能,同时保持原有的PDF文件结构和功能不受影响。 此外,策略模式也是常用的设计模式之一,在PDF开发中可以用于实现不同的压缩策略和加密策略。通过策略模式,开发者可以根据需求选择不同的策略来实现对PDF文件的处理和管理。 最后,单例模式是一种创建型设计模式,可以确保在整个应用程序中只有一个PDF文件实例。通过单例模式,可以在不同的模块中共享同一个PDF文件对象,避免资源浪费和数据冲突。 总而言之,设计模式在基于qt4开源跨平台开发框架的PDF开发中具有重要的作用。以上提到的几种设计模式可以帮助开发者更好地组织和管理PDF文件,提高开发效率和代码的可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qiuqiuyaq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值