5.简单工厂模式

简介: 1简单工厂模式的核心内容是: A:方法独立 B:没有工厂,而是通过switch的方式判断使用哪个方法。 C:理解:带同一个妹子到同一个地点,妹子可以选择不同的菜。 2简单工厂模式的作用:用一个简单的switch和一个方法控制使用哪个方法。 3简单工厂模式具体描述 工厂模式:客户类和工厂类分开。 消费者任何时候需要某种产品,只需向工厂请求

1简单工厂模式的核心内容是:

A:方法独立

B:没有工厂,而是通过switch的方式判断使用哪个方法。

C:理解:带同一个妹子到同一个地点,妹子可以选择不同的菜。

2简单工厂模式的作用:用一个简单的switch和一个方法控制使用哪个方法。

3简单工厂模式具体描述

工厂模式:客户类和工厂类分开。

消费者任何时候需要某种产品,只需向工厂请求即可。

消费者无须修改就可以接纳新产品。缺点是当产品修改时,

工厂类也要做相应的修改。如:如何创建及如何向客户端提供。

 

MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,

虽然口味有所不同,但不管你带MM去麦当劳或肯德基,

只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory

 

第一,基类存放数据

第二,派生类有很多,派生类存放数据的操作

第三实现接口类,用静态函数实现调用各种派生类

4.简单工厂模式类图

5.代码:

#include<iostream>

#include <string>

using namespace std;

 

//工厂模式:客户类和工厂类分开。

//消费者任何时候需要某种产品,只需向工厂请求即可。

//消费者无须修改就可以接纳新产品。缺点是当产品修改时,

//工厂类也要做相应的修改。如:如何创建及如何向客户端提供。

 

//MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,

//虽然口味有所不同,但不管你带MM去麦当劳或肯德基,

//只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory

 

//第一,基类存放数据

//第二,派生类有很多,派生类存放数据的操作

//第三实现接口类,用静态函数实现调用各种派生类

 

//基类存放数据

class Operation

{

public:

    double numberA, numberB;//两个数

    virtual double  getResult()//获取结果

    {

        return 0;

    }

};

 

//派生类存放操作

class addOperation :public Operation

{

    double getResult()

    {

        return numberA + numberB;

    }

};

 

//减操作

class subOperation :public Operation

{

    double getResult()

    {

        return numberA - numberB;

    }

};

 

//乘操作

class mulOperation :public Operation

{

    double getResult()

    {

        return numberA*numberB;

    }

};

 

//除操作

class divOperation :public Operation

{

    double getResult()

    {

        return numberA / numberB;

    }

};

 

//个人理解:类此一个控制器,通过传递标记来控制调用哪个操作

class operFactory

{

public:

    static Operation *createOperation(char c)

    {

        switch (c)

        {

        case '+':

            return new addOperation;

            break;

        case '-':

            return new subOperation;

            break;

        case '*':

            return new mulOperation;

        case '/':

            return new divOperation;

            break;

        }

    }

};

 

int main()

{

    Operation *oper = operFactory::createOperation('-');

    oper->numberA = 9;

    oper->numberB = 99;

    cout << oper->getResult() << endl;

 

    cin.get();

    return 0;

}

运行结果如下:

-90


目录
相关文章
|
分布式计算 大数据 Hadoop
大数据||zookeeper来实现HDFS自动故障转移
namenode启动都是standby。 利用zookeeper来选举一个为active ZooKeeper客户端ZKFC: ZKFailoverController 给namenode添加失效备缓监控器(ZKFC: ZKFailoverCon...
1839 0
|
9月前
|
传感器 算法 数据安全/隐私保护
基于PI控制算法的pwm直流电机控制系统Simulink建模与仿真
本课题基于PI控制算法的PWM直流电机控制系统在Simulink中建模与仿真,对比了传统PI控制器的效果。结果显示,基于PI控制算法的PWM系统在控制性能上更优,具有更好的动态响应和稳态精度。系统通过实时调整PWM信号占空比,实现对电机转速的精确控制。核心程序使用MATLAB 2022a编写,仿真结果无水印展示。系统包括传感器、PI控制器和PWM发生器三大部分,通过合理整定PI参数,可优化系统性能,减少超调量并加快响应速度。
|
10月前
|
数据采集 数据可视化 数据挖掘
销售漏斗分析怎么做?提高成交率的秘密在这里
销售分析是企业提升业绩、优化策略的重要手段。通过系统化数据分析,企业能精准了解市场需求、优化流程并提高转化率。然而,许多企业在实际操作中面临数据分散、分析滞后等问题。本文从核心步骤出发,探讨如何高效开展销售分析,助力企业实现可视化管理和高效协作。具体包括明确分析目标、收集整合数据、分类清洗、深入分析及结果解读,最终将洞察转化为策略优化。借助如板栗看板等工具,可大幅提升分析效率,使企业在数据驱动下做出更精准的决策,从而提高销售业绩和市场份额。
384 23
|
安全
跨域
跨域问题在Web开发中较为常见,开发人员需要根据具体的项目需求和场景选择合适的跨域解决方案。在实际应用中,CORS和代理服务器是比较常用的方法,而JSONP和WebSockets则适用于一些特定的业务场景。
324 49
|
Java 编译器 Maven
Java“class file contains wrong class”解决
当Java程序运行时出现“class file contains wrong class”错误,通常是因为类文件与预期的类名不匹配。解决方法包括:1. 确保类名和文件名一致;2. 清理并重新编译项目;3. 检查包声明是否正确。
356 3
|
缓存 算法
408数据结构学习笔记——外部排序
408数据结构学习笔记——外部排序
560 1
408数据结构学习笔记——外部排序
|
JavaScript
vue uniapp通用省市下拉选择器组件 布局样式可灵活根据ui变更 (区域 可根据数组嵌套的格式继续往下模仿即可)
vue uniapp通用省市下拉选择器组件 布局样式可灵活根据ui变更 (区域 可根据数组嵌套的格式继续往下模仿即可)
872 0
vue uniapp通用省市下拉选择器组件 布局样式可灵活根据ui变更 (区域 可根据数组嵌套的格式继续往下模仿即可)
|
存储 运维 Oracle
Oracle数据库机:让数据价值回归用户“第一性原理”
Oracle数据库机:让数据价值回归用户“第一性原理”
|
存储 缓存 NoSQL
京东一面:Redis 如何实现库存扣减操作?如何防止商品被超卖?
京东一面:Redis 如何实现库存扣减操作?如何防止商品被超卖?
800 0
京东一面:Redis 如何实现库存扣减操作?如何防止商品被超卖?
win10显示此设备不支持接收miracast的解决办法【【百度的方法均不好使,自己发现的,亲测有效!!!!】】
win10显示此设备不支持接收miracast的解决办法【【百度的方法均不好使,自己发现的,亲测有效!!!!】】
win10显示此设备不支持接收miracast的解决办法【【百度的方法均不好使,自己发现的,亲测有效!!!!】】