プロトタイプデザインパターンをいつ使用すべきかを理解しようとしています。これが私が理解しているプロトタイプの例です:
class Prototype
{
public:
virtual Prototype* clone() = 0;
...
};
class ConcretePrototype : public Prototype
{
public:
Prototype* clone() override { ... }
};
// Usage:
ConcretePrototype proto;
auto protPtr = proto.clone();
質問はどこにありますか:なぜこれがより良いのか:
class Obj
{
public:
Obj();
Obj(const Obj&);
Obj& operator = (const Obj& other);
};
Obj o;
Obj o2 = o;
では、実際にPrototypeを使用する必要があるのはいつですか?
コピーコンストラクターは言語の要素です。
プロトタイプは、既存のインスタンスに基づいて(ポリモーフィック)オブジェクトを生成するために使用されるデザインパターンです。
があるかもしれない時にプロトタイプが使用されている間、コピーコンストラクタは、オブジェクトの正確なインスタンスを知る際に使用されることを意図して、後者を実装するために、元を使用することは困難であろう任意のいくつかのインターフェイスの可能な実装とあなただけの新しいオブジェクトを取得したいですいくつかの奇妙なキャストとチェックの方法に頼ることなく、まったく同じ実装の。
インターフェイスI
と実装A
、およびがあると仮定しましょうB
。ある時点で、オブジェクトのi
実装が与えられますI
。おそらく、それを変更したくないでしょう。代わりに、新しいインスタンスを取得して、それにいくつかの変更を導入することをお勧めします。正確なクラスがわからない場合、どうすればそれを達成できi
ますか?プロトタイプパターンは、その問題に対する1つの解決策ですI* i2 = i.clone();
。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加