创建型设计模式---原型模式(Prototype)
2014-08-27 14:04
441 查看
Prototype模式用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
(1)当我们的对象类型不是开始就能确定的,而这个类型是在运行期确定的话,
那么我们通过这个类型的对象克隆出一个新的对象比较容易一些
(2)有的时候,我们需要一个对象在某个状态下的副本,此时,我们使用原型模式是最好的选择;
例如:一个对象,经过一段处理之后,其内部的状态发生了变化;这个时候,
我们需要一个这个状态的副本,如果直接new一个新的对象的话,但是它的状态是不对的,
此时,可以使用原型模式,将原来的对象拷贝一个出来,这个对象就和之前的对象是完全一致的了;
(3)当一个类的实例只能有几个不同状态组合中的一种时,
建立相应数目的原型并克隆他们可能比每次用合适的状态手工实例化该类更方便一些
#include <iostream>
#include <string.h>
using namespace std;
class IPrototype
{
public:
virtual ~IPrototype() {}
virtual IPrototype * clone() = 0;
virtual void setData(char *str) = 0;
};
class Prototype : public IPrototype
{
public:
Prototype(int size)
{
len = size;
if (len >= 0)
{
data = new char[len+1];
}
}
Prototype(const Prototype &tmp)
{
len = tmp.len;
if (len >= 0)
{
data = new char[len+1];
}
}
~Prototype()
{
if (NULL != data)
{
delete []data;
data = NULL;
}
}
IPrototype * clone()
{
return (new Prototype(*this));
}
void setData(char *str)
{
strcpy(data, str);
cout << data << endl;
}
private:
char *data;
int len;
};
int main()
{
Prototype prototype(64);
IPrototype *proto = prototype.clone();
proto->setData("123456789");
delete proto;
proto = NULL;
return 0;
}
(1)当我们的对象类型不是开始就能确定的,而这个类型是在运行期确定的话,
那么我们通过这个类型的对象克隆出一个新的对象比较容易一些
(2)有的时候,我们需要一个对象在某个状态下的副本,此时,我们使用原型模式是最好的选择;
例如:一个对象,经过一段处理之后,其内部的状态发生了变化;这个时候,
我们需要一个这个状态的副本,如果直接new一个新的对象的话,但是它的状态是不对的,
此时,可以使用原型模式,将原来的对象拷贝一个出来,这个对象就和之前的对象是完全一致的了;
(3)当一个类的实例只能有几个不同状态组合中的一种时,
建立相应数目的原型并克隆他们可能比每次用合适的状态手工实例化该类更方便一些
#include <iostream>
#include <string.h>
using namespace std;
class IPrototype
{
public:
virtual ~IPrototype() {}
virtual IPrototype * clone() = 0;
virtual void setData(char *str) = 0;
};
class Prototype : public IPrototype
{
public:
Prototype(int size)
{
len = size;
if (len >= 0)
{
data = new char[len+1];
}
}
Prototype(const Prototype &tmp)
{
len = tmp.len;
if (len >= 0)
{
data = new char[len+1];
}
}
~Prototype()
{
if (NULL != data)
{
delete []data;
data = NULL;
}
}
IPrototype * clone()
{
return (new Prototype(*this));
}
void setData(char *str)
{
strcpy(data, str);
cout << data << endl;
}
private:
char *data;
int len;
};
int main()
{
Prototype prototype(64);
IPrototype *proto = prototype.clone();
proto->setData("123456789");
delete proto;
proto = NULL;
return 0;
}
相关文章推荐
- 面向对象设计模式之Prototype原型模式(创建型)
- 设计模式之原型法(ProtoType)----对象创建型模式
- JAVA设计模式(05):创建型-原型模式(Prototype)
- 设计模式05: Prototype 原型模式(创建型模式)
- 跟着实例学习设计模式(7)-原型模式prototype(创建型)
- 设计模式五:Prototype原型模式——对象创建型模式
- PHP设计模式:创建型之原型模式(Prototype)
- 设计模式(五):PROTOTYPE原型模式 -- 创建型模式
- JAVA设计模式(5) —<创建型>原型模式(Prototype)
- C#面向对象设计模式学习笔记(5) - Prototype 原型模式(创建型模式)
- 面向对象设计模式之Prototype原型模式(创建型)
- 设计模式笔记--创建型模式之四--原型prototype
- 设计模式学习总结4 - 创建型4 - Prototype原型模式
- 设计模式学习之原型模式(Prototype,创建型模式)(5)
- C#面向对象设计模式纵横谈(6):Prototype 原型(创建型模式)
- [设计模式-创建型]原型(Prototype)
- 设计模式(四)原型模式Prototype(创建型)
- java语言实现创建型设计模式—原型模式(Prototype)
- 设计模式(四)、PROTOTYPE(原型)---对象创建型模式
- [导入]C#面向对象设计模式纵横谈(6):Prototype 原型模式(创建型模式).zip(9.56 MB)