首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >何时使用原型设计模式

何时使用原型设计模式
EN

Stack Overflow用户
提问于 2015-10-12 14:29:48
回答 1查看 2.4K关注 0票数 2

我正在学习原型设计模式,我对这个模式的主要思想以及何时使用它感到有点困惑。你能帮我澄清几点吗?

1)如果从这个discussion中得到正确的结果,原型模式的主要思想是节省创建新对象的成本(注意,这并不意味着内存分配)。有时,要创建对象,您需要从某个地方(例如DB请求)或一些大型计算中请求数据,这可能很费时,因此,与创建新对象相比,克隆它更有效。因此,原型模式的主要思想不是节省内存分配,而是创建对象,因为它可能是数据驱动的,也可能是计算的结果。如果我错了,请纠正我。

( 2)这个代码是原型设计模式c++实现的好例子吗?

代码语言:javascript
复制
// 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;
}

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-21 20:11:12

  1. 经过我的调查,我想介绍一些真实的实例,为原型设计模式。让我说我是银行的客户。为了在那里开户,我需要提供一些文件。

ID 社会保险文件

这张单子可以很大很安静。为了创建帐户,我提供了这些数据。因此,当我需要一些新的帐户时,不需要提供所有这些信息。银行可以复制数据。因此,原型设计模式的主要目标是节省创建新对象的成本。因此,原型模式的主要思想不是节省内存分配,而是创建对象,因为它可能是数据驱动的,或者是计算的结果,或者保存了一些阶段信息。

  1. 给出的代码可以作为原型设计模式实现的一个例子,因为最重要的部分是复制状态和使用复制器在这里是有意义的。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33083700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档