随手写了几行代码

 

看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 \n";}
void ComponetB::Func2(){cout<<"ComponetB::Func2 is called \n";} 

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 \n";}
void ComponetC::Func2(){cout<<"ComponetC::Func2 is called \n";}



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;
}
复制代码

posted on   崔好好  阅读(214)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示