zoukankan      html  css  js  c++  java
  • 随手写了几行代码

    看COM的时候随手写了一行代码,写完发现是工厂方法模式。。。

    废话不多说了

    #include "stdafx.h"
    #include <iostream>
    using namespace std;
    
    class InterfaceA
    {
    public:
            InterfaceA();
            virtual ~InterfaceA();
            virtual void Func1() = 0;
            virtual void Func2() = 0; 
    };
    
    InterfaceA::InterfaceA(){}
    InterfaceA::~InterfaceA(){}
    
    
    class ComponetB : public InterfaceA
    {
    public:
            ComponetB();
            virtual ~ComponetB();
            virtual void Func1();
            virtual void Func2(); 
    };
    
    ComponetB::ComponetB(){cout<<"组件B创建"<<endl;}
    ComponetB::~ComponetB(){cout<<"组件B析构"<<endl;}
    void ComponetB::Func1(){cout<<"CompoentB::Func1 is called 
    ";}
    void ComponetB::Func2(){cout<<"ComponetB::Func2 is called 
    ";} 
    
    class ComponetC : public InterfaceA
    {
    public:
            ComponetC();
            virtual ~ComponetC();
            virtual void Func1();
            virtual void Func2();
    };
    ComponetC::ComponetC(){cout<<"组件C创建"<<endl;}
    ComponetC::~ComponetC(){cout<<"组件C析构"<<endl;}
    void ComponetC::Func1(){cout<<"ComponentC::Fucn1 is called 
    ";}
    void ComponetC::Func2(){cout<<"ComponetC::Func2 is called 
    ";}
    
    
    
    class IFactory
    {
    public:
            IFactory();
            virtual ~IFactory();
            virtual InterfaceA* CreateInstance() = 0;       
    protected:
            InterfaceA* m_ptrIA;
    };
    
    IFactory::IFactory() : m_ptrIA(NULL){}
    IFactory::~IFactory(){if(NULL != m_ptrIA) delete m_ptrIA; m_ptrIA = NULL;}
    
    
    
    class FactoryB : public IFactory
    {
    public:
            FactoryB();
            virtual ~FactoryB();
            virtual InterfaceA* CreateInstance();
    };
    
    FactoryB::FactoryB() : IFactory(){}
    FactoryB::~FactoryB(){if(NULL != m_ptrIA) delete m_ptrIA; m_ptrIA = NULL;}
    InterfaceA* FactoryB::CreateInstance(){return (m_ptrIA = new ComponetB());}
    
    
    class FactoryC : public IFactory
    {
    public:
            FactoryC();
            virtual ~FactoryC();
            virtual InterfaceA* CreateInstance();
    };
    
    FactoryC::FactoryC() : IFactory(){}
    FactoryC::~FactoryC() {if(NULL != m_ptrIA) delete m_ptrIA; m_ptrIA = NULL;}
    InterfaceA* FactoryC::CreateInstance(){return (m_ptrIA = new ComponetC());}
    
    
    
     
    
    int _tmain(int argc, _TCHAR* argv[])
    {
            IFactory* pFactory = new FactoryB();
            InterfaceA* pInterface = pFactory->CreateInstance();
            pInterface->Func1();
            cout<<endl;
            pInterface->Func2();
    
            cout<<endl<<endl;
    
            delete pFactory;
    
            pFactory = new FactoryC();
            pInterface = pFactory->CreateInstance();
            pInterface->Func1();
            cout<<endl;
            pInterface->Func2();
    
            delete pFactory;
    
    
            return 0;
    }
  • 相关阅读:
    解决:Google代码achartengine曲线代码报错问题(转)
    操作SQLite数据库
    让服务器iis支持.apk文件下载的设置方法
    怎么在手机上查看sqlite db
    Android 3D滑动菜单完全解析,实现推拉门式的立体特效
    android自动更新程序,安装完以后就什么都没有了,没有出现安装成功的界面的问题
    那些年不错的Android开源项目
    PL/SQL Developer 连接新数据库
    Oracle 连接 Visual Studio 的工具
    利用SQLiteOpenHelper来管理SQLite数据库 (转)
  • 原文地址:https://www.cnblogs.com/cuish/p/3854448.html
Copyright © 2011-2022 走看看