ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

简单工厂模式

2022-08-20 10:31:45  阅读:137  来源: 互联网

标签:子类 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,模式,工厂,简单,父类
来源: https://www.cnblogs.com/moxianbaolianxisheng/p/16607254.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有