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;
}
在此先感謝您的時間和精力。
好的,我會修改它 –
第二個問題的代碼目前的作品,你正在尋找獲得反饋意見。一般來說,這些問題對於這個網站來說太過分了,但是你可能會在[CodeReview.SE](http://codereview.stackexchange.com/tour)找到更好的運氣。請記住閱讀[他們的問題要求](http://codereview.stackexchange.com/help/on-topic),因爲它們比本網站更嚴格。 –
你的第一點是正確的。 – jaco0646