设计模式学习-Prototype(原型)

意图:用原型示例指定创建对象的种类,通过拷贝这些原型创建新的对象

适用性:

当实例化的类是在运行时指定时

为了避免创建一个与产品类平行的工厂类

当一个类的示例只能有几个不同状态组合中的一种时

示例图:

image

示例代码:

#pragma once

//孙悟空一变二二变四…

class CMonkeyKing
{
public:
    CMonkeyKing(int i);
public:
    ~CMonkeyKing(void);
    public:
    void Display()
    {
        if(m_i==0)
        {
            _tprintf(_T("Stone monkey/n"));
        }   
        if(m_i ==1)
        {
        _tprintf(_T("qitiandasheng/n"));
        }
        else
        {
            _tprintf(_T("other status/n"));
        }
    }
    public:
    CMonkeyKing* Clone()
    {
        return new CMonkeyKing(*this);
    }
    private:
    int m_i;
};

CMonkeyKing** kings = new CMonkeyKing*[100];
    CMonkeyKing stonKing(0);
    CMonkeyKing qitianKing(1);
    CMonkeyKing otherKin(-1);
    for(int i=0;i<100;i++)
    {
        if(i%3==0)
        {
            kings[i] = stonKing.Clone();
        }
        else if(i%3==1)
        {
            kings[i] = qitianKing.Clone();
        }
        else
        {
            kings[i] = otherKin.Clone();
        }
    }
    //CMonkeyKing* pTemp = *kings;
    for(int j=0;j<100;j++)
    {
        kings[j]->Display();
    }

posted @ 2011-05-14 11:27  Yarkin  阅读(123)  评论(0编辑  收藏  举报