首页 > 其他分享 >简单工厂模式

简单工厂模式

时间:2022-08-20 10:34:50浏览次数:37  
标签:子类 name Car price 模式 工厂 简单 父类

1 定义

  • 简单工厂模式:简单工厂模式又称作静态方法模式(因为工厂中定义了一个静态方法)

  • 工厂类负责生产出各类的产品。其实就是根据传入的参数的不同来生产出不同的产品。

2 具体组成

工厂模式主要有三部分组成:1 抽象父类 2 各种具体的子类 3 工厂类,其具体的类图如下图所示:

 

类名 父类 说明
抽象父类 该类是其他类的父类,主要是用来进行各种子类的继承
子类 i 抽象父类 继承自抽象父类,实现各自具体、特定的功能
工厂类 用来生产出来各种子类
其他类 用来调用其他的类,和其他的类是依赖关系
#ifndef HEADER_H__
#define HEADER_H__

#include <string>                                                                                                                                              
#include <iostream>


/*
	说明:抽象父类Car,被ChanganCar和MingjueCar继承,然后再factory中被生产
*/

// 抽象父类
class Car{
public:
    virtual void makeCar() = 0;; 
protected:
    Car(std::string name, int price):_name(name), _price(price)
    {   
    
    }   
    std::string _name;
    int _price;
};

class ChanganCar:public Car 
{
public:
    ChanganCar(std::string name, int price):Car(name, price)
    {   
        std::cout << "make a ChanganCar" << std::endl;
    }   

    void makeCar()override
    {   
        std::cout << "make a ChanganCar, " << "price = " << _price << " ,name = " << _name << std::endl;
    }   
};

class MingjueCar:public Car
{
public:
    MingjueCar(std::string name, int price):Car(name, price)
    {
        std::cout << "make a ChanganCar" << std::endl;
    }
        
    void makeCar()override
    {
        std::cout << "make a MingjueCar, " << "price = " << _price << " ,name = " << _name << std::endl;
    }
};


class SimpleFactory
{
public:
    static Car*  make_product(const std::string name)                 // 记得这个要设置为static的,以为有一个工厂就够了
    {
        if(name == "Changan")
            return new ChanganCar("changan", 100000);
        else if(name == "Mingjue")
            return new MingjueCar("mingjue", 150000);
        return nullptr;
    }
};

#endif              

3 总结优缺点

优点:

​ 将创建实例和使用实例分开,使用者不必关心对象是是如何创建的,实现解耦合。相当于只是对外提供了接口,更加的安全,符合面向对象编程的思想。

​ 用户根本不需要了解内部的实现,只需要进行简单的传参,就可以得到想要的结果

缺点:

​ 该工厂包含着所有的实例,一旦这个工厂不能正常的工作,系统就会收到影响。

​ 违反 ”开放--关闭原则“,即添加产品的时候,需要对工程的代码重新进行修改,这是不合理的。

吐槽:这SB的博客园是真的难用啊

标签:子类,name,Car,price,模式,工厂,简单,父类
From: https://www.cnblogs.com/moxianbaolianxisheng/p/16607254.html

相关文章

  • 事件循环:微任务和宏任务在v8中实现的简单理解
    微任务在js中,当使用promise,会将当前任务加入事件执行的微任务队列,有且只有这一种方法可以,因为当使用了promise,在JS引擎中会触发VM::queueMicrotask,会向m_microtaskQueue队......
  • elasticsearch中使用curl进行的简单查询
    curl:-X:指定http的请求方式,有HEAD、GET、POST、PUT、DELETE-d:指定要传输的数据-H:指定http的请求头信息curl-XPUThttp://ip:port/索引名?pretty--创建索引cur......
  • 高性能服务器之事件处理模式
    I/O模型对于一个套接字上的输入操作,通常存在以下两个步骤:等待分组到达,被复制到内核缓冲区中将数据从内核缓冲区复制到应用进程的缓冲区中对于上述过程,在Unix下有5......
  • mybatisplus-ActiveRecord 模式
    ActiveRecord模式直接调用Model对象来进行增删改查。实体类只需继承Model类即可进行强大的CRUD操作需要项目中已注入对应实体的BaseMapper实体类User点击查看代......
  • 单例模式
    c++的设计模式:1单例模式(SingletonPattern)单例模式:是最简单的设计模式之一。但是确实很有用的设计模式,因为很多时候,在同一个系统中,我们希望某个类在创建对象的时候,只能......
  • 【建议收藏】Mac VMWare NAT模式安装 CentOS 7-操作教程
    学习大数据离不开Linux系统,网络上大部分文章都是在Windows系统下使用VMWareWorkstation安装CentOS,并使用NAT模式配置网络。本文基于MacOS,通过VMWareFusion......
  • springmvc的简单使用(3)
    一:日期处理:1:日期的提交处理: 单个日期处理:要使用注解,并且注解要搭配springmvc文件中的<annotationdriven><mvc:annotation-driven></mvc:annotation-driven><formact......
  • leetcode 225. Implement Stack using Queues 用队列实现栈(简单)
    一、题目大意请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop和empty)。实现MyStack类:voidpush(intx)将元素x压入栈顶。......
  • spark程序如何在不同的安装模式下运行
    1.本地spark-submit--classorg.apache.spark.examples.SparkPi--masterlocal[2]/opt/app/spark-2.3.1/examples/jars/spark-examples_2.11-2.3.1.jar1002.standa......
  • 适配器的应用(泛型模式)
    适配器模式是一种重要的设计模式,能让代码简练。直接上代码。定义接口,如下所示:publicinterfaceIOrderOperate<C,U,D>{/***创建单据*/boolea......