组合模式
组合模式UML
组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构。
#pragma once
#include <iostream>
#include <vector>
#include <string>
#include <Windows.h>
using namespace std;
class abstruct_node
{
public:
virtual void add(abstruct_node* node) = 0;
virtual void remove(abstruct_node* node) = 0;
virtual void show() = 0;
};
class H_child_node : public abstruct_node
{
public:
H_child_node(string n) :name(n) { table.clear(); }
virtual void add(abstruct_node* node)
{
if (NULL != node)
table.push_back(node);
}
virtual void remove(abstruct_node* node)
{
vector<abstruct_node*>::iterator iter = table.begin();
for(; iter != table.end(); iter++)
{
if ((*iter) == node)
{
iter = table.erase(iter);
break;
}
}
}
virtual void show()
{
cout << name << endl;
vector<abstruct_node*>::iterator iter = table.begin();
for (; iter != table.end(); iter++)
{
(*iter)->show();
}
}
private:
vector<abstruct_node*> table;
string name;
};
class L_child_node : public abstruct_node
{
public:
L_child_node(string n) :name(n) {}
virtual void add(abstruct_node* node) {}
virtual void remove(abstruct_node* node) {}
virtual void show()
{
cout << name << endl;
}
private:
string name;
};
int main()
{
H_child_node Level_Max("老板");
L_child_node Level_P8("P8级高级专家,大明");
H_child_node Level_P7("P7级高管,萨姆");
Level_Max.add(&Level_P8);
Level_Max.add(&Level_P7);
L_child_node Level_P6("P6级码农,菜狗");
L_child_node Level_P5("P5级码农,菜鸟");
Level_P7.add(&Level_P6);
Level_P7.add(&Level_P5);
Level_Max.show();
cout << "互谅网寒冬,裁员" << endl;
Level_P7.remove(&Level_P5);
Level_Max.remove(&Level_P8);
Level_Max.show();
system("pause");
return 1;
}
组合模式解耦了客户程序与复杂元素内部结构,从而使客户程序可以像处理简单元素一样来处理复杂元素。 如果你想要创建层次结构,并可以在其中以相同的方式对待所有元素,那么组合模式就是最理想的选择
|