博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Simple Factory 模式

Posted on 2010-08-03 12:53  Zhiyett  阅读(157)  评论(0编辑  收藏  举报

image

class IMusicBox
{
public:
    virtual void Play() = 0;
}

class PianoBox: public IMusicBox
{
public:
    virtual void Play(){printf("Play PianoBox");}
}

class ViolinBox: public IMusicBox
{
public:
    virtual void Play(){printf("Play ViolinBox");}
}

class MusicBoxFactory
{
public:
    static IMusicBox* CreateMusicBox(string name)
    {
        if(name == "PianoBox")
        {
            return new PianoBox;
        }
        else if(name == "ViolinBox")
        {
            return new ViolinBox;
        }
        return NULL;
    }
}

class MusicBoxDemo
{
public:
    void Main()
    {
        IMusicBox* pBox = MusicBoxFactory::CreateMusicBox("PianoBox");
        if(NULL == pBox)
        {return;}
        pBox->Play();

        SAFE_RELEASE(pBox);
    }
}

 


  image 

Client只面对SimpleFactory, 依赖于ProductInterface。产品的具体实现与客户隔开。