zoukankan      html  css  js  c++  java
  • C++23中设计模式的factory模式

    工厂模式的目的是为了在想要创建的A类的子类B类, 想要用C类来创建, 但是只有C类的子类D类有。 咱们就可以通过工厂类来解决。 把C类当做factory类。

    factory 模式的两个最重要的功能
    1. 定义创建对象的接口, 封装了对象的创建;
    2. 是的具体化类的工作延迟到了子类中。

    factory模式, 通过factory类的子类来创建product类的子类。因为只有factory的子类才能知道自己要创建的是哪个product的子类。

    View Code
    // Factory.h: interface for the Factory class.
    //
    //////////////////////////////////////////////////////////////////////
    
    #if !defined(AFX_FACTORY_H__F5D4EA05_7262_4CC7_A111_D367F50DC7BE__INCLUDED_)
    #define AFX_FACTORY_H__F5D4EA05_7262_4CC7_A111_D367F50DC7BE__INCLUDED_
    
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    
    #include "Product.h"
    
    class Factory  
    {
    public:
        virtual ~Factory();
    
        virtual Product *createProduct() = 0;
    
    protected:
        Factory();
    
    };
    
    class ConcreateFactory: public Factory
    {
    public:
        ConcreateFactory();
        ~ConcreateFactory();
    
        Product *createProduct();
    };
    
    #endif // !defined(AFX_FACTORY_H__F5D4EA05_7262_4CC7_A111_D367F50DC7BE__INCLUDED_)
    
    
    //===================================
    
    
    // Factory.cpp: implementation of the Factory class.
    //
    //////////////////////////////////////////////////////////////////////
    
    #include "Product.h"
    #include "Factory.h"
    
    
    //////////////////////////////////////////////////////////////////////
    // Construction/Destruction
    //////////////////////////////////////////////////////////////////////
    
    Factory::Factory()
    {
    
    }
    
    Factory::~Factory()
    {
    
    }
    
    ConcreateFactory::ConcreateFactory()
    {
    
    }
    
    ConcreateFactory::~ConcreateFactory()
    {
    
    }
    
    Product *ConcreateFactory::createProduct()
    {
        return new ConcreateProduct();
    }
    
    
    
    
    //===================================
    
    
    // Product.h: interface for the Product class.
    //
    //////////////////////////////////////////////////////////////////////
    
    #if !defined(AFX_PRODUCT_H__1D59E936_73D3_4324_A3D6_6F0C62C098FE__INCLUDED_)
    #define AFX_PRODUCT_H__1D59E936_73D3_4324_A3D6_6F0C62C098FE__INCLUDED_
    
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    
    class Product  
    {
    public:
        Product();
        virtual ~Product();
    
    };
    
    class ConcreateProduct: public Product
    {
    public:
        ConcreateProduct();
        ~ConcreateProduct();
    };
    
    #endif // !defined(AFX_PRODUCT_H__1D59E936_73D3_4324_A3D6_6F0C62C098FE__INCLUDED_)
    
    
    //====================================
    
    
    // Product.cpp: implementation of the Product class.
    //
    //////////////////////////////////////////////////////////////////////
    
    #include <iostream>
    
    #include "Product.h"
    
    //////////////////////////////////////////////////////////////////////
    // Construction/Destruction
    //////////////////////////////////////////////////////////////////////
    
    Product::Product()
    {
    
    }
    
    Product::~Product()
    {
    
    }
    
    ConcreateProduct::ConcreateProduct()
    {
        std::cout << "create ConcreateProduct" << std::endl;
    }
    
    ConcreateProduct::~ConcreateProduct()
    {
    
    }
    
    
    //======================================
    
    
    #include "Factory.h"
    #include "Product.h"
    
    int main()
    {
        Factory *fa = new ConcreateFactory();
        Product *pr = fa->createProduct();
    
        return 0;
    }
  • 相关阅读:
    Android:简单联网获取网页代码
    nginx搭建前端项目web服务器以及利用反向代理调试远程后台接口
    ElementUI使用问题记录:设置路由+iconfont图标+自定义表单验证
    vue中引入第三方字体图标库iconfont,及iconfont引入彩色图标
    Axios使用文档总结
    使用node中的express解决vue-cli加载不到dev-server.js的问题
    Vue脚手架(vue-cli)搭建和目录结构详解
    JS夯实基础:Javascript 变态题解析 (下)
    理解JS里的稀疏数组与密集数组
    JS夯实基础:Javascript 变态题解析 (上)
  • 原文地址:https://www.cnblogs.com/yuecxl/p/2956442.html
Copyright © 2011-2022 走看看