组合模式(C++)

这篇具有很好参考价值的文章主要介绍了组合模式(C++)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

定义

将对象组合成树形结构以表示部分-整体’的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性(稳定)。

应用场景

  • 在软件在某些情况下,客户代码过多地依赖于对象容器复杂的内部实现结构,对象容器内部实现结构(而非抽象接口)的变化将引起客户代码的频繁变化,带来了代码的维护性、扩展性等弊端。
  • 如何将“客户代码与复杂的对象容器结构”解耦?让对象容器自己来实现自身的复杂结构,从而使得客户代码就像处理简单对象-样来处理复杂的对象容器?

结构

组合模式(C++),设计模式,组合模式,c++

代码示例

//Composite.h
/****************************************************/
#ifndef COMPOSITE_H
#define COMPOSITE_H
#include <iostream>
#include <list>
 
using namespace std;
 
// 抽象类-节点
class Node
{
public:
	// 构造函数
	explicit Node(string name) :m_name(name) {};
 
	// 析构函数
	virtual ~Node() {};
 
	// 添加
	virtual void add(Node *node) {};
 
	// 删除
	virtual void remove(Node *node) {};
 
	// 显示
	virtual void show(int space) {
		for (int i = 0; i < space; i++) {
			cout << "  ";
		}
		cout << m_name << endl;
	}
 
protected:
	string m_name;                                       // 名字
};
 
// 具体类-Word文件
class WordFile :public Node
{
public:
	// 构造函数
	explicit WordFile(string name) :Node(name) {};
 
	// 析构函数
	virtual ~WordFile() {};
 
};
 
// 具体类-文件夹
class Folder :public Node
{
public:
	// 构造函数
	explicit Folder(string name) :Node(name) {};
 
	// 析构函数
	virtual ~Folder() {
		nodeList.clear();
	}
 
	// 添加
	virtual void add(Node *node) {
		nodeList.emplace_back(node);
	}
 
	// 删除
	virtual void remove(Node *node) {
		nodeList.remove(node);
	}
 
	// 显示
	virtual void show(int space) {
		Node::show(space);
		space++;
		for (auto node : nodeList) {
			node->show(space);
		}
	}
 
private:
	list<Node*> nodeList;                                // 节点列表
};


#endif
//test.cpp
/****************************************************/
#include "Composite.h"
 
int main()
{
	Node *f0 = new Folder("我的文件夹");
	// 文件夹1中放入Word2和Word3,并将文件夹1放入我的文件夹
	Node *f1 = new Folder("文件夹1");
	Node *w2 = new WordFile("Word2");
	Node *w3 = new WordFile("Word3");
	f1->add(w2);
	f1->add(w3);
	f0->add(f1);
	// 将Word1放入我的文件夹
	Node *w1 = new WordFile("Word1");
	f0->add(w1);
	// 显示我的文件夹中的内容
	f0->show(0);
	// 删除文件夹1中的Word2文件,再次显示我的文件夹中的内容
	f1->remove(w2);
	f0->show(0);
	// 删除指针并置空
	delete f0, f1, w1, w2, w3;
	f0 = nullptr;
	f1 = nullptr;
	w1 = nullptr;
	w2 = nullptr;
	w3 = nullptr;
	
	return 0;
}

运行结果
组合模式(C++),设计模式,组合模式,c++文章来源地址https://www.toymoban.com/news/detail-634391.html

要点总结

  • Composite模式采用树形结构来实现普遍存在的对象容器,从而将“一对多”的关系转化为“一对一”的关系,使得客户代码可以一致地(复用)处理对象和对象容器,无需关心处理的是单个的对象,还是组合的对象容器。
  • 将“客户代码与复杂的对象容器结构”解耦是Composite的核心思想,解耦之后,客户代码将与纯粹的抽象接口一而非 对象容器的内部实现结构一发生依赖, 从而更能“应对变化”。
  • Composite模式在具体实现中,可以让父对象中的子对象反向追溯;如果父对象有频繁的遍历需求,可使用缓存技巧来改善效率。

