• Composite Pattern


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

    2.Composite 模式结构图

    3.实现

     1 #ifndef _COMPONENT_H_ 
     2 #define _COMPONENT_H_
     3 
     4 class Component 
     5 { 
     6 public: 
     7     Component();
     8     virtual ~Component();
     9 public: 
    10     virtual void Operation() = 0;
    11     virtual void Add(const Component& );
    12     virtual void Remove(const Component& );
    13     virtual Component* GetChild(int );
    14 protected:
    15 private:
    16 };
    17 
    18 #endif
    Component.h
     1 #include "Component.h"
     2 
     3 Component::Component() 
     4 {
     5 
     6 }
     7 Component::~Component() 
     8 {
     9 
    10 }
    11 void Component::Add(const Component& com) 
    12 {
    13 
    14 }
    15 Component* Component::GetChild(int index) 
    16 { 
    17     return 0;
    18 }
    19 void Component::Remove(const Component& com) 
    20 {
    21 
    22 }
    Component.cpp
     1 #ifndef _COMPOSITE_H_ 
     2 #define _COMPOSITE_H_
     3 
     4 #include "Component.h" 
     5 #include <vector> 
     6 using namespace std;
     7 
     8 class Composite:public Component 
     9 { 
    10 public: 
    11     Composite();
    12     ~Composite();
    13 public: 
    14     void Operation();
    15     void Add(Component* com);
    16     void Remove(Component* com);
    17     Component* GetChild(int index);
    18 protected:
    19 private: 
    20     vector<Component*> comVec;
    21 };
    22 
    23 #endif
    Composite.h
     1 #include "Composite.h" 
     2 #include "Component.h"
     3 #define NULL 0 //define NULL POINTOR
     4 
     5 Composite::Composite() 
     6 { //vector<Component*>::iterator itend = comVec.begin(); 
     7 }
     8 Composite::~Composite() 
     9 {
    10     
    11 }
    12 void Composite::Operation() 
    13 { 
    14     vector<Component*>::iterator comIter = comVec.begin();
    15     for (;comIter != comVec.end();comIter++) 
    16     { 
    17         (*comIter)->Operation(); 
    18     } 
    19 }
    20 void Composite::Add(Component* com) 
    21 { 
    22     comVec.push_back(com);
    23 }
    24 void Composite::Remove(Component* com) 
    25 { 
    26     comVec.erase(&com);
    27 }
    28 Component* Composite::GetChild(int index) 
    29 { 
    30     return comVec[index]; 
    31 }
    Composite.cpp
     1 #ifndef _LEAF_H_ 
     2 #define _LEAF_H_
     3 
     4 #include "Component.h"
     5 
     6 class Leaf:public Component 
     7 { 
     8 public: 
     9     Leaf();
    10     ~Leaf();
    11 void Operation();
    12 protected:
    13 private:
    14 }; 
    15 
    16 #endif
    Leaf.h
     1 #include "Leaf.h" 
     2 #include <iostream>
     3 
     4 using namespace std;
     5 
     6 Leaf::Leaf() 
     7 {
     8 
     9 }
    10 Leaf::~Leaf() 
    11 {
    12 
    13 }
    14 void Leaf::Operation() 
    15 { 
    16     cout<<"Leaf operation....."<<endl; 
    17 }
    Leaf.cpp
     1 #include "Component.h" 
     2 #include "Composite.h" 
     3 #include "Leaf.h" 
     4 #include <iostream> 
     5 
     6 using namespace std;
     7 
     8 int main(int argc,char* argv[]) 
     9 { 
    10     Leaf* l = new Leaf(); 
    11     l->Operation();
    12     Composite* com = new Composite();
    13     com->Add(l);
    14     com->Operation();
    15     Component* ll = com->GetChild(0);
    16     ll->Operation();
    17 
    18     return 0;
    19 }
    main.cpp
  • 相关阅读:
    flask 文件上传(单文件上传、多文件上传)--
    flask 自定义验证器(行内验证器、全局验证器) --
    flask 使用宏渲染表单(包含错误信息) --
    flask 在模板中渲染错误消息 --
    flask 在视图函数中验证表单 --
    flask 处理表单数据 --
    flask 在模板中渲染表单 --
    flask 使用Flask-WTF处理表单 --
    flask 表单
    iPad适合写作吗
  • 原文地址:https://www.cnblogs.com/programmer-wfq/p/4661809.html
Copyright © 2020-2023  润新知