简单工厂模式
作者:互联网
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