2015-10-12 111 views
2

我正在學習原型設計模式,我對這種模式的主要思想以及何時使用它有點困惑。 你能幫我明確一些要點嗎?何時使用原型設計模式

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

好的,我會修改它 –

+1

第二個問題的代碼目前的作品,你正在尋找獲得反饋意見。一般來說,這些問題對於這個網站來說太過分了,但是你可能會在[CodeReview.SE](http://codereview.stackexchange.com/tour)找到更好的運氣。請記住閱讀[他們的問題要求](http://codereview.stackexchange.com/help/on-topic),因爲它們比本網站更嚴格。 –

+1

你的第一點是正確的。 – jaco0646

回答

0
  1. 經過我的調查,我想介紹一些真實的原型設計模式的實例。 可以說我是一家銀行的客戶。並要在那裏開立一個帳戶,我需要提供一些文件。

ID

社會保險單證

這個列表可以安靜巨大。要創建帳戶,我提供了這些數據。所以當經過一段時間後我需要一些新的賬戶我不需要需要提供所有這些信息。銀行可以克隆數據。 所以原型設計模式的主要目標是節約創建新對象的成本。因此,Prototype模式的主要思想不是節省內存分配的努力,而是創建對象,因爲它可能是數據驅動的或計算的結果,或者持有一些階段信息。

  • 所呈現的代碼可被視爲原型設計模式實現的一個例子,作爲最重要的部分是狀態的複製和這裏使用複製CTOR有意義。