博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学以致用设计模式 之 “组合模式”
阅读量:1984 次
发布时间:2019-04-27

本文共 1615 字,大约阅读时间需要 5 分钟。

在这里插入图片描述

练完FTP那个项目之后感觉我整个人都变了,以前我比较倾向于故事和代码实现,现在发现我只想看:模式定义、适用场景、优劣势,这些东西以前我都是一笔带过的。。。

学设计模式,我觉得,知道干嘛用的,自然就能实现出来,要是代码写不出来那不应该来看设计模式,应该去看C++ Primer Plus哈哈哈。

文章目录

我们来作一棵文件管理树

首先呢,我之所以一直不碰组合模式,是因为它真的庞大,比中介者模式还要庞大,因为它和树挂钩了。

刚弄完FTP,那我们来看一下文件管理的东西:

首先,需要一个根目录,也就是树根;根目录下有各级子目录,也就是各级树枝;各级子目录下呢,又有自己的文件,这就是树叶了。

我们可以从根目录出发,找到任一级目录,也可以找到任一级目录下的任一个文件,这就是从树根开始,沿着路径找到指定树枝,再找到树叶。

那么,要怎么把这么庞大的一个文件管理系统变现呢?我采用的是偷懒的方式,用事务数据库来处理,进行的是数据的“虚假管理”,如果要用代码来管理,那就是“组合模式”的事情了。

你也可以想象成一棵树,树的节点为类节点,但是这棵树,要实现节点插入、节点删除、节点移动、节点查询、节点遍历查询等功能,但凡有点眼力见的人就该知道这些节点的类型需要保持一致性。这点和“备忘录模式”倒是很像,==备忘录是维护一条数组,组合是维护一棵树。==如果记不住就这样记。

云里雾里,云里雾里!来看类图:

图:组合模式(安全模式)

在这里插入图片描述

这是组合模式的安全模式,将实现全部放在了子类上。

当然,另一种模式不是“不安全模式”,是“透明模式”噢

图:组合模式(透明模式)

在这里插入图片描述

这里需要注意的是,设置子节点,绝不是设置一个子节点,也不是设置俩子节点,而是将子节点信息存在ArrayList中。也不要嫌麻烦,树就是这样的。

只可意会的部分代码

下面的代码,意会就好啦。

class Component{
string info;public: virtual string getInfo() = 0;}class Composite{
list
Lcomp; Component* parent; int flag;public: Composite(){
Lcomp = new list
; flag = 0; } void setInfo(strint info){
this->info = info;} string getInfo(){
return this->info;} void addCorp(Component* comp){
Lcomp->pushback(comp);} void removeCorp(Component* comp){
Lcomp->remove(comp);} void setParent(Component* p){
this->parent = Component;} Component* getParent(){
if(parent) return parent; else return NULL; } Compontent* getChild(){
return Lcomp[flag]; } void getallChild(Compontent* root){
//比较麻烦的就是遍历整棵树了 while((c = root->getChild())!=NULL){
if(c is leaf){
c->disomething(); } else{
getallChild(c); } } }}

使用场景

场景很明确了,要用到树结构的地方,就可以考虑一下组合模式的思想:高层统一,层次分明。

转载地址:http://rrkvf.baihongyu.com/

你可能感兴趣的文章
python 多进程之进程池的操作
查看>>
flask学习之 pipenv 虚拟环境配置 在配置中出现错误“cmd“不是内部或外部命令,也不是可运行的程序或批处理文件””的解决方案
查看>>
flask入门学习之第一个程序及装饰器回顾
查看>>
flask整理之 flask程序中的debug模式
查看>>
如何和大妈解释区块链,让他们理解区块链
查看>>
比特币要出现夭折?或许会出现转折
查看>>
比特币,山寨币,到底谁占有主导地位
查看>>
比特币,父母这一辈能接受吗?
查看>>
解释区块链钱包的意思
查看>>
让老百姓知道什么是比特币,只需要10分钟
查看>>
为什么要反对比特币,这不代表是空气币
查看>>
5G技术如何运用在数字资产方面
查看>>
区块链技术运用最广泛的还是保险
查看>>
新冠疫情影响了经济,却带动了区块链
查看>>
我们提出了DeFi项目如何成为聚合器,有两种路径
查看>>
SnapEx的新感觉,对新手很友好
查看>>
区块链有哪些潜在风险?
查看>>
聚合器运用在什么地方最合适
查看>>
区块链可以解决供应链的问题,包括食品方面
查看>>
首个聚合器怎么产生的,并运用领域在什么
查看>>