何时使用Prototype设计模式

时间:2015-10-12 14:29:49

标签: design-patterns prototype-pattern

我正在学习原型设计模式,我对这个模式的主要思想以及何时使用它有点困惑。 能帮我解决一些问题吗?

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;
}

提前感谢您的时间和精力。

1 个答案:

答案 0 :(得分:2)

  1. 在我的调查之后,我想介绍原型设计模式的一些真实的实例。 可以说我是银行的客户。要在那里开设账户,我需要提供一些文件。
  2.   

    ID

         

    社会保险文件

    这个列表可以很安静。要创建帐户,我已提供此数据。因此,经过一段时间后,我需要一些新帐户不要需要提供所有这些信息。银行可以克隆数据。 因此原型设计模式的主要目标是节省创建新Object的成本。因此,Prototype模式的主要思想不是节省内存分配的工作,而是创建对象,因为它可能是数据驱动或计算结果,或者保存一些阶段信息。

    1. 所呈现的代码可以被视为原型设计模式实现的一个例子,因为最重要的部分是复制状态并使用复制CTOR在这里有意义。