工厂模式

每次添加一个子类都必须在工厂类中添加一个判断分支,这样违背了开放-封闭原则,因此,工厂模式就是为了解决这个问题而产生的。
既然每次都要判断,那我就把这些判断都生成一个工厂子类,这样,每次添加产品子类的时候,只需再添加一个工厂子类就可以了。
这样就完美的遵循了开放-封闭原则。
常用的场景
基本与简单工厂模式一致,只不过是改进了简单工厂模式中的开放-封闭原则的缺陷,使得模式更具有弹性。将实例化的过程推迟到子类中,由子类来决定实例化哪个。
优点
基本与简单工厂模式一致,多的一点优点就是遵循了开放-封闭原则,使得模式的灵活性更强。
//抽象产品类 制造类
class Make
{
public:
    virtual void make() = 0;
};

//具体产品类 制造火车类
class MakeTrain :public Make
{
public:
    void make() { cout<<"make Train"<<endl; }
};

//具体产品类 制造飞机类
class MakePlane :public Make
{
public:
    void make() { cout << "make Plane" << endl; }
};
//抽象工厂类 
class Factory
{
public:
    //返回具体产品类的指针
    virtual Make* createProduct() = 0;
};

//具体工厂类 制造火车的工厂
class TrainFactory :public Factory
{
public:
    Make * createProduct()
    {
        Make* train = new MakeTrain();
        return train;
    }
};

//具体工厂类 制造飞机的工厂
class PlaneFactory :public Factory
{
public:
    Make * createProduct()
    {
        Make* plane = new MakePlane();
        return plane;
    }
};
int main()
{
    Factory * factory = new TrainFactory();
    Make *product = factory->createProduct();
    product->make();

    factory = new PlaneFactory();
    product = factory->createProduct();
    product->make();

    delete factory;
    delete product;
}
原文地址:https://www.cnblogs.com/osbreak/p/10106146.html