组合模式(Composite)
来源:互联网 发布:redhat yum安装mysql 编辑:程序博客网 时间:2024/05/22 00:28
组合模式有时候又叫做部门-整体模式,它是我们树形机构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦
将对象组合成树形结构以表示”部分-整体“的层次结构。Composite模式使得用户对单个对象和组合对象的使用具有一致性
两种实现方式:
a) 将管理子元素的方法定义在Composite类中
组成:
Component(抽象构件接口)
----为组合的对象声明接口
----在某些情况下爱实现从此接口派生的所有类共有的默认行为
----定义一个接口可以访问及管理它的多个子部件
package com.ebuair.pattern.component;//Component(抽象构件接口)://为组合的对象声明接口//在某些情况下爱实现从此接口派生的所有类共有的默认行为//定义一个接口可以访问及管理它的多个子部件public interface Commonent {public void invokeMethod();}
Leaf(叶部件)
----在组合中表示叶节点对象,叶节点没有子节点
----定义组合中接口对象的行为
package com.ebuair.pattern.component;//Leaf(叶部件)://在组合中表示叶节点对象,叶节点没有子节点//定义组合中接口对象的行为public class Leaf implements Commonent{@Overridepublic void invokeMethod() {System.out.println("invoke method!!!");}}
Composite(组合类)
----定义有子节点(子部件)的部件的行为
----存储子节点(子部件)
----在Component接口中实现与子部件相关的操作
package com.ebuair.pattern.component;import java.util.ArrayList;import java.util.List;//Composite(组合类)//定义有子节点(子部件)的部件的行为//存储子节点(子部件)//在Component接口中实现与子部件相关的操作public class Composite implements Commonent {private List<Commonent> commonentList = new ArrayList<Commonent>();public void add(Commonent commonent){this.commonentList.add(commonent);}public void remove(Commonent commonent){this.commonentList.remove(commonent);}public List<Commonent> getCommonentsList(){return commonentList;}@Overridepublic void invokeMethod() {for(Commonent commonent : commonentList){commonent.invokeMethod();}}}
Client(客户端)
----通过Component接口控制组合部件的对象
package com.ebuair.pattern.component;public class Client {public static void main(String[] args) {Commonent leaf1 = new Leaf();Commonent leaf2 = new Leaf();Composite commonent1 = new Composite();Composite commonent2 = new Composite();Commonent leaf3 = new Leaf();Commonent leaf4 = new Leaf();commonent1.add(leaf1);commonent1.add(leaf2);commonent2.add(commonent1);commonent2.add(leaf3);commonent2.add(leaf4);commonent2.invokeMethod();}}
b) 将管理子元素的方法定义在Component接口中,这样Leaf类就需要对这些方法空实现。
组成:
Component(抽象构件接口)
----为组合的对象声明接口
----在某些情况下爱实现从此接口派生的所有类共有的默认行为
----定义一个接口可以访问及管理它的多个子部件
package com.ebuair.pattern.component;import java.util.List;public interface Commponent2 {public void invokeMethod();public void add(Commponent2commponent);public void remove(Commponent2 commponent);public List<Commponent2> getAllCommponent2();}
Leaf(叶部件)
----在组合中表示叶节点对象,叶节点没有子节点
----定义组合中接口对象的行为
package com.ebuair.pattern.component;import java.util.List;public class Leaf2 implements Commponent2 {@Overridepublic void invokeMethod() {System.out.println("invoke method invoke!!!");}@Overridepublic void add(Commponent2 commponent) {}@Overridepublic void remove(Commponent2 commponent) {}@Overridepublic List<Commponent2> getAllCommponent2() {// TODO Auto-generated method stubreturn null;}}
Composite(组合类)
----定义有子节点(子部件)的部件的行为
----存储子节点(子部件)
----在Component接口中实现与子部件相关的操作
package com.ebuair.pattern.component;import java.util.ArrayList;import java.util.List;public class Commposite2 implements Commponent2 {private List<Commponent2> leaf2List = new ArrayList<Commponent2>();@Overridepublic void invokeMethod() {for(Commponent2 leaf2 : leaf2List){leaf2.invokeMethod();}}@Overridepublic void add(Commponent2 commponent) {leaf2List.add(commponent);}@Overridepublic void remove(Commponent2 commponent) {leaf2List.remove(commponent);}public List<Commponent2> getAllCommponent2() {return leaf2List;}}
Client(客户端)
----通过Component接口控制组合部件的对象
package com.ebuair.pattern.component;public class Client2 {public static void main(String[] args) {Commponent2 leaf1 = new Leaf2();Commponent2 leaf2 = new Leaf2();Commponent2 commponent1 = new Commposite2();Commponent2 commponent2 = new Commposite2();Commponent2 leaf3 = new Leaf2();Commponent2 leaf4 = new Leaf2();commponent1.add(leaf1);commponent1.add(leaf2);commponent2.add(commponent1);commponent2.add(leaf3);commponent2.add(leaf4);commponent2.invokeMethod();}}
- 组合模式(Composite)
- 组合模式(Composite)
- Composite(组合模式)
- 组合(Composite)模式
- 组合模式(Composite)
- composite(组合)模式
- Composite(组合)模式
- 组合模式(Composite)
- 组合(composite)模式
- 组合模式(Composite)
- 组合模式(Composite)
- 组合模式(Composite)
- 组合模式(Composite)
- 组合模式(Composite)
- Composite(组合模式)
- 组合模式(Composite)
- 组合模式(Composite)
- Composite(组合模式)
- storyboard
- springmvc集成xhEditor编辑器的使用
- 如何在web项目中使用jfreechart和显示硬盘上指定路径上的图片
- Jquery 选择器列举
- Python MySQLdb 查询生成 Excel 文件
- 组合模式(Composite)
- 复数类--重载运算符+,-,*,/
- 自定义View画圆形进度条
- Sun VirtualBox:配置双网卡实现本机对虚拟机的访问
- Maven集成eclipse(2)
- 复数类--重载运算符2+
- Java连接数据库主要有两种方式
- Java过滤<a>标签问题
- leetcode-Surrounded Regions