我正在学习原型设计模式,我对这个模式的主要思想以及何时使用它有点困惑。 能帮我解决一些问题吗?
1)如果我从这个discussion出发,Prototype模式的主要思想是节省创建新对象的成本(注意这并不意味着内存分配)。有时创建对象需要从某个地方请求数据(例如数据库请求)或一些大的计算,这可能是耗时的,而不是创建新对象,克隆它更有效。所以Prototype模式的主要思想不是节省内存分配的工作,而是创建你的对象,因为它可能是数据驱动的或计算的结果。 如果我错了,请纠正我。
2)这段代码是原型设计模式c ++实现的好例子吗?
// Prototype
class Prototype
{
public:
virtual ~Prototype() { }
virtual Prototype* clone() const = 0;
};
// Concrete prototype
class ConcretePrototype : public Prototype
{
private:
int m_x;
public:
ConcretePrototype(int x) : m_x(x) { }
ConcretePrototype(const ConcretePrototype& p) : m_x(p.m_x) { }
virtual Prototype* clone() const
{
return new ConcretePrototype(*this);
}
void setX(int x) { m_x = x; }
int getX() const { return m_x; }
void printX() const { std::cout << "Value :" << m_x << std::endl; }
};
// Client code
void prototype_test()
{
Prototype* prototype = new ConcretePrototype(1000);
for (int i = 1; i < 10; i++) {
ConcretePrototype* tempotype =
dynamic_cast<ConcretePrototype*>(prototype->clone());
tempotype->setX(tempotype->getX() * i);
tempotype->printX();
delete tempotype;
}
delete prototype;
}
提前感谢您的时间和精力。
答案 0 :(得分:2)
ID
社会保险文件
这个列表可以很安静。要创建帐户,我已提供此数据。因此,经过一段时间后,我需要一些新帐户不要需要提供所有这些信息。银行可以克隆数据。 因此原型设计模式的主要目标是节省创建新Object的成本。因此,Prototype模式的主要思想不是节省内存分配的工作,而是创建对象,因为它可能是数据驱动或计算结果,或者保存一些阶段信息。