【Linux】设计模式-----简单工厂模式

2023-11-16

概念:简单工厂模式即,只需要输入实例化对象的名称,工厂类就可以实例化出来需要的类。
核心:实现工厂模式的核心就是多个派生类public继承基类,同时根据用户的需求在简单工厂类里面实例化基类的对象,从而根据基类里面的虚函数来实现对派生类的函数调用,同时实现多态。
如图:
这里写图片描述

利用简单计算器的实例来实现工厂模式:


#include<iostream>
using namespace std;

class _operator{
private:
    int a;
    int b;
public:
    void setA(int _a) {a = _a;}
    void setB(int _b) {b = _b;}
    int GetA() {return a;}
    int GetB() {return b;}
    virtual int result() {return 0;}// 虚函数,为了通过基类的指针来调用派生类的对象
};

//通过对基类的虚函数进行不同的重写,在调用的时候可以根据不同的需求进行不同的实例化
class Add:public _operator{
    int result() {return GetA() + GetB();}
};


class Sub:public _operator{
    int result() {return GetA() - GetB();}
};


class Mul:public _operator{
    int result() {return GetA() * GetB();}  
};


class Div:public _operator{
    int result() {return GetA() / GetB();}  
};

class factory{  
public:

    static _operator* GetOperator(char ch){
        _operator* p = NULL;
        switch(ch){
            case '+':
                p = new Add();
                break;
            case '-':
                p = new Sub();
                break;
            case '*':
                p = new Mul();
                break;
            case '/':
                p = new Div();
                break;
            default:
                exit(1);
        }
        return p;
    }
};

