简单工厂方法模式
https://itbaima.net/document
当我们需要对象时,直接调用工厂类中的工厂方法来为我们生成对象,这样,就算类出现了变动,我们也只需要修改工厂中的代码即可,而不是大面积地进行修改。
#include <iostream>
#include <vector>
class Fruit
{
private:
const std::string name;
public:
Fruit(const std::string &_name) : name(_name){};
};
class FruitFactory
{
public:
static Fruit getFruit(const std::string &type)
{
if (type == "apple")
{
return Fruit("apple");
}
else if (type == "orange")
{
return Fruit("orange");
}
else
{
return Fruit("unknown");
}
}
};
class Apple : public Fruit
{
public:
Apple() : Fruit("apple"){};
};
class Orange : public Fruit
{
public:
Orange() : Fruit("orange"){};
};
int main(void)
{
Fruit apple = FruitFactory::getFruit("apple");
Fruit orange = FruitFactory::getFruit("orange");
}
抽象工厂方法模式
使用抽象工厂模式,我们可以将多个产品,都放在一个工厂中进行生成,按不同的产品族进行划分
#include <iostream>
#include <string>
class Phone
{
private:
std::string name;
int value;
public:
Phone(const std::string &_name, int _value) : name(_name), value(_value) {}
};
class Table
{
};
class Router
{
};
class AbstractFactory
{
public:
virtual Phone getPhone(const std::string& _name, int _value) = 0;
virtual Table getTable() = 0;
virtual Router getRouter() = 0;
};
class Factory : public AbstractFactory
{
public:
Phone getPhone(const std::string& _name, int _value) override
{
return Phone(_name, _value);
}
Table getTable() override
{
return Table();
}
Router getRouter() override
{
return Router();
}
};
int main()
{
Factory factory;
Phone phone = factory.getPhone("iPhone", 1000);
Table table = factory.getTable();
Router router = factory.getRouter();
// 在这里使用创建的对象...
return 0;
}