设计模式之原型模式与实例

意图

用原型实例指定穿件对象的种类,并通过拷贝这些原型创建新对象

参与者

1 抽象原型(Prototype) : 声明一个克隆自身的接口
2 具体原型(ConcretePrototype):实现一个克隆自身的操作
3 客户(Client): 让一个原型克隆自身从而穿件一个新的对象

适用性

当一个系统应该独立于它的产品创建、构成和表示时,要使用原型模式
当要实例化的类实在运动时刻指定时,比如动态装载
为了避免创建一个与产品层次平行的工厂类层次时
当一个类的实例只能有几个不同状态组合中的一种时

实例

class CComputer
{
public:
	virtual CComputer* clone() = 0;
	virtual void displayInfo() = 0;
};

class CASUSComputer : public  CComputer
{
public:
	CASUSComputer() 
	{
		m_strCPU = "ASUS CPU";
		m_strHost = "ASUS Host";
		m_Monitor = "ASUS Monitor";
	}

	CASUSComputer(const CASUSComputer &item)
	{
		this->m_strCPU = item.m_strCPU;
		this->m_strHost = item.m_strHost;
		this->m_Monitor = item.m_Monitor;
	}

	CComputer* clone()
	{
		return new CASUSComputer(*this);
	}

	void displayInfo()
	{
		cout << m_strCPU.c_str() << endl;
		cout << m_strHost.c_str() << endl;
		cout << m_Monitor.c_str() << endl;
	}
private:
	string m_strCPU;
	string m_strHost;
	string m_Monitor;
};

int main(int argc, char* argv[])
{
	cout << "strat!!"<<endl;
	system("pause");
	CComputer* pCom = new CASUSComputer();
	cout << "cerate a CASUSComputer onject!!" << endl;
	system("pause");

	CComputer* pComCopy = pCom->clone();
	pComCopy->displayInfo();
	system("pause");
	return 0;
}

总结

其实原型模式比较简单,也容易理解,每次调用clone函数就能获得一个拷贝对象,这个拷贝时深拷贝。这对于动态加载的对象时很有用的,如果原对象状态每次都在变动,那么每次调用clone函数获取的对象就是最新的状态的对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值