大话设计模式之简单工厂模式

news/2024/4/29 15:16:34

简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,属于工厂模式的一种。在简单工厂模式中,有一个工厂类负责根据输入参数的不同来创建不同类的实例。

简单工厂模式包含以下几个要素:
1. **工厂类(Factory Class)**:工厂类包含一个方法,根据传入的参数动态地创建并返回不同类的实例。
   
2. **产品接口(Product Interface)**:产品接口是被创建的对象所共享的接口或抽象类。

3. **具体产品类(Concrete Product Classes)**:具体产品类是实现产品接口的具体类,由工厂类根据条件创建。

简单工厂模式的优点包括:
- 将对象创建和业务逻辑分离,客户端只需要知道工厂类即可,不需要关心具体的实现细节。
- 容易扩展,如果需要添加新的产品类,只需修改工厂类即可,符合开闭原则。

然而,简单工厂模式也有缺点,最主要的是当产品类较多时,工厂类会变得庞大且难以维护,违反了单一职责原则。

总的来说,简单工厂模式适合于需要创建的对象较少且不频繁变化的情况下使用,能够有效地封装对象的创建过程。

#include <iostream>
#include <memory>// 产品接口
class Product {
public:virtual void operation() = 0;
};// 具体产品类A
class ConcreteProductA : public Product {
public:void operation() override {std::cout << "Product A operation" << std::endl;}
};// 具体产品类B
class ConcreteProductB : public Product {
public:void operation() override {std::cout << "Product B operation" << std::endl;}
};// 简单工厂类
class SimpleFactory {
public:Product *createProduct(int type){switch (type) {case 1:return new ConcreteProductA;case 2:return new ConcreteProductB;default:return nullptr;}}
};int main(int argc, char *argv[])
{SimpleFactory factory;// 创建产品AProduct *productA = factory.createProduct(1);productA->operation();// 创建产品BProduct *productB = factory.createProduct(2);productB->operation();return 0;
}/*
在这个例程中,我们定义了一个产品接口 Product,并实现了两个具体产品类 ConcreteProductA 和 ConcreteProductB。然后,我们创建了一个简单工厂类 SimpleFactory,其中包含了根据输入参数创建不同产品对象的方法。在 main 函数中,我们使用简单工厂来创建不同类型的产品对象并调用其方法进行操作。
*/

觉得有帮助的话,打赏一下呗。。

           

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.cpky.cn/p/11341.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Webpack部署本地服务器

Webpack部署本地服务器 目录 Webpack部署本地服务器目的认识模块热替换&#xff08;HMR&#xff09;什么是 HMRHMR 通过如下几种方式, 来提高开发的速度如何使用 HMRhost 配置 目的 完成自动编译 常用方式: webpack-dev-server webpack-dev-server 是一个用于开发环境的 Web 服…

新能源汽车驱动电机振动噪音分析

驱动电机示例图 驱动电机的噪声主要分为空气动力噪声、电磁噪声和机械噪声。其中在高速运转时空气动力噪声是主要噪声&#xff0c;中低速运转时电磁噪声为主要噪声。 1、空气动力噪声&#xff1a; 空气噪声主要由于风扇转动&#xff0c;使空气流动、撞击、摩擦而产生&#x…

系列学习前端之第 7 章:一文掌握 AJAX

1、AJAX 简介 AJAX 全称为 Asynchronous JavaScript And XML&#xff08;中文名&#xff1a;阿贾克斯&#xff09;&#xff0c;就是异步的 JS 和 XML。AJAX 不是新的编程语言&#xff0c;而是一种将现有的标准组合在一起使用的新方式。AJAX 可以在浏览器中向服务器发送异步请求…

Chatgpt掘金之旅—有爱AI商业实战篇(一)

演示站点&#xff1a; https://ai.uaai.cn 对话模块 官方论坛&#xff1a; www.jingyuai.com 京娱AI 一、前言&#xff1a; 成为一名商业作者是一个蕴含着无限可能的职业选择。在当下数字化的时代&#xff0c;作家们有着众多的平台可以展示和推广自己的作品。无论您是对写书、…

Django auth模块

【一】命令行创建用户 【1】语法 python manage.py createsuper【2】示例 用户名 默认是是电脑名称 邮箱 可以填也可以不填 密码 terminal中&#xff1a;输入密码不显示出来manage.py中&#xff1a;明文输入输入密码太简单会提示 Username (leave blank to use administra…

【C++航海王:追寻罗杰的编程之路】priority_queue(优先队列) | 容器适配器你知道哪些?

目录 1 -> priority_queue的介绍和使用 1.1 -> priority_queue的介绍 1.2 -> priority_queue的使用 1.3 -> priority_queue的模拟实现 2 -> 容器适配器 2.1 -> 什么是适配器 2.2 -> STL标准库中stack和queue的底层结构 2.3 -> deque的介绍 2.…