原型模式简单实现

1.相关链接
设计模式目录
2.类图
原型模式
3.白话说明
原型模式:就是用拷贝的方式创建一个新的对象。
模式价值:这个不太好说,我也没找到一个合适的例子来解释他的价值,如果真的有合适的需求这样做,那么你就知道他的价值了。
现在你只需要知道拷贝一个新对象和创建一个新对象的差别就行了。(现在是学这个模式的第一阶段,知道这个模式的特点就行了)
补充:后来看了《设计模式》那本书,明白了该模式的意图。就是减少类的数量,通过改变某个成员变量的值,来承载一个维度的变化。
说白了,就是没有定义新类的情况下,用成员变量的某个值做变化来承载变化,也是使结构清晰的一种手段。比如某个类性在某些情况下后有很多中变化,而这些变化仅仅是一个成员变量的值不同而已。而这个值的变化范围有非常大,这时候我们没有必要用继承来承载这些变化。用组合及可以了,克隆一个对象,然后为该对象设置不同成员变量。由该变量承载变化。
其实这种设计等同于一个桥接的效果,给该对象去桥接不同的对象。而不是通过继承来增加类。
说到这好像是,拷贝+桥接=原型模式。这个桥接通常会更小,桥接的对象有可能是一个简单类型(int等)。而桥接模式的桥接对象一般是复杂类型。
4.代码

#include <iostream>
using namespace std;
#include <string>

// 抽象层
class Prototype{
public:
	int data;
	virtual Prototype* Clone()=0;
};
class Client{
public:
	Prototype* prototype;
	void Operation(){
		//模式要点:客户端通过克隆的方式来获取对象
		Prototype* p_a = prototype->Clone();
		cout<<"p_a:data"<<p_a->data<<"\n";
		Prototype* p_b = prototype->Clone();
		cout<<"p_a:data"<<p_b->data<<"\n";
	}
};
//具体层
class ConcretePrototype1: public Prototype{
public:
	ConcretePrototype1(){
		data = 5;
	}
	virtual Prototype* Clone(){
		ConcretePrototype1* o = new ConcretePrototype1();
		o->data = data;
		return o;
	}
};
class ConcretePrototype2: public Prototype{
public:
	ConcretePrototype2(){
		data = 6;
	}
	virtual Prototype* Clone(){
		ConcretePrototype2* o = new ConcretePrototype2();
		return o;
	}
};
//客户端调用
int main()
{
	cout<<"原型模式演示\n";
	Client client;
	ConcretePrototype1* p1 = new ConcretePrototype1();
	client.prototype = p1;
	client.Operation();
	ConcretePrototype2* p2 = new ConcretePrototype2();
	client.prototype = p2;
	client.Operation();

	//看代码不用考虑以下内容
	int cin_a;
	cin>>cin_a;
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值