zoukankan      html  css  js  c++  java
  • 设计模式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

  • 相关阅读:
    Python selenium —— 一定要会用selenium的等待,三种等待方式解读
    python3 selenium 切换窗口的几种方法
    转:对UI自动化测试的一些感悟
    Docker
    【转】selenium之 定位以及切换frame
    selenium——键盘操作
    selenium——鼠标事件
    python 读取Excel表格方法
    springboot maven 更新jar包速度慢的问题
    Python3 读写utf-8文本文件
  • 原文地址:https://www.cnblogs.com/wangzhao765/p/9172309.html
Copyright © 2011-2022 走看看