设计模式:工厂方法模式

本文介绍了工厂方法模式,其定义为定义创建对象的接口,让子类决定实例化的类,目的是解耦。它能解决软件系统中创建对象类型常变的问题,绕过常规创建方法避免紧耦合。还阐述了其结构,列举了优点,如延迟实例化、减少代码维护负担等。

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

工厂方法模式:

最近看设计模式看上瘾了,把论文看完然后再撸一个设计模式,爽歪歪!

定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂模式使得一个类的实例化延迟(目的:解耦,手段:虚函数)到子类。

解决的问题:

  • 在软件系统中,经常面临着创建对象的工作;由于需求的变化,需要创建的对象的具体类型经常变化。
  • 绕过常规的对象创建方法(New),提供一种“封装机制”来避免客户程序和这种“具体对象 创建工作”的紧耦合。

结构如下:
在这里插入图片描述

Product是产品抽象基类,Creator是抽象出来的工厂,ConcreteProduct是具体的产品类,ConcreteCreator是具体的工厂

直接上代码:

这里是抽象类 :ISplitter && 具体类 :TxtSplitter and PictureSplitter
//抽象类
class ISplitter {
public:
	virtual void split() = 0;
	virtual ~ISplitter() {};
};
//具体类
class TxtSplitter :public ISplitter {
	virtual void split() {
		cout << "我是一个TxtSplitter" << endl;
	};
};

class PictureSplitter :public ISplitter {
	virtual void split() {
		cout << "我是一个PictureSplitter" << endl;
	};
};
这里是制造出来的工厂:
//工厂基类
class ISplitterFactory {
public:
	virtual ISplitter* CreatSpliter() = 0;
	virtual ~ISplitterFactory() {};
};

//具体工厂
class TxtSplitterFactory : public TxtSplitter {
public:
	virtual ISplitter* CreatSpliter() {
		cout << "我创建了一个TxtSplitter" << endl;
		return new TxtSplitter();
	};
	virtual ~TxtSplitterFactory() {};
};

class PictureSplitterFactory : public PictureSplitter {
public:
	virtual ISplitter* CreatSpliter() {
		cout << "我创建了一个PictureSplitterFactory" << endl;
		return new PictureSplitter();
	};
	virtual ~PictureSplitterFactory() {};
};

这里是使用接口的处理函数:process()
void process(ISplitterFactory* factory) {
	/****************************** 多态new ************************************
	*	1. splitter的类型取决于factory的工厂类型
	*	2. splitter 与 ISplitterFactory 均为抽象基类,process()不依赖具体的类
	****************************************************************************/
	ISplitter* splitter = factory->CreatSpliter();
}

个人觉得该方法的优点是:当然都是我自己瞎琢磨的大白话,O(∩_∩)O哈哈~

  1. 延迟了具体类的实例化,使得处理函数处理的都是抽象的类型,减少了代码的维护负担,每当产品改变时,我们只需要对相应的产品类进行更改,而不需要更改处理函数。
  2. 客户端基本不用关心使用的是哪个产品,只需要知道用哪个工厂就行了,只需要传入对应的工厂便可以得到对应的产品。

说到最后,其实工厂模式还有一种处理可以实现相应的功能,我也是看别人博客上有这么写的:

//工厂基类
class ISplitterFactory {
public:
	virtual ISplitter* CreatSpliter(string which_kind)
	{
		if(which_kind == "1")
			return new TxtSplitter();
		else if(which_kind == "2")
			return new PictureSplitter();
	};
	virtual ~ISplitterFactory() {};
};

好了,我写完了,又十一点半了,滚回去睡觉啦,加油!

内容概要:本文档详细介绍了Analog Devices公司生产的AD8436真均方根-直流(RMS-to-DC)转换器的技术细节及其应用场景。AD8436由三个独立模块构成:轨到轨FET输入放大器、高动态范围均方根计算内核和精密轨到轨输出放大器。该器件不仅体积小巧、功耗低,而且具有广泛的输入电压范围和快速响应特性。文档涵盖了AD8436的工作原理、配置选项、外部组件选择(如电容)、增益调节、单电源供电、电流互感器配置、接地故障检测、三相电源监测等方面的内容。此外,还特别强调了PCB设计注意事项和误差源分析,旨在帮助工程师更好地理解和应用这款高性能的RMS-DC转换器。 适合人群:从事模拟电路设计的专业工程师和技术人员,尤其是那些需要精确测量交流电信号均方根值的应用开发者。 使用场景及目标:①用于工业自动化、医疗设备、电力监控等领域,实现对交流电压或电流的精准测量;②适用于手持式数字万用表及其他便携式仪器仪表,提供高效的单电源解决方案;③在电流互感器配置中,用于检测微小的电流变化,保障电气安全;④应用于三相电力系统监控,优化建立时间和转换精度。 其他说明:为了确保最佳性能,文档推荐使用高质量的电容器件,并给出了详细的PCB布局指导。同时提醒用户关注电介质吸收和泄漏电流等因素对测量准确性的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值