19.组合模式(Composite)

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

意图:将对象组成树状结构以表示“部分-整体”的层次结构,使得Client对单个对象和组合对象的使用具有一致性。

上下文:在树型结构的问题中,Client必须以不同的方式处理单个对象和组合对象。能否提供一种封装,统一简单元素和复杂元素的概念,让对象容器自己来实现自身的复杂结构,让Client可以像处理简单元素一样来处理复杂元素,从而使Client与复杂元素的内部结构解耦?

UML

19.组合模式(Composite),设计模式,组合模式

Component:为Composite中的对象声明接口;在适当情况下,实现所有类公共接口的默认行为;声明一个接口,用于访问和管理Component的子部件;在递归结构中定义一个接口,用于访问一个父部件,并在适当的情况下实现它。
Leaf:在Composite中表示叶子对象。
Composite:存储子部件,并定义有子部件的那些部件的行为。
Client:通过Component接口操作Composite的对象。

19.组合模式(Composite),设计模式,组合模式文章来源地址https://www.toymoban.com/news/detail-731304.html

代码:

#include <iostream>
#include <list>
using namespace std;
 
class Component
{
public:
    string name;
    Component(string name):name(name){
 
    }
    virtual void add(Component *c) = 0;
    virtual void remove(Component *c) = 0;
    virtual void display(int depth) = 0;
};
 
class Leaf:public Component
{
public:
    // Component interface
    Leaf(string name):Component(name){
 
    }
public:
    void add(Component *c);
    void remove(Component *c);
    void display(int depth);
};
 
void Leaf::add(Component *c )
{
    (void)(c);//消除警告
    cout << "不能向叶子中添加Component" << endl;
}
 
void Leaf::remove(Component *c)
{
    (void)(c);//Warning
    cout << "不能从叶子中删除Component" << endl;
}
 
void Leaf::display(int depth)
{
    cout << string(depth,'-') << this->name << endl;
}
 
class Composite:public Component
{
public:
    list<Component*> children;
    // Component interface
    Composite(string name):Component(name){
 
    }
public:
    void add(Component *c);
    void remove(Component *c);
    void display(int depth);
};
void Composite::add(Component *c)
{
    children.push_back(c);
}
 
void Composite::remove(Component *c)
{
    children.remove(c);
}
 
void Composite::display(int depth)
{
    cout << string(depth,'-') << this->name << endl;
    list<Component*>::iterator it;
    for(it = children.begin();it != children.end();it++){
        Component *c = *it;
        c->display(depth + 2);
    }
}
int main()
{
    Composite *root = new Composite("树干");
    root->add(new Leaf("树叶1"));
    root->add(new Leaf("树叶2"));
 
    Composite *c1 = new Composite("树枝1");
    c1->add(new Leaf("树叶1-1"));
    c1->add(new Leaf("树叶1-2"));
    root->add(c1);
 
    Composite *c1_1 = new Composite("树枝1-1");
    c1_1->add(new Leaf("树叶1-1-1"));
    c1_1->add(new Leaf("树叶1-1-2"));
    c1->add(c1_1);
    root->add(new Leaf("树叶3"));
    root->display(1);
 
    return 0;
}

结果

-树干
---树叶1
---树叶2
---树枝1
-----树叶1-1
-----树叶1-2
-----树枝1-1
-------树叶1-1-1
-------树叶1-1-2
---树叶3

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

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

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

相关文章

  • Java设计模式—组合模式(Composite Pattern)

            组合模式(Composite),将对象组合成树形结构以表示\\\'部分-整体\\\'的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 MenuComponent  抽象类:定义了菜单组件的基本行为,包括打印名称和管理子元素的方法。 Menu  类:表示菜单,可以包含其他

    2024年04月15日
    浏览(47)
  • 【设计模式——学习笔记】23种设计模式——组合模式Composite(原理讲解+应用场景介绍+案例介绍+Java代码实现)

    编写程序展示一个学校院系结构: 需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系 【传统方式】 将学院看做是学校的子类,系是学院的子类,小的组织继承大的组织 分析: 在一个页面中展示出学校的院系组成,一个学校有多个

    2024年02月15日
    浏览(45)
  • 19.组合模式(Composite)

    意图:将对象组成树状结构以表示“部分-整体”的层次结构,使得Client对单个对象和组合对象的使用具有一致性。 上下文:在树型结构的问题中,Client必须以不同的方式处理单个对象和组合对象。能否提供一种封装,统一简单元素和复杂元素的概念,让对象容器自己来实现

    2024年02月07日
    浏览(35)
  • 组合模式(Composite)

    组合模式(Composite Pattern)是一种结构型设计模式,用于表示对象的部分-整体层次结构。它允许客户统一对待个别对象和组合对象。这种模式特别适用于处理树形结构的数据。 在Java中,组合模式通常涉及以下几个部分: 组件(Component): 为组合中的对象声明接口,在适当

    2024年02月04日
    浏览(45)
  • 设计模式(19)命令模式

    一、介绍: 1、定义:命令模式(Command Pattern)是一种行为设计模式,它将请求封装为一个对象,从而使你可以使用不同的请求对客户端进行参数化。命令模式还支持请求的排队、记录日志、撤销操作等功能。 2、组成结构: (1)命令接口(Command):定义执行命令的方法,可

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

    组合模式可以使用一棵树来表示 组合模式使得用户可以使用一致的方法操作单个对象和组合对象 组合模式又叫部分整体模式,将对象组合成树形结构以表示“部分-整体”的层次结构,可以更好的实现管理操作,部分-整体对象的操作基本一样,但是应该还会有不一样的地方

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

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

    2024年01月21日
    浏览(59)
  • 设计模式——组合模式

    组合模式(Composite Pattern):组合多个对象形成树形结构以表示具有“整体—部分”关系的层次结构。组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性,组合模式又可以称为“整体—部分”(Part-Whole)模式,它是一种对象结构型模式。 组合模式将

    2024年02月11日
    浏览(69)
  • 设计模式:组合模式

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

    2024年02月07日
    浏览(60)
  • 设计模式——10. 组合模式

    组合模式是一种结构型设计模式,用于将对象组合成树状结构以表示“部分-整体”的层次结构。它允许客户端以一致的方式处理单个对象和组合对象(包含多个对象的容器),使得客户端无需关心它们之间的差异。 组合模式通常涉及两种主要角色: 叶子节点(Leaf):这是组

    2024年02月07日
    浏览(67)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包