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源码设计模式》--装饰模式
    弹出对话框输入框
    顶部搜索框背景色渐变
    《Android源码设计模式》--模板方法模式
    《Android源码设计模式》--状态模式--责任链模式--解释器模式--命令模式--观察者模式--备忘录模式--迭代器模式
    《Android源码设计模式》--策略模式
    《Android源码设计模式》--抽象工厂模式
    《Android源码设计模式》--工厂方法模式
    《Android源码设计模式》--原型模式
    《Android源码设计模式》--Builder模式
  • 原文地址:https://www.cnblogs.com/yuecxl/p/2956442.html
Copyright © 2011-2022 走看看