组合模式 详解

组合模式

简介: 将对象组合成树形结构以表示"部分-整体"的层次结构, 使得用户对单个对象和组合对象的使用具有一致性.

组合模式也是一种结构类型的模式.看简介比较容易理解, 毕竟树形结构是数据结构必修的, 我们仍然举个例子方便理解

以公司的组织架构为例
公司 - 部门 - 员工

其中员工是叶子节点, 公司和部门是树枝节点
代码

cpp 复制代码
class Node
{
private:
	string name;
public:
	Node(string s) : name(s) {};
	string get_name() { return name; };
	virtual void display() = 0;
	virtual void add_node(Node* n) = 0;
};


class Leaf : public Node
{
public:
	Leaf(string s) : Node(s) {};
	void add_node(Node* n) override
	{
		cout << "leaf node can not add node" << endl;
	}
	void display()
	{
		cout << get_name() << endl;
	}
};


class Branch : public Node
{
private:
	vector<Node*> nodes;
public:
	Branch(string s) : Node(s) {};
	void add_node(Node* n) override
	{
		nodes.push_back(n);
	}
	void display() override
	{
		cout << get_name() << endl;
		for (Node* m : nodes)
			m->display();
	}
};


int main()
{
	Node* b = new Branch("公司");
	Node* b1 = new Branch("__研发部");
	Node* b2 = new Branch("__营销部");
	Node* b3 = new Leaf("____小明");
	Node* b4 = new Leaf("____小强");
	Node* b5 = new Leaf("____小刚");
	b->add_node(b1);
	b->add_node(b2);
	b1->add_node(b3);
	b2->add_node(b4);
	b2->add_node(b5);

	b->display();
	return 0;
}

执行结果

相关推荐
茉莉玫瑰花茶8 分钟前
C++扩展 --- 并发支持库(补充3)
开发语言·c++
半桔26 分钟前
【网络编程】TCP 粘包处理:手动序列化反序列化与报头封装的完整方案
linux·网络·c++·网络协议·tcp/ip
GUIQU.3 小时前
【QT】嵌入式开发:从零开始,让硬件“活”起来的魔法之旅
java·数据库·c++·qt
西阳未落6 小时前
C++基础(21)——内存管理
开发语言·c++·面试
超级大福宝7 小时前
使用 LLVM 16.0.4 编译 MiBench 中的 patricia遇到的 rpc 库问题
c语言·c++
wangjialelele7 小时前
Linux中的线程
java·linux·jvm·c++
hsjkdhs8 小时前
万字详解C++之构造函数析构函数
开发语言·c++
SELSL9 小时前
SQLite3的API调用实战例子
linux·数据库·c++·sqlite3·sqlite实战
什么半岛铁盒10 小时前
C++项目:仿muduo库高并发服务器-------Channel模块实现
linux·服务器·数据库·c++·mysql·ubuntu
闭着眼睛学算法10 小时前
【华为OD机考正在更新】2025年双机位A卷真题【完全原创题解 | 详细考点分类 | 不断更新题目 | 六种主流语言Py+Java+Cpp+C+Js+Go】
java·c语言·javascript·c++·python·算法·华为od