• 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;
    }
  • 相关阅读:
    luogu P3959 宝藏
    hdu4035 Maze
    [hdu2899]Strange fuction
    luogu4407 [JSOI2009]电子字典 字符串hash + hash表
    SPOJ6717 Two Paths 树形dp
    luogu4595 [COCI2011-2012#5] POPLOCAVANJE 后缀自动机
    后缀数组
    luoguP1659 [国际集训队]拉拉队排练 manacher算法
    luoguP4555 [国家集训队]最长双回文串 manacher算法
    CF17E Palisection 差分+manacher算法
  • 原文地址:https://www.cnblogs.com/yuecxl/p/2956442.html
Copyright © 2020-2023  润新知