设计模式-composite(结构型模式)用于递归构建树状的组合结构,与decorator的区别是composite旨在通过构造子类而添加新操作,而decorator直接添加新操作。(代(代码片段)

fourmi fourmi     2023-05-02     497

关键词:

以下代码来源: 设计模式精解-GoF 23种设计模式解析附C++实现源码

//Component.h

#pragma once

class Component

public:
    Component();
    virtual ~Component();
    virtual void Operation() = 0;
    virtual void Add(const Component&);
    virtual void Remove(const Component&);
    virtual Component* getChild(int);
protected:
private:

;

//Component.cpp

#include"Component.h"
Component::Component()
Component::~Component()
void Component::Add(const Component& com)
void Component::Remove(const Component& com)
Component* Component::getChild(int index)

    return 0;

//composite.h

#include"Component.h"
#include<vector>

class Composite :public Component

public:
    Composite();
    virtual ~Composite();
    void Add(Component* com); 
    void Remove(Component* com);
    void Operation();
    Component* Getchild(int index);
protected:
private:
    std::vector<Component*>comVec;
;

//Composite.cpp

#include"Component.h"
#include"composite.h"

const int null = 0;

Composite::Composite()
Composite::~Composite()

void Composite::Operation()
    for (std::vector<Component*>::iterator comIter = comVec.begin(); comIter != comVec.end(); ++comIter)
    
        (*comIter)->Operation();
    

void Composite::Add(Component* com)

    comVec.push_back(com);

void Composite::Remove(Component* com)

    //comVec.erase(&com);//此处有问题,求解释!!!

Component* Composite::Getchild(int index)

    return comVec[index];

//Leaf.h

#include"Component.h"
class Leaf :public Component

public:
    Leaf();
    virtual ~Leaf();
    void Operation();
protected:
private:

;

//Leaf.cpp

#include"Leaf.h"
#include<iostream>
Leaf::Leaf()

Leaf::~Leaf()
void Leaf::Operation()
    std::cout << "Leaf Operation..." << std::endl;

//main.cpp

#include"Component.h"
#include"composite.h"
#include"Leaf.h"
#include<iostream>
#include<string>
int main(int args, char* argv)

    Leaf* I = new Leaf();
    I->Operation();
    Composite* com = new Composite();
    com->Add(I);
    com->Operation();
    Component* II = com->Getchild(0);
    getchar();
    return 0;

composite(组合)--对象结构型模式

...对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。2.动机  可以组合多个简单组件以形成一些较大的组件,这些组件又可以组合成更大的组件。Composite模式描... 查看详情

设计模式:组合模式(composite)

将对象组合成属性结构以表示“部分-总体”的层次结构。组合使得用户和单个对象和组合对象的使用具有一致性。组合模式设计的角色:1.Component:是组合中的对象声明接口。在适当的情况下。实现全部类共同拥有接口的默认行... 查看详情

设计模式--组合模式composite(结构型)

一、概念组合模式允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。二、UML图1.Component(对象接口),定义了对象可以做的事情。2.Leaf(叶子结点对象)3.Composite(其... 查看详情

设计模式的征途—9.组合(composite)模式

树形结构在软件中随处可见,比如操作系统中的目录结构,公司组织结构等等,如何运用面向对象的方式来处理这种树形结构是组合模式需要解决的问题。组合模式通过一种巧妙的设计方案来使得用户可以一致性地处理整个树形... 查看详情

设计模式学习篇-composite组合模式

组合模式(Composite)属于结构性模式,它描述了对象间的组合关系。对象间常常通过树结构来组织(包含)起来,以实现整体-部分的层次结构。整体上可以看做是一个组合对象。抛却各种复杂的术语,组合模式的特点是:对象... 查看详情

组合模式(composite)

...,A拥有了B,叫组合。只是单纯的组合而已,而不是一种设计模式。组合和组合模式不是一回事!基本上见到的树形结构都使用到了组合模式。组合模式结构图:组合模式中有几个核心的部分:Leaf(叶子):表示该节点下面没有... 查看详情

组合模式(composite)

组合模式:将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。publicabstractclassCompany{protectedstringname;publicCompany(stringname){this.name=name;}publicabstractvoidAdd(Companycompany);p... 查看详情

组合(composite)模式

...用户对单个对象和组合对象的使用具有一致性组合模式(Composite)将小对象组合成树形结构,使用户操作组合对象如同操作一个单个对象。组合模式定义了“部分-整体”的层次结构,基本对象可以被组合成更大的对象,而且这... 查看详情

设计模式——18.组合模式

...site)结构:REFGitHub:https://github.com/me115/design_patterns书籍:设计模式与游戏开发、大话设计模式 查看详情

组合模式-composite

组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。组合模式结构图:透明方式与安全方式:透明方式:在Component中声明所有用来管理子对象的方法... 查看详情

设计模式—组合模式(composite)(代码片段)

初始印象  在开发中存在很多整体和部分的关系,这个方式最大的体现就是树形结构。组合模式就是为了更好地解决这类业务场景的问题。先看下组合模式的定义:  将对象组合成树形结构以表示“整体—部分”的... 查看详情

组合模式composite

将对象组合成树形结构以表示整体-部分的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性.UML:示例代码:透明组合:叶节点和子节点具有相同的接口abstractclassComponent{protected$name;publicfunction__construct($name){$this->... 查看详情

gof23设计模式之组合模式(composite)

一、组合模式概述  将对象组合成树状结构以表示“部分和整体”层次结构,使得客户可以统一的调用叶子对象和容器对象。  (1)组合模式的使用场景     把部分和整体的关系用树形结构来表示,从而使客户端... 查看详情

12结构型模式之组合模式

概念  Composite模式也叫组合模式,是构造型的设计模式之一。通过递归手段来构造树形的对象结构,并可以通过一个对象来访问整个对象树。 角色和职责Component(树形结构的节点抽象)-为所有的对象定义统一的接口(公... 查看详情

设计模式之组合模式(构建型)(代码片段)

...式又称“整体-部分”(Part-Whole)模式,属于对象结构型的设计模式。将对象组合在组件类里,用于描述整体和部分的关系。组合模式对单个对象和组合对象或者说容器对象的使用具有一致性。模式角色组合模式包括如下角色:Compo... 查看详情

设计模式--组合模式(composite)

写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------主要内容包括:初识组合模式,包括:定义、结构、参考实现体会组合模式,包括:场景问题、不用模式的解决方案、使用模式的解决... 查看详情

设计模式的分类

设计模式的分类  根据其目的(模式是用来做什么的)可分为创建型(Creational),结构型(Structural)和行为型(Behavioral)三种:    ? 创建型模式主要用于创建对象。    ? 结构型模式主要用于处理类或对象的组合。... 查看详情

设计模式组合模式composite(代码片段)

组合模式:  允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。   组合模式适用于创建复杂的对象,这个对象包含某些个别的对象以及这些对象... 查看详情