组合(Composite)模式

来源:互联网 发布:abc算法流程图 编辑:程序博客网 时间:2024/05/21 19:30

组合模式有时候也叫做部分——整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。

意图

将对象组合成树型结构以表示“部分——整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。(如JUNIT里的testSuit testCase)

组合模式构成:

Component(抽象构件接口)

——为组合的对象声明接口

——在某些情况下实现从此接口派生出的所有类共有的默认行为

——定义一个接口可以访问和管理他的多个子部件

Leaf(叶部件)

——在组合中表示叶结点对象,叶结点没有子结点

——定义组合中接口对象的行为

Composite(组合类)

——定义有子结点(子部件)的部件的行为

——存储子结点(子部件)

——在Component接口中实现与子部件相关的操作

Client(客户端)

——通过Component接口控制结合部件的对象

实现代码:

第一种:

//抽象构件接口public interface Component {public void doSomthing();}//叶部件public class Leaf implements Component{@Overridepublic void doSomthing() {System.out.println("执行方法");}}import java.util.ArrayList;import java.util.List;//组合类public class Composite implements Component {private List<Component> list = new ArrayList<Component>();public void add(Component component){list.add(component);}public void remove(Component component){list.remove(component);}public List<Component> getAll(){return this.list;}@Overridepublic void doSomthing() {for (Component component : list) {component.doSomthing();}}}public class Client {public static void main(String[] args) {Component leaf1 = new Leaf();Component leaf2 = new Leaf();Composite composite1 = new Composite();composite1.add(leaf1);composite1.add(leaf2);Component leaf3 = new Leaf();Component leaf4 = new Leaf();Composite composite2 = new Composite();composite2.add(composite1);composite2.add(leaf4);composite2.add(leaf3);composite2.doSomthing();}}

第二种:

//部件接口import java.util.List;public interface Component {public void doSomething();public void addComponent(Component component);public void remove(Component component);public List<Component> getAll();}import java.util.ArrayList;import java.util.List;public class Composite implements Component {private List<Component> list = new ArrayList<Component>();@Overridepublic void doSomething() {for (Component component : list) {component.doSomething();}}@Overridepublic void addComponent(Component component) {list.add(component);}@Overridepublic void remove(Component component) {list.remove(component);}@Overridepublic List<Component> getAll() {return this.list;}}import java.util.List;public class Leaf implements Component{@Overridepublic void doSomething() {System.out.println("执行方法");}@Overridepublic void addComponent(Component component) {}@Overridepublic void remove(Component component) {}@Overridepublic List<Component> getAll() {return null;}}public class Client {public static void main(String[] args) {Component leaf1 = new Leaf();Component leaf2 = new Leaf();Composite composite1 = new Composite();composite1.addComponent(leaf1);composite1.addComponent(leaf2);Component leaf3 = new Leaf();Component leaf4 = new Leaf();Composite composite2 = new Composite();composite2.addComponent(composite1);composite2.addComponent(leaf4);composite2.addComponent(leaf3);composite2.doSomething();}}


 


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 beats X耳机丢了怎么办 头戴耳机戴着热怎么办 长时间戴耳机耳朵疼怎么办 手表秒针走得声音很大怎么办 顾客总找老板剪头发怎么办 马来西亚国籍想去中国怎么办 有限元学位课挂了怎么办 五百丁简历导出后不一样怎么办 面试早到了1小时怎么办 头顶头发会越来越少怎么办 vr游戏过后想吐怎么办 win10电脑不能打汉字怎么办 手机看vr特别烫怎么办 苹果手机浏览器横屏怎么办 苹果笔记本浏览器没有了怎么办 剑与家园魔镜带错兵怎么办 橙子vr上下反了怎么办 我的恐龙手机不支持ar怎么办 被小人陷害又无计可施怎么办 蚂蚁借呗2万逾期怎么办 蚂蚁借呗还款金额受限怎么办 蚂蚁借呗不能借钱了怎么办 美柚手机号换了怎么办 美柚他他圈被禁言了怎么办? 被蝎子蜇了屁股怎么办 被蝎子蛰了该怎么办 孕妇让蝎子蛰了怎么办 脸被蝎子蛰了怎么办 皮肤看着有点老怎么办 王者铭文被卖了怎么办 游戏cp送我皮肤怎么办 消防改革武警学院的学员怎么办 几把毛掉的厉害怎么办 从公务员调入事业单位的怎么办 电车被城管扣了怎么办 超变战陀发射器绳坏了怎么办 家里人总打击我怎么办干啥都要骂 欧陆风云4破产后怎么办 车被别人喷了漆怎么办 龙分期绑银行卡维护钱还不上怎么办 去维和要是伤了怎么办