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