意图:用原型示例指定创建对象的种类,通过拷贝这些原型创建新的对象
适用性:
当实例化的类是在运行时指定时
为了避免创建一个与产品类平行的工厂类
当一个类的示例只能有几个不同状态组合中的一种时
示例代码:
#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(); }