设计模式(十八)composite

xiaoxiao2021-02-28  109

1.使用场景:客户代码过多地依赖于对象容器复杂的内部实现结构 ,对象容器内部实现结构的变化将引起客户代码的频繁变化 2.定义:将对象组合成树形结构以表示“部分-整体”的层次结构。 composite使得用户对单各对象和组合对象的使用具有一致性。 3.应用:处理“树”中的一节点及其子节点

composite设计模式代码:

#include <iostream> #include <list> #include <string> #include <algorithm> using namespace std; class Component { public: virtual void process() = 0; virtual ~Component(){} }; //树节点 class Composite : public Component{ string name; list<Component*> elements; public: Composite(const string & s) : name(s) {} void add(Component* element) { elements.push_back(element); } void remove(Component* element){ elements.remove(element); } void process(){ //1. process current node //2. process leaf nodes for (auto &e : elements) e->process(); //多态调用,该节点和其所有子节点 } }; //叶子节点 class Leaf : public Component{ string name; public: Leaf(string s) : name(s) {} void process(){ //process current node } }; void Invoke(Component & c){ //... c.process(); //... } int main() { Composite root("root"); Composite treeNode1("treeNode1"); Composite treeNode2("treeNode2"); Composite treeNode3("treeNode3"); Composite treeNode4("treeNode4"); Leaf leat1("left1"); Leaf leat2("left2"); root.add(&treeNode1); treeNode1.add(&treeNode2); treeNode2.add(&leaf1); root.add(&treeNode3); treeNode3.add(&treeNode4); treeNode4.add(&leaf2); process(root); process(leaf2); process(treeNode3); }
转载请注明原文地址: https://www.6miu.com/read-45426.html

最新回复(0)