菜鸟硕枫设计模式系列之9 组合模式
发布日期:2021-10-01 08:45:08
浏览次数:7
分类:技术文章
本文共 2643 字,大约阅读时间需要 8 分钟。
组合模式,顾名思义,采用了组合的方式,使得简单的对象可以组合成复杂的对象,同时保证了简单对象和复杂对象使用上的一致性。这是一种典型的has- a 关系。用过组合 使得简单对象成为了复杂对象的一部分,而在使用上,简单对象和复杂对象又是一致的。 组合模式类图: [img]http://dl.iteye.com/upload/attachment/364541/b7cdc2de-4278-36e1-9acf-030e2091033d.jpg[/img] 具体实例demo: 抽象对象:package compositePattern; import java.util.ArrayList; import java.util.List; public abstract class Person { protected List具体对象类:personList; protected String name; public abstract void work(); public Person(List personList,String name){ this.personList = personList; this.name = name; } public abstract void add(Person person); public abstract void remove(Person person); public abstract List getShouXia(); public void setName(String name) { this.name = name; } public String getName() { return name; } }
package compositePattern; import java.util.List; public class Coder extends Person{ public Coder(List具体对象类2:personList,String name) { super(personList, name); // TODO Auto-generated constructor stub } @Override public void work() { System.out.println("miserable coder"); } public void add(Person person){ } public void remove(Person person){ } public List getShouXia(){ return null; } }
package compositePattern; import java.util.List; public class LaoDa extends Person{ public LaoDa(List测试类:personList,String name) { super(personList, name); // TODO Auto-generated constructor stub } @Override public void work() { // TODO Auto-generated method stub } public void add(Person person){ personList.add(person); } public void remove(Person person){ personList.remove(person); } public List getShouXia(){ return personList; } }
package compositePattern; import java.util.ArrayList; public class CompositePatternTest { public static void main(String[]args){ int deep = 0; LaoDa[] laodas =new LaoDa[2]; for(int i=0;i<2;i++){ laodas[i] = new LaoDa(new ArrayList说明;简单对象类对一些非自己的功能可以将抽象对象功能空实现,这样既保证了简单对性爱那个和复杂对象类的一致性,又保证了各自功能的相对区别。(),i+"号老大"); } Coder[] coders =new Coder[6]; for(int j=0;j<6;j++){ coders[j] = new Coder(null,j+"号码农"); } for(int i =0;i<2;i++){ laodas[i].add(coders[i]); laodas[i].add(coders[i+2]); laodas[i].add(coders[i+4]); } laodas[0].add(laodas[1]); show(laodas[0],0); } public static void show(Person p ,int deep){ for(int i=0;i<=deep-1;i++) System.out.print("---"); System.out.println(p.getName()); if(p.personList!=null &&p.personList.size()>0) for(Person person : p.personList) show( person ,deep+1); } }
转载地址:https://blog.csdn.net/iteye_2655/article/details/81970374 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2024年04月11日 09时03分36秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【计算机操作系统】设备管理?磁盘结构是怎么样的?磁盘调度算法有哪些?
2019-04-26
【多线程高并发】为什么要使用多线程?创建多少个线程合适呢?
2019-04-26
【多线程与高并发】 Java两个线程轮流打印1-100两个数?多线程轮流打印数字?
2019-04-26
【多线程与高并发】 Java两个线程轮流打印字符串?
2019-04-26
【Linux命令篇】Linux命令实践
2019-04-26
【Leetcode单调队列】Leetcode239 滑动窗口最大值
2019-04-26
【Leetcode-单调栈】单调栈相关的题目-下一个更大的元素I 每日温度
2019-04-26
【Leetcode单调队列】- 洛谷P1714切蛋糕
2019-04-26
【Leetcode优先级队列】- 数据流的中位数
2019-04-26
【Leetcode优先级队列】-合并K个升序链表
2019-04-26
【多线程与高并发】-Java如何实现一个阻塞队列呢?
2019-04-26
【多线程高并发】-多线程实现数组的读与写
2019-04-26
【Java设计者模式】-Java实现订阅-发布者模式
2019-04-26
【计算机操作系统】-什么是系统调用呢?什么是用户态?什么是内核态?
2019-04-26
【计算机操作系统-进程管理】-进程通信是什么呢?
2019-04-26
Python程序元素分析
2019-04-26
TurtleArt美景图
2019-04-26
margin布局
2019-04-26