注:利用输入的不同,实例化不同的类对象,同时这些类有事通过继承基类的,那么从而在基类的指针来调用基类的虚函数,从而达到调用不同的派生类的目的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Linux】设计模式-----简单工厂模式 的相关文章

  • Linux:如何从特定端口发送TCP数据包?

    如何打开原始套接字以从特定 TCP 端口发送 我希望所有连接始终来自临时端口以下的一系列端口 如果您正在使用raw套接字 然后只需在数据包标头中填写正确的 TCP 源端口即可 相反 如果您使用 TCP 套接字接口 socket connec
  • 如何在shell中输出返回码?

    我正在尝试通过调用自定义 shell 脚本sh bin sh c myscript sh gt log txt 2 gt 1 echo 该命令的输出是创建的后台进程的 PID 我想指导 bin sh保存返回码myscript sh到某个文件
  • Linux 中什么处理 ping?

    我想覆盖 更改 linux 处理 ping icmp echo 请求数据包的方式 这意味着我想运行自己的服务器来回复传入的 icmp 回显请求或其他 数据包 但为了使其正常工作 我想我需要禁用 Linux 的默认 ping icmp 数据包
  • 为arm构建WebRTC

    我想为我的带有arm926ej s处理器的小机器构建webrtc 安装 depot tools 后 我执行了以下步骤 gclient config http webrtc googlecode com svn trunk gclient s
  • 多处理:仅使用物理核心?

    我有一个函数foo它消耗大量内存 我想并行运行多个实例 假设我有一个有 4 个物理核心的 CPU 每个核心有两个逻辑核心 我的系统有足够的内存来容纳 4 个实例foo并行但不是 8 个 此外 由于这 8 个核心中的 4 个是逻辑核心 我也不
  • CoAP数据包的大小是多少?

    我是这项技术的新手 有人可以帮助我了解一些疑问吗 Q 1 CoAP数据包的大小是多少 我知道有 4 字节固定标头 但是包括标头 选项和负载在内的最大大小限制是多少 Q 2 有像MQTT那样的Keep Alive的概念吗 它在UDP上工作 它
  • “make install”将库安装在 /usr/lib 而不是 /usr/lib64

    我正在尝试在 64 位 CentOS 7 2 上构建并安装一个库 为了这个目的我正在跑步 cmake DCMAKE BUILD TYPE Release DCMAKE INSTALL PREFIX usr DCMAKE C COMPILER
  • MySQL 中的创建/写入权限

    我的设备遇到一些权限问题SELECT INTO OUTFILE陈述 当我登录数据库并执行简单的导出命令时 例如 mysql gt select from XYZ into outfile home mropa Photos Desktop
  • 我如何知道 C 程序的可执行文件是在前台还是后台运行?

    在我的 C 程序中 我想知道我的可执行文件是否像这样在前台运行 a out 或者像这样 a out 如果你是前台工作 getpgrp tcgetpgrp STDOUT FILENO or STDIN FILENO or STDERR FIL
  • 使用 Grep 查找两个短语之间的文本块(包括短语)

    是否可以使用 grep 来高亮所有以以下内容开头的文本 mutablePath CGPathCreateMutable 并以以下内容结尾 CGPathAddPath skinMutablePath NULL mutablePath 这两个短
  • 进程退出后 POSIX 名称信号量不会释放

    我正在尝试使用 POSIX 命名信号量进行跨进程同步 我注意到进程死亡或退出后 信号量仍然被系统打开 在进程 打开它 死亡或退出后是否有办法使其关闭 释放 早期的讨论在这里 当将信号量递减至零的进程崩溃时 如何恢复信号量 https sta
  • 监视目录的更改

    很像一个类似的问题 https stackoverflow com questions 112276 directory modification monitoring 我正在尝试监视 Linux 机器上的目录以添加新文件 并希望在这些新文
  • 确定我可以向文件句柄写入多少内容;将数据从一个 FH 复制到另一个 FH

    如何确定是否可以将给定数量的字节写入文件句柄 实际上是套接字 或者 如何 取消读取 我从其他文件句柄读取的数据 我想要类似的东西 n how much can I write w handle n read r handle buf n a
  • 快速像素绘图库

    我的应用程序以每像素的方式生成 动画 因此我需要有效地绘制它们 我尝试过不同的策略 库 但结果并不令人满意 尤其是在更高分辨率的情况下 这是我尝试过的 SDL 好的 但是慢 OpenGL 像素操作效率低下 xlib 更好 但仍然太慢 svg
  • 如何在c linux中收听特定接口上的广播?

    我目前可以通过执行以下操作来收听我编写的简单广播服务器 仅广播 hello int fd socket PF INET SOCK DGRAM 0 struct sockaddr in addr memset addr 0 sizeof ad
  • 如何允许应用程序声明“https”方案 URI? (即如何从 https URL 打开桌面应用程序?)

    目前我正在尝试为 OAuth 2 0 授权流程创建一个客户端 实际上是一个本机应用程序 并且在规范中就在这儿 https www rfc editor org rfc rfc8252 section 7 2据说有 3 种方法来处理重定向 U
  • Linux 上的基准测试程序

    对于一项任务 我们需要使用不同的优化和参数来对我们的实现进行基准测试 有没有一种可行的方法可以在Linux命令行 我知道时间 上使用不同的参数对小程序进行基准测试 从而为我提供CSV或类似内容的时间数据 输出可能类似于 Implementa
  • 警告:请求的映像平台 (linux/amd64) 与检测到的主机平台 (linux/arm64/v8) 不匹配

    警告 请求的映像平台 linux amd64 与检测到的主机平台 linux arm64 v8 不匹配 并且未请求特定平台 docker 来自守护程序的错误响应 无法选择具有功能的设备驱动程序 gpu 我在 mac 上尝试运行此命令时遇到此
  • 如何在 GNU/Linux 上设置 Subversion (SVN) 服务器 - Ubuntu [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一台运行 Ubuntu 的笔记本电脑 我想将其用作 Subversion 服务器 既让我自己在本地承诺 也让其他人远程承诺 要使其
  • Fedora dnf 更新不起作用?

    当我尝试使用 update 命令更新 Fedora 22 时 sudo dnf update 我收到以下错误 错误 无法同步存储库 更新 的缓存 无法准备内部镜像列表 Curl 错误 6 无法解析主机名 无法解析主机 mirrors fed

随机推荐

  • 【Mac使用系列】Mac锁屏及快捷键

    mac锁屏办法 我有所尝试 可用系统自带锁屏快捷键 Ctrl Command Q 或者参考方法2 直接设置TouchBar 这两种办法 亲测可用 我直接设置了TouchBar 锁屏解锁离得很近 比较方便 随你选 Ctrl Shift Pow
  • Python3,selenium动态下载某库PPT文档,省下的钱可以撸串了!!!

    selenium动态下载某库PPT文档 1 引言 2 代码实战 2 1 思路分析 2 2 页面分析 2 3 代码展示 2 4 代码解析 3 总结 1 引言 小鱼 你看啥嘞 把显示屏亮度调的这么暗 小屌丝 这 没有你想的那样 我这是再学习算法
  • property_get函数使用

    在 域的使用方法 int property get const char key char value const char default value int property set const char key const char
  • 设置div中的背景颜色及div中的字体颜色

    div style background black color white 菜单3 div 这样就设置了这个div的背景颜色为黑色 即background属性的颜色 字体颜色为白色 即color属性的颜色 效果如下图
  • C语言学习开头以及个人目标

    一 自我介绍 本人是一个来自某末流211大学的本科生 因为高考的时候发挥失常了 原本可以去一些末985垫底专业或中211的热门专业 最后只能是双非一本随便挑 但是因为不甘心失败就冲了好学校的差专业 最终还是调剂了材料专业 后来好好学习想转专
  • vi/vim 设置tab为4个空格

    vim 编辑器中 tab 有时不是4个空格 代码看起来比较凌乱 配置文件位置 etc vim vimrc Kali linux set ts 4 set softtabstop 4 set shiftwidth 4 set expandta
  • 转帖:DirectShow 在VS2005中环境配置

    转载请标明是引用于 http blog csdn net chenyujing1234 baseclasses参考代码 VS2005下编译通过 http www rayfile com zh cn files 12ac1b0c 7335 1
  • 关于QQ的技巧

    让电脑只能上到自己的QQ 任何QQ都无法登陆 首先把自己的QQ设置为自动登陆模式 接下来最关键的就是移动或删除QQ主目录下的WizardCtrl dll文件 这样就算别的QQ怎么样也登陆不了的了 如果你想上两个QQ的话就把QQ整个目录复制多
  • 2022年 IEEE VIS 科学可视化与体渲染论文整理与分析

    因为最近工作的关系 需要研究一下IEEE VIS中2017年以后的与我之前主要方向 体渲染 医学可视化 有关的论文 我把这些年全部的论文进行了筛选和梳理 总共筛选出57篇论文 打算写一个文章来记录这些内容 这个栏目是2022年的6篇论文的介
  • spark集群搭建与mysql元数据管理

    找个spark集群搭建是针对于上一篇hadoop的基础上搭建的 所以spark的版本也是要按照着hadoop版本进行下载 1 解压spark 修改spark的 etc profile的home目录 2 安装SCALA 并配置SCALA HO
  • ElementUI的简单使用方法讲解

    这里我们以引入button按钮为例 其实很多表单 或者 时间 等等的组件 引入方式都是一样的 举一反三吧 首先 yarn add element ui S 让我们来安装这个包 main js 全局注册 element ui这个组件 完整引入
  • Java的异常(分类、处理原则、应用实例、注意事项)

    学习笔记 异常 异常 是在运行时期发生的不正常情况 在java中用类的形式对不正常情况进行了描述和封装对象 描述不正常的情况的类 就称为异常类 以前 通常将正常流程代码和问题处理代码相结合 现在将正常流程代码和问题处理代码分离 提高阅读性
  • 2022年淘宝/天猫/京东618自动任务助手,带抢购功能源码

    下载地址 https wwc lanzouq com b01cfbrbi 支持自动完成淘宝 天猫 京东618任务 自动领取奖励 解放双手 棒棒的 先开启无障碍和悬浮窗权限 再运行助手 运行过程中可以按音量减 键强制停止 提前关闭媒体声音 直
  • 电梯安全监测丨S271W无线水浸传感器用于电梯机房/电梯基坑水浸监测

    城市化进程中 电梯与我们的生活息息相关 高层住宅 医院 商场 学校 车站等各种商业体建筑 公共建筑中电梯为我们生活工作提供了诸多便利 保障电梯系统的安全至关重要 特别是电梯机房和电梯基坑可通过智能化改造提高其安全性和稳定性 例如在暴风雨天气
  • 【转载】基于 NXP i.MX8QM 的 硬件隔离 介绍

    一 Hardware Partition 1 1 功能简介 Hardware Partition 中文叫硬件分区或者硬件隔离 基于 NXP i MX8QM 的 Hardware Partition 功能将 Resource Memory P
  • 2019顺网无盘服务器配置,顺网无盘如何不安装网维客户端上传系统到无盘服务器...

    14Q3的无盘万能镜像包中并没有安装网维大师客户端 为的是让大家可以自由选择安装网维大师客户端版本进行安装 而不会因为升级 降级这些麻烦又难理解的事情阻碍大家 近期也有人询问如何不安装网维客户端直接上传系统 其实非常简单 这里给大家做个详细
  • usb设备的检测及区分(sata硬盘、优盘及移动硬盘)

    原理 1 如果有外置usb设备插入 会产生 proc scsi usb storage目录 ide硬盘上默认 没有 并且会在 proc scsi usb storage目录中产生数字文件 此文件存储了设 备的相关信息 2 sys class
  • ES5和ES6声明的“全局变量”有什么不同?

    复看红宝石书关于执行上下文与作用域部分的时候发现了以前遗漏的小知识点 let和const的顶级声明不会定义在全局上下文中 1 什么是全局上下文 根据ECMAScript实现的宿主环境不同 表示全局上下文的对象可能不一样 但在浏览器中 我们所
  • ISE在线逻辑分析仪Chipscope的使用

    前言 和 Quartus 的 SingleTapII 类似 ISE 也有自己的内置在线逻辑分析仪 Chipscope 在这里记录一下 Chipscope 的主要使用方法 以便以后回顾 本文使用 UART 串口回环模块进行验证 我们要抓取的信
  • 【Linux】设计模式-----简单工厂模式

    概念 简单工厂模式即 只需要输入实例化对象的名称 工厂类就可以实例化出来需要的类 核心 实现工厂模式的核心就是多个派生类public继承基类 同时根据用户的需求在简单工厂类里面实例化基类的对象 从而根据基类里面的虚函数来实现对派生类的函数调