欢迎访问 生活随笔!

ag凯发k8国际

当前位置: ag凯发k8国际 > 编程语言 > asp.net >内容正文

asp.net

设计模式的理解:组合模式 (composite) -ag凯发k8国际

发布时间:2024/10/14 asp.net 33 豆豆
ag凯发k8国际 收集整理的这篇文章主要介绍了 设计模式的理解:组合模式 (composite) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

        组合模式(composite pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。

       例如 在c# winform 应用程序编程中 radiobutton控件是单选按钮控件 ,groupbox 控件是控件组,是装入其他控件或其他控件组的容器。当groupbox设置为disable时,那么其子控件和子groupbox也要变成disable。如何实现这样的级联?把控件组视为一个(整体)对象,当(整体)对象的属性发生变化时,其中的(部分)子对象属性也跟着变化?这就需要利用到组合模式,利用树形结构进行递归,完成“整体-部分”的批量处理。其中像控件组这样的对象在下图中是composite,像其他单控件如 radiobutton,button等在下图中是leaf,他们共同继承于控件的抽象类widget

 

class iwidget{virtual void disable() = 0;virtual void visible() = 0; } /**单控件类.....*/ class radiobutton:public iwidget{private :bool isvisited_;public :radiobutton(){isvisited_ =true;}virtual void disable(){isvisited_ =false;}virtual void visible(){isvisited_ =true;} } class button:public iwidget{private :bool isvisited_;public :button(){isvisited_ =true;}virtual void disable(){isvisited_ =false;}virtual void visible(){isvisited_ =true;} }/**iwidget集合类.....*/ class groupbox:public iwidget{private :bool isvisited_;vector widgets_;public :groupbox(){isvisited_ =true;}virtual void disable(){isvisited_ =false;for(auto& w : widgets_){w -> disable();}}virtual void visible(){isvisited_ =true;for(auto& w : widgets_){w -> visible();}}void add(iwidget &w){ widgets_.push_back(w);}void remove(iwidget & w){ widgets_.remove(w);} }void main(){radiobutton radiobutton1;radiobutton radiobutton2;button button1;button button2;groupbox groupbox1;groupbox groupbox2;groupbox groupboxall;groupbox1.add(radiobutton1);groupbox1.add(button1);groupbox2.add(radiobutton2);groupbox2.add(button2);groupboxall.add(groupbox1);groupboxall.add(groupbox2);groupbox1.disable(); //button1 和radiobutton1 和groupbox1的isvisited_状态都是falsegroupbox1.visible(); //button1 和radiobutton1 和groupbox1的isvisited_状态都是truegroupboxall.disable();/*button1和radiobutton1 和groupbox1和button2和radiobutton2 和groupbox2和groupboxall的isvisited_状态都是false*/ }

 

 

 

 

 

 

 

 

 

总结

以上是ag凯发k8国际为你收集整理的设计模式的理解:组合模式 (composite)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得ag凯发k8国际网站内容还不错,欢迎将ag凯发k8国际推荐给好友。

网站地图