23种设计模式——工厂方法模式

定义:

一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其他子类。

工厂方法通用类图:

这个图更好理解

在工厂方法模式中,抽象产品类Product负责定义产品的共性,实现对事物最抽象的定义;Creator为抽象创建类,也是抽象工厂,具体如何创建产品类是由具体的实现工厂ConcreteCreator完成的。

工厂方法模式的应用

工厂方法模式的优点

良好的封装新,代码结构清晰。一个对象创建是有约束条件的,如一个调用者需要一个具体的产品对象,只要知道这个产品的类名(或者约束字符串)就可以了,不知奥创建对象的艰辛过程,降低模块间的耦合。

工厂方法模式是经典的解耦框架。高层模块只需要知道产品的抽象类,其他的实现类都不用关心。符合迪米特法则,我不需要就不要去交流;也符合依赖倒置原则,只依赖产品的抽象;当然也符合里氏替换原则,使用产品子类替换产品父类。

#include <iostream>

using namespace std;
class Product
{
public:
	virtual void show() = 0;
};
class Factory
{
public:
	virtual Product* CreateProduct() = 0;
};
class ProductA : public Product
{
public:
	void show()
	{
		cout << "I'm ProductA" << endl;
	}
};
class ProductB : public Product
{
public:
	void show()
	{
		cout << "I'm ProductB" << endl;
	}

};
class FactoryA : public Factory
{
public:
	Product* CreateProduct()
	{
		return new ProductA();
	}
};
class FactoryB : public Factory
{
public:
	Product* CreateProduct()
	{
		return new ProductB();
	}
};
int main()
{
	Factory* factoryA = new FactoryA();
	Factory* factoryB = new FactoryB();

	Product* productA = factoryA->CreateProduct();
	Product* productB = factoryB->CreateProduct();

	productA->show();
	productB->show();

	if (factoryA != nullptr)
	{
		delete factoryA;
		factoryA = nullptr;
	}
	if (factoryB != nullptr)
	{
		delete factoryB;
		factoryB = nullptr;
	}
	if (productA != nullptr)
	{
		delete productA;
		productA = nullptr;
	}
	if (productB != nullptr)
	{
		delete productB;
		productB = nullptr;
	}
	return 0;
}

参考:C++设计模式——工厂方法模式 - Ring_1992 - 博客园 (cnblogs.com)

相关推荐

  1. 23设计模式工厂模式

    2024-03-09 22:30:11       33 阅读
  2. 设计模式——23

    2024-03-09 22:30:11       34 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-09 22:30:11       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-09 22:30:11       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-09 22:30:11       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-09 22:30:11       20 阅读

热门阅读

  1. markdown学习笔记

    2024-03-09 22:30:11       23 阅读
  2. spring aop中获取request和response

    2024-03-09 22:30:11       21 阅读
  3. 基础算法(二)#蓝桥杯

    2024-03-09 22:30:11       23 阅读
  4. 外挂的本质以及进程相关的内容

    2024-03-09 22:30:11       25 阅读
  5. ElasticSearch聚合查询

    2024-03-09 22:30:11       19 阅读
  6. CSS 工程结构

    2024-03-09 22:30:11       20 阅读
  7. Pytest教程:Pytest参数化测试

    2024-03-09 22:30:11       27 阅读
  8. SQL 中IN 列表的最佳使用情况

    2024-03-09 22:30:11       20 阅读
  9. 2402. 2-SAT 问题(tarjan,2-SAT模板题)

    2024-03-09 22:30:11       23 阅读
  10. STM32day3

    STM32day3

    2024-03-09 22:30:11      22 阅读
  11. 掌握mysql,看完这篇文章就够了

    2024-03-09 22:30:11       25 阅读