600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 设计模式----组合模式UML和实现代码

设计模式----组合模式UML和实现代码

时间:2021-08-15 07:21:24

相关推荐

设计模式----组合模式UML和实现代码

独角兽企业重金招聘Python工程师标准>>>

一、什么是组合模式?

组合模式(Composite)定义:将对象组合成树形结构以表示‘部分---整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性.

类型:结构型模式

顺口溜:适装桥享代外

二、组合模式UML

三、JAVA代码实现

packagecom.posite;publicabstractclassComponent{protectedStringname;publicComponent(Stringname){this.name=name;}publicabstractvoidadd(Componentc);publicabstractvoidremove(Componentc);publicabstractvoiddisplay(intdepth);}packagecom.posite;importjava.util.ArrayList;importjava.util.List;publicclassCompositeextendsComponent{publicComposite(Stringname){super(name);}privateList<Component>components=newArrayList<Component>();@Overridepublicvoidadd(Componentc){components.add(c);}@Overridepublicvoidremove(Componentc){components.remove(c);}@Overridepublicvoiddisplay(intdepth){System.out.println(Util.concat("-",depth++).concat(name));for(Componentcomponent:components){component.display(depth+1);}}}packagecom.posite;publicclassLeafextendsComponent{publicLeaf(Stringname){super(name);}@Overridepublicvoidadd(Componentc){System.out.println("thisisleaf,cannotbeadded!");}@Overridepublicvoidremove(Componentc){System.out.println("thisisleaf,cannotberemoved!");}@Overridepublicvoiddisplay(intdepth){System.out.println(Util.concat("-",depth).concat(name));}}packagecom.posite;publicclassUtil{publicstaticStringconcat(Stringstr,intnum){StringBuildersb=newStringBuilder();for(inti=0;i<num;i++){sb.append(str);}returnsb.toString();}publicstaticvoidmain(String[]args){System.out.println(concat("-",3));}}packagecom.posite;publicclassClient{publicstaticvoidmain(String[]args){Componentc=newComposite("root");c.add(newLeaf("leaf1"));c.add(newLeaf("leaf2"));Componentsub=newComposite("sub1");sub.add(newLeaf("grand1"));sub.add(newLeaf("grand2"));Componentsub2=newComposite("sub2");sub2.add(newLeaf("grand3"));sub2.add(newLeaf("grand4"));c.add(sub);c.add(sub2);c.display(1);}}

输出结果:

四、使用场景

1.你想表示对象的部分-整体层次结构

2.你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。

引用大话设计模式的片段:“当发现需求中是体现部分与整体层次结构时,以及你希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时,就应该考虑组合模式了。”

五、源码地址

本系列文章源码地址,/amosli/dp 欢迎Fork & Star !!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。