设计模式c++(5)——工厂模式

工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。

总的来说,就是工厂方法模式封装了对象的创建,通过让子类决定该创建的对象是什么,来达到将对象创建的过程封装的目的。

抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确制定具体类。

抽象工厂允许客户使用抽象的接口来创建一组相关的产品,而不需要知道(或关心)实际产出的具体产品是什么。

Pizza.h

enum pizzaType {cheese, pepperoni, clam, veggie};

class Pizza {
public:
    String getName();

protected:
    String name="";
};

class NYStyleCheesePizza: public Pizza {
public:
    NYStyleCheesePizza();
};

class ChicagoStyleCheesePizza: public Pizza {
public:
    ChicagoStyleCheesePizza();
};

class PizzaStore {
public:
    Pizza orderPizza(pizzaType t);

private:
    virtual Pizza createPizza(pizzaType t) = 0;
};

class NYStylePizzaStore: public PizzaStore {
private:
    Pizza createPizza(pizzaType t);
};

class ChicagoPizzaStore: public PizzaStore {
private:
    Pizza createPizza(pizzaType t);
};

Pizza.cpp

#include "Pizza.h"

String Pizza::getName() {
    return name;
}

NYStyleCheestPizza::NYStyleCheesePizza() {
    name = "NY Style Sauce and Cheese Pizza";
}

ChicagoStyleCheesePizza::ChicagoStyleCheesePizza() {
    name = "Chicago Style Deep Dish Cheese Pizza";
}

Pizza PizzaStore::orderPizza(pizzaType t) {
    Pizza pizza = createPizza(t);
    return pizza;
}

Pizza NYStylePizzaStore::createPizza(pizzaType t) {
    if (t == cheese) {
        return NYStyleCheesePizza;
    }
}

Pizza ChicagoPizzaStore::createPizza(pizzaType t) {
    if (t == cheese) {
        return ChicagoStyleCheesePizza;
    }
}

注意的点:

好像并没有什么需要注意的点。主要就是把类的实体化部分封装起来,通过一些标识,比如枚举类型或者字符串,来区别到底实体化哪种子类。

blog的工厂模式的例子真的是工厂,不过好像也没什么特别的。https://blog.csdn.net/wuzhekai1985/article/details/6660462

原文地址:https://www.cnblogs.com/wangzhao765/p/9172309.html