-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathComposite.cpp
More file actions
92 lines (78 loc) · 2.29 KB
/
Copy pathComposite.cpp
File metadata and controls
92 lines (78 loc) · 2.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include<iostream>
#include<vector>
using namespace std;
/*******************************************************
* Compositeパターン
* 1つのインターフェイスの様々なインスタンスを
* 1つのインスタンスであるかのように扱えるのが特徴
* LMのElementGroupとElementの関係
*/
/*******************************************************/
/*******************************************************/
// インターフェイス
/*******************************************************/
class IComponent
{
public:
virtual void Something() = 0;
};
/*******************************************************/
// 普通のコンポーネント1
/*******************************************************/
class ComponentString: public IComponent
{
public:
void Something() override
{
cout << "ComponentString" << endl;
}
};
/*******************************************************/
// 普通のコンポーネント2
/*******************************************************/
class ComponentBarcode: public IComponent
{
public:
void Something() override
{
cout << "ComponentBarcode" << endl;
}
};
/*******************************************************/
// コンポーネントを束ねるインスタンス且つ、自分も1つのインスタンスとして
// 認識させる。(Compositeパターン)
/*******************************************************/
class ComponentGroup: public IComponent
{
public:
void Something() override
{
cout << "ComponentGroup" << endl;
for(IComponent* Component : ComponentList)
{
Component->Something();
}
}
void AddComponent(IComponent* component)
{
ComponentList.push_back(component);
}
void RemoveComponent()
{
ComponentList.pop_back();
}
private:
// 任意の要素の操作するなら、VectorからListに変更する。
vector<IComponent*> ComponentList;
};
/*******************************************************/
// プログラム
/*******************************************************/
int main()
{
auto components = new ComponentGroup();
components->AddComponent(new ComponentString());
components->AddComponent(new ComponentBarcode());
components->Something();
return 0;
}