増補改訂版Java言語で学ぶデザインパターン入門 結城 浩 第6章 Prototype をC++で実装
自分のお勉強用 : デザパタ 結城本 第6章 Prototype をC++で適当に実装
C++とデザパタのリハビリを目的として。
Flyweightとなんか脳内で混同してしまう。まぁコンセプトは似てるし仕方ない。
Flyweightとなんか脳内で混同してしまう。まぁコンセプトは似てるし仕方ない。
ファイル一覧
- Product.h : インターフェイス
- ProdA.h と ProdA.cpp : 実装
- ProdB.h と ProdB.cpp : 実装
- Manager.h
- prototype_cpp.cpp : メインクラス
実装
Product.h : インターフェイス
#pragma once #includeusing namespace std; class Product { public : virtual ~Product() {} virtual void use(string s) = 0; virtual Product* createClone() = 0; };
ProdA.h
#pragma once #include "Product.h" class ProdA : public Product { public: ProdA(string s):deco_(s) {} virtual void use(string s) override; virtual Product* createClone() override; private: string deco_; };
ProdA.cpp
#pragma once #include "ProdA.h" #includeusing namespace std; void ProdA::use(string s) { cout << deco_ << " : " << s << endl; } Product* ProdA::createClone() { return new ProdA(deco_); }
ProdB.h
#pragma once #include "Product.h" class ProdB : public Product { public: ProdB(string s): deco_(s) {} virtual void use(string s) override; virtual Product* createClone() override; private: string deco_; };
ProdB.cpp
#pragma once #include "ProdB.h" #includeusing namespace std; void ProdB::use(string s) { cout << deco_ << " : " << s << " : " << deco_ << endl; } Product* ProdB::createClone() { return new ProdB(deco_); }
Manager.h
#pragma once #include
prototype_cpp.cpp
#pragma once #include "Manager.h" #include "Product.h" #include "ProdA.h" #include "ProdB.h" int main() { //準備 Manager manager; ProdA proda("AAA"); ProdB prodb("BBBBBBB"); ProdB prodb2("************"); manager.add("type1", &proda); manager.add("type2", &prodb); manager.add("type3", &prodb2); // 利用 Product* p1 = manager.create("type1"); p1->use("p1use"); Product* p2 = manager.create("type2"); p2->use("p2use"); Product* p3 = manager.create("type3"); p3->use("p3use"); }
所感
STLは便利。実用の際はManagerのクラスをFactory的なものにしても便利そう。
コメント
コメントを投稿