当前位置: 首页 > article >正文

创建型模式-工厂模式

工厂模式是一种创建型的设计模式,原理是父类提供一个创建对象的方法,允许子类去实现具体的实例化对象。通过此模式可减少创建和具体的产品之间的耦合关系。

适用场景:

1、当需求中无法预估对象确切类别及个别的依赖关系。例如: 如果需要向应用中添加一种新产品, 你只需要开发新的创建者子类, 然后重写其工厂方法即可。

2、当需要用户可以扩展我们软件库或者框架内部的应用。

实现过程:

1、创建一个工厂基类和产品基类。

2、实现继承于工厂类的工厂类和继承于产品的产品类。

3、对用工厂实现具体的产品。
关系图:
在这里插入图片描述

代码:

#include "DanLiMoShi.h"
#include "GongChangMoshi.h"
int main()
{
    std::cout << "欢迎东哥来到设计模式的世界!\n";


    factory* factoryBase = new factory; //基类工厂
    product* productBase = factoryBase->createProduct();
    cout << "factoryBase:" << productBase->m_name << endl;

    factory* carFactory = new CarFactory;//汽车工厂创建
    product* carProduct = carFactory->createProduct();
    cout << "carProduct:" << carProduct->m_name << endl;

    factory* phoneFactory = new PhoneFactory; //手机工厂
    product* phoneProduct = phoneFactory->createProduct();
    cout << "phoneFactory:" << phoneProduct->m_name << endl;
}
pragma once
#include <string>
using namespace std;
class product;//产品基类
class factory //工厂基类
{
public:
	factory();
	~factory();
	virtual product* createProduct(); //创建具体的产品的方法
};


class CarFactory :public factory {

public:
	CarFactory();
	~CarFactory();
	product* createProduct() override;
};

class PhoneFactory :public factory {

public:
	PhoneFactory();
	~PhoneFactory();
	product* createProduct() override;;
};

class product {
public:
	product(string name) { m_name = name; };
	~product() {};
	string m_name;
};


class CarProduct :public product {
public:
	CarProduct(string name) :product(name) { m_name = name; };
	~CarProduct() {};
	string m_name;
};

class PhoneProduct :public product {
public:
	PhoneProduct(string name,int age) :product(name) { m_name = name; m_age = age };
	~PhoneProduct() {};
	string m_name;
	int m_age;
};
#include "GongChangMoshi.h"

factory::factory()
{
}

factory::~factory()
{
}

product* factory::createProduct()
{
	return new product("基类产品");
}

CarFactory::CarFactory()
{
}

CarFactory::~CarFactory()
{
}

product* CarFactory::createProduct()
{
	return  new CarProduct("汽车产品");
}

PhoneFactory::PhoneFactory()
{
}

PhoneFactory::~PhoneFactory()
{
}

product* PhoneFactory::createProduct()
{
	return new PhoneProduct("电话产品");
}


http://www.kler.cn/a/472637.html

相关文章:

  • Nginx:Stream模块
  • html + css 顶部滚动通知栏示例
  • 黄仁勋CES 2025演讲重点内容
  • IDEA 字符串拼接符号“+”位于下一行的前面,而不是当前行的末尾
  • JuiceFS 详解:一款为云原生设计的高性能分布式文件系统
  • 【PPTist】批注、选择窗格
  • 继承(6)
  • C++ 中的 const 和 constexpr: 深入对比与最佳实践
  • HTML基础入门——简单网页页面
  • 电致变色和电泳技术在低功耗显示器中大放异彩
  • 一次完成Win10下MySQL 9.1 的安装
  • 算法的五个重要特性和4个基本标准
  • 医疗可视化大屏 UI 设计新风向
  • el-tree拖拽光标错位问题
  • oracle闪回恢复数据:(闪回查询,闪回表,闪回库,回收站恢复)
  • 本地导入封装的模块 在docker内报错ImportError
  • C#核心技术---Lambda表达式
  • SSM-SpringMVC-请求响应、REST、JSON
  • 基于 Nuxt3 + Obsidian 搭建个人博客
  • Synthesia技术浅析(四):自然语言处理
  • 深度学习J8周 Inception v1算法实战与解析
  • (leetcode算法题)2271. 毯子覆盖的最多白色砖块数
  • C++ 复习总结记录三
  • minibatch时,损失如何记录
  • 机器学习之随机森林算法实现和特征重要性排名可视化
  • Three.js 12中利用着色器进行材质加工深度解析