美文网首页设计模式C++实现笔记
COMPOSITE组合模式(结构型模式)

COMPOSITE组合模式(结构型模式)

作者: lixin_karl | 来源:发表于2019-01-20 17:46 被阅读0次

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

实现代码
class Graphic{
public:
    Graphic(int a){
        index = a;
    }
   virtual void Draw(){
       std::cout<<"never show"<<std::endl;
   }
   virtual void Add(Graphic *g){
       std::cout<<"can't add"<<std::endl;
   }
   virtual void Remove(Graphic *g){
       std::cout<<"can't remove"<<std::endl;
   }
   int index;
};

class Text : public  Graphic{
public:
    Text(int a):Graphic(a){}
    void Draw() override {
        std::cout<<"Text"<<index<<std::endl;
    }
};
class Line : public  Graphic{
public:
    Line(int a):Graphic(a){}
    void Draw() override {
        std::cout<<"Line"<<index<<std::endl;
    }
};

class Picture : public Graphic{
public:
    Picture(int a):Graphic(a){}
    void Draw() override {
        std::cout<<"Picture"<<index<<std::endl;
        for(auto x :set){
            x->Draw();
        }
    }
    void Add(Graphic *g) override {
        set.insert(g);
    }
    void Remove(Graphic *g) override {
        set.erase(g);
    }
private:
    std::set<Graphic *> set;
};

int main(){
        Graphic *root = new Picture(1);//root
        Graphic *pic1 = new Picture(2);Graphic *pic2 = new Picture(3);//subdir
        Graphic *text1 = new Text(4);Graphic *text2 = new Text(5);//text
        Graphic *text3 = new Text(6);Graphic *text4 = new Text(7);//text
        Graphic *text5 = new Text(8);
        Graphic *line1 = new Line(1);Graphic *line2 = new Line(2);
        Graphic *line3 = new Line(3);

        root->Add(pic1);root->Add(pic2);
        pic1->Add(text1);pic1->Add(text2);pic1->Add(text3);pic1->Add(line1);
        pic2->Add(text4);pic2->Add(text5);pic2->Add(line2);pic2->Add(line3);
        root->Draw();
}
结果
Picture1
Picture2
Text4
Text5
Text6
Line1
Picture3
Text7
Text8
Line2
Line3
参与者
  • Component(Graphic)
  • Leaf(Text,Line)
  • Composite(Picture)
  • Client
适用性
  • 你想表示对象的部分-整体层次结构
  • 你希望忽略组合对象与单个对象的不同,用户将统一的使用组合结构中所有对象
参考

相关文章

  • 第19章 分公司=一部门--组合模式

    组合模式 组合模式(Composite),将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单...

  • 设计模式之组合模式

    组合模式 Composite Intro 组合模式,将对象组合成树形结构以表示 “部分-整体” 的层次结构,组合模...

  • 组合模式

    设计模式 一、什么是组合模式 组合模式(Composite Pattern):组合多个对象形成树形结构以表示具有“...

  • 设计模式[11]-组合模式-Composite Pattern

    1. 组合模式简介 组合模式(Composite Pattern)是结构性设计模式,又叫“部分-整体”模式,主要用...

  • 结构型模式2-组合模式

    结构型模式2-组合模式 组合模式Composite 意图 将对象组合成属性结构,以表示“部分-整体”的层次结构。c...

  • JS设计模式之组合模式

    组合模式(Composite) 又称部分-整体模式,将对象整合成树形结构以表示“部分整体”的层次结构。组合模式使得...

  • PHP设计模式(十)—组合模式(Composite Patter

    组合模式 (Composite Pattern):将对象组合成树形结构以表示“部分整体”的层次结构。组合模式使得用...

  • 2.3组合模式

    组合模式定义 组合模式(Composite Pattern)将对象组合成树形结构以表示“部分-整体”的层次结构。组...

  • 15、组合模式(Composite Pattern)

    1. 组合模式 1.1 简介   Composite模式,即组合模式,又叫部分整体模式。Composite模式将对...

  • 组合模式

    组合模式(Composite Pattern):有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元...

网友评论

    本文标题:COMPOSITE组合模式(结构型模式)

    本文链接:https://www.haomeiwen.com/subject/raoxjqtx.html