在软件某些情况下,客户代码过多地依赖于对象容器复杂的内部实现结构,对象内部实现结构(而非抽象接口)地变化将引起客户代码地频繁变化.带来代码地维护性,扩展性等弊端
如何将”客户代码与复杂地对象容器结构”解耦?让对象容器自己来实现自身地复杂结构,从而使得客户代码就像处理简单对象一样来处理复杂地对象容器
将对象组合成树形结构以表示”整体-部分”地层次结构.Composite使得用户对单个对象和组合对象地使用具有一致性(稳定)
树形访问
#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(){
//process current node
//process current 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 treeNode1("treeNode2");
Composite treeNode1("treeNode3");
Composite treeNode1("treeNode4");
Leaf left1("leaf1");
Leaf left2("leaf2");
root.add(&treeNode1);
treeNode1.add(&treeNode2);
treeNode2.add(&leaf1);
root.add(&treeNode3); //具有一致性
treeNode3.add(&treeNode4);//具有一致性
treeNode4.add(&left2);//具有一致性
process(root);
}
int main(){
return 0;
}
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/168500.html原文链接:https://javaforall.cn