zoukankan      html  css  js  c++  java
  • 抽象工厂

    抽象工厂是对多个相关联的工厂基类创建接口的合并。
    比如有二进制文件,文本文件,图片文件三个类型的三个分割操作对象和三个合并操作对象。
    应用不管文件类型,但是要保证文件的分割和合并操作的是同一个类型的文件。那么最好就是把分割操作对象和合并操作对象的创建接口进行统一到一个工厂,保证执行分割和合并的是同一个文件类型。
    factory.h

    #pragma once
    
    #include "imp.h"
    
    class IFactory
    {
    public:
            virtual ISplitter* CreateSplitter() = 0;
            virtual IMerger* CreateMerger() = 0;
            virtual ~IFactory(){}
    };
    
    class CBinaryFactory : public IFactory
    {
    public:
            ISplitter* CreateSplitter();
            IMerger* CreateMerger();
    };
    
    class CTxtFactory : public IFactory
    {
    public:
            ISplitter* CreateSplitter();
            IMerger* CreateMerger();
    };
    
    class CPictureFactory : public IFactory
    {
    public:
            ISplitter* CreateSplitter();
            IMerger* CreateMerger();
    };
    

    factory.cpp

    #include "factory.h"
    #include "imp.h"
    
    ISplitter* CBinaryFactory::CreateSplitter()
    {
    	return new BinarySplitter();
    }
    IMerger* CBinaryFactory::CreateMerger()
    {
        return new BinaryMerger();
    }
    
    ISplitter* CTxtFactory::CreateSplitter()
    {
    	return new TxtSplitter();
    }
    IMerger* CTxtFactory::CreateMerger()
    {
        return new TxtMerger();
    }
    
    ISplitter* CPictureFactory::CreateSplitter()
    {
        return new PictureSplitter();
    }
    IMerger* CPictureFactory::CreateMerger()
    {
        return new PictureMerger();
    }
    

    imp.h

    #pragma once
    
    class ISplitter
    {
    public:
    		virtual void split() = 0;
    		virtual ~ISplitter(){}
    };
    
    class BinarySplitter : public ISplitter
    {
    public:
        void split();
    };
    
    class TxtSplitter : public ISplitter
    {
    public:
        void split();
    };
    
    class PictureSplitter : public ISplitter
    {
    public:
        void split();
    };
    
    
    class IMerger
    {
    public:
            virtual void merge() = 0;
            virtual ~IMerger(){}
    };
    class BinaryMerger : public IMerger
    {
    public:
        void merge();
    };
    
    class TxtMerger : public IMerger
    {
    public:
        void merge();
    };
    
    class PictureMerger : public IMerger
    {
    public:
        void merge();
    };
    

    imp.cpp

    #include <iostream>
    #include "imp.h"
    
    using namespace std;
    
    void BinarySplitter::split()
    {
        cout << "split BinarySplitter" << endl;
    }
    
    void TxtSplitter::split()
    {
        cout << "split TxtSplitter" << endl;
    }
    
    void PictureSplitter::split()
    {
        cout << "split PictureISplitter" << endl;
    }
    
    
    void BinaryMerger::merge()
    {
        cout << "merge BinaryMerger" << endl;
    }
    
    void TxtMerger::merge()
    {
        cout << "merge TxtMerger" << endl;
    }
    
    void PictureMerger::merge()
    {
        cout << "merge PictureMerger" << endl;
    }
    

    main.cpp

    #include <cstdio>
    #include <cstdlib>
    #include "factory.h"
    #include "imp.h"
    
    class Fun
    {
        IFactory* m_pFactory;
    public:
        Fun(IFactory* factory)
    	{
    		m_pFactory = factory;
    	}
    	~Fun(){}
        void test()
    	{
            ISplitter *pSplitter = m_pFactory->CreateSplitter();
            pSplitter->split();
            delete pSplitter;
            pSplitter = NULL;
    
            IMerger* pMerger = m_pFactory->CreateMerger();
            pMerger->merge();
            delete pMerger;
            pMerger = NULL;
    	}
    };
    
    int main()
    {
        IFactory* factory = new CPictureFactory();
        Fun form(factory);
        form.test();
    	
        ISplitter *pSplitter = factory->CreateSplitter();
        pSplitter->split();
        delete pSplitter;
        pSplitter = NULL;
    
        IMerger* pMerger = factory->CreateMerger();
        pMerger->merge();
        delete pMerger;
        pMerger = NULL;
    
        return 0;
    }
    
  • 相关阅读:
    智慧光伏能源-园区光伏发电能源管控可视化
    无人值守,智能变电站可视化管控系统
    数字孪生,开启三维智慧园区管理新篇章
    智慧城市大数据运营中心 IOC 之 Web GIS 地图应用
    三维可视化数据中心机房监控管理系统
    打造绿色城市,数字孪生天然气站 3D 可视化
    绿色物流-智慧仓储监控管理 3D 可视化系统
    打造综合性智慧城市之朔州开发区 3D 可视化
    绿色城市之地下综合管廊3D可视化平台
    工业绿色环保发展:风力发电场管理监测可视化系统
  • 原文地址:https://www.cnblogs.com/kuikuitage/p/10807305.html
Copyright © 2011-2022 走看看