DesignPattern Prototype(大量にコピーしよう)
Sponsored Links
皆さんこんにちは
お元気ですか。私は
本日はDesign PatternのPrototypeについて記載します。
Prototypeとは?
利点
・複雑な動作を行った後に複製を行おうとすると正直、コードが煩雑になる。それらを防ぐ役割を持つ。
・複製するのが簡単になる。一つ作ればコピーするだけで済む
→要はコピーが肝なのですね。
クラス図
継承したプロトタイプを作成、それをmainから操作しています。
(実際にやる場合は別途クラス作って、それを操作する形になるでしょう)
実際のコード
#include <iostream> using namespace std; class PizzaPrototype{ protected: int cheese; public: virtual void setCheese(int x) = 0; virtual int getCheese() = 0; }; class SpicyPizza:public PizzaPrototype{ public: virtual void setCheese(int x){ cheese = x; } SpicyPizza* clone(){ return new SpicyPizza(*this); } int getCheese(){ return cheese; } }; class MeatPizza:public PizzaPrototype{ public: virtual void setCheese(int x){ cheese = x; } MeatPizza* clone(){ return new MeatPizza(*this); } int getCheese(){ return cheese; } }; int main(int argc, char const *argv[]){ SpicyPizza *s_pizza1 = new SpicyPizza; s_pizza1->setCheese(100); cout << "SpicyPizza1 " << s_pizza1->getCheese() << endl; SpicyPizza *s_pizza2 = s_pizza1->clone(); cout << "SpicyPizza2 " << s_pizza1->getCheese() << endl; MeatPizza *m_pizza1 = new MeatPizza; m_pizza1->setCheese(20); cout << "MeatPizza1 " << m_pizza1->getCheese() << endl; MeatPizza *m_pizza2 = m_pizza1->clone(); cout << "MeatPizza2 " << m_pizza1->getCheese() << endl; return 0; }
PizzaPrototypeを継承したMeatPizzaクラスとSpicyPizzaクラスからオブジェクト作ってコピーした時の動作を確認しています。
各クラスのclone()で自分自身のコピーを返すようにしています。