増補改訂版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
- #include
using 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"
- #include
using 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"
- #include
using 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的なものにしても便利そう。
コメント
コメントを投稿