• Factory模式


      Factory模式的两个重要功能:

    1)定义创建对象的接口,封装了对象的创建;

    2)使得具体化类的工作延迟到了子类中。

      声明一个创建对象的接口,并封装了对象的创建过程的Factory的结构示意图为:

      Factory模式不单是提供了创建对象的接口,其最重要的是延迟了子类的实例化。

                      图二

      图二中Factory模式的应用并不是只是为了封装对象的创建,而是要把对象的创建放到子类中实现:Factory中只是提供了对象创建的接口,其实现将放在Factory的子类ConcreteFactory中进行。这是图二和图一的区别所在。

    完整代码示例:

    //Product.h 
    #ifndef _PRODUCT_H_ 
    #define _PRODUCT_H_ 
    class Product { 
    public:
        virtual ~Product() =0; 
    protected: 
        Product(); //屏蔽构造函数
    private: 
    }; 
    class ConcreteProduct:publicProduct { 
    public: 
        ~ConcreteProduct(); 
        ConcreteProduct(); 
    protected: 
    private: 
    }; 
    #endif //~_PRODUCT_H_ 
    

      

    //Product.cpp 
    #include "Product.h" 
    #include<iostream> using namespace std; 
    
    Product::Product() { } 
    Product::~Product() { } 
    
    ConcreteProduct::ConcreteProduct() { 
        cout<<"ConcreteProduct...."<<endl; 
    } 
    
    ConcreteProduct::~ConcreteProduct() { } 
    

      

    //Factory.h 
    #ifndef _FACTORY_H_ #define _FACTORY_H_ 
    class Product; 
    class Factory { 
    public:
        virtual ~Factory() = 0; 
        virtual Product* CreateProduct() = 0; 
    protected:
        Factory(); 
    private: 
    }; 
    class ConcreteFactory:public Factory {
    public: 
        ~ConcreteFactory(); 
        ConcreteFactory(); 
        Product* CreateProduct(); 
    protected: 
    private: 
    }; 
    #endif //~_FACTORY_H_ 
    

      

    //Factory.cpp 
    #include "Factory.h" 
    #include "Product.h" 
    #include <iostream> using namespace std; 
    Factory::Factory() { } 
    Factory::~Factory() { } 
    ConcreteFactory::ConcreteFactory() { 
        cout<<"ConcreteFactory....."<<endl; 
    } 
    ConcreteFactory::~ConcreteFactory() { } 
    Product* ConcreteFactory::CreateProduct(){
        return new ConcreteProduct(); 
    } 
    

      

    //main.cpp 
    #include "Factory.h"
    #include "Product.h" 
    #include <iostream>
    using namespace std; 
    int main(int argc,char* argv[]) {
        Factory* fac = new ConcreteFactory(); 
        Product* p = fac->CreateProduct(); 
        return 0; 
    } 

      示例代码中给出的是Factory模式解决父类中并不知道具体要实例化哪一个具体的子类的问题,至于为创建对象提供接口问题,可以由Factory中附加相应的创建操作例如Create***Product()即可。

  • 相关阅读:
    作业11 分类与监督学习,朴素贝叶斯分类算法
    第八次作业
    Python之路【第一篇】:Python基础1
    Python之路【第一篇】:Python基础
    Python 6 数字和布尔值及字符串的基本功能
    Python 7 列表 for 字典,嵌套
    Python 4 循环语句while
    Python 5 运算符
    Python 3 条件语句
    Python 2 声明变量 输入输出 练习
  • 原文地址:https://www.cnblogs.com/chars/p/4987093.html
Copyright © 2020-2023  润新知