到了这里,关于组合模式(C++)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 设计模式:组合模式

    组合模式是一种结构型设计模式,用于将对象组织成树形结构,以表示“部分-整体”的层次结构。组合模式使得客户端可以统一地处理单个对象和组合对象,而不需要区分它们之间的差异。 在组合模式中,有两种主要类型的对象:叶节点和组合节点。叶节点表示树结构中的

    2024年02月07日
    浏览(59)
  • 设计模式--组合模式

    某日,小明公司最近接到一个办公管理系统的项目,并且在每个城市都有分部。这属于是很常见的OA系统,只要前期将需求分析完善好,中后期开发维护是不难的。 然而,总部公司使用后觉得很OK,想要其他城市的分公司也执行使用。但是现在的问题是,其他分公司的部门和

    2024年01月21日
    浏览(58)
  • 结构型设计模式之组合模式【设计模式系列】

    C++技能系列 Linux通信架构系列 C++高性能优化编程系列 深入理解软件架构设计系列 高级C++并发线程编程 设计模式系列 期待你的关注哦!!! 现在的一切都是为将来的梦想编织翅膀,让梦想在现实中展翅高飞。 Now everything is for the future of dream weaving wings, let the dream fly in reali

    2024年02月15日
    浏览(46)
  • 设计模式浅析(十) ·设计模式之迭代器&组合模式

    日常叨逼叨 java设计模式浅析,如果觉得对你有帮助,记得一键三连,谢谢各位观众老爷😁😁 案例 有两家门店,门店A呢只提供早餐,门店B呢只提供午餐,有一天这两家店铺想要进行合并,一起做大做强,再创辉煌。 合并后呢,对于菜单的定制存在了一定的问题: 门店A的

    2024年04月11日
    浏览(47)
  • Java设计模式-组合模式

    在软件设计中,设计模式是一种被广泛接受和应用的经验总结,旨在解决常见问题并提供可复用的解决方案。 组合模式是一种结构型设计模式,它允许将对象组合成树形结构以表示“部分-整体”的层次结构。这种模式能够使客户端以一致的方式处理单个对象和对象集合,将

    2024年02月06日
    浏览(40)
  • 【23种设计模式】组合模式【⭐】

    个人主页 :金鳞踏雨 个人简介 :大家好,我是 金鳞 ,一个初出茅庐的Java小白 目前状况 :22届普通本科毕业生,几经波折了,现在任职于一家国内大型知名日化公司,从事Java开发工作 我的博客 :这里是CSDN,是我学习技术,总结知识的地方。希望和各位大佬交流,共同进

    2024年02月09日
    浏览(43)
  • 设计模式之组合模式笔记

    记录下学习设计模式-组合模式的写法。JDK使用版本为1.8版本。 意图 :将对象组合成树型结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。 结构 : 其中: Component为组合中的对象声明接口;在适当情况下实现所有类共有接口的默认

    2024年02月11日
    浏览(39)
  • 设计模式-组合模式(Composite)

    组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树状结构以表示“整体-部分”的层次结构。组合模式使得客户端可以统一处理单个对象和对象组合,而不需要区分它们。 在本篇博客中,我们将详细介绍组合模式的概念,并提供一个简单的Java代码示

    2024年02月09日
    浏览(48)
  • 设计模式详解(十一)——组合模式

    组合模式定义 组合模式(Composite Pattern)是一种结构型设计模式,又叫部分整体模式,它将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。

    2024年02月22日
    浏览(39)
  • 设计模式详解-组合模式(整体部分模式)

    类型:结构型模式 特点:依据树形结构来组合对象,用来表示部分以及整体层次 作用:模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦,使用户对单个对象和组合对象的使用具有一致性。

    2024年02月12日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包