组合(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();}}
- 组合模式(Composite)
- 组合模式(Composite)
- Composite(组合模式)
- 组合(Composite)模式
- 组合模式(Composite)
- composite(组合)模式
- Composite(组合)模式
- 组合模式(Composite)
- 组合(composite)模式
- 组合模式(Composite)
- 组合模式(Composite)
- 组合模式(Composite)
- 组合模式(Composite)
- 组合模式(Composite)
- Composite(组合模式)
- 组合模式(Composite)
- 组合模式(Composite)
- Composite(组合模式)
- extjs4 添加树节点
- OpenFileDialog类
- awk字符串中输出单引号
- 小任务:展示系列故障日志
- mplayer configure选项中文注释(MPlayer-1.0rc2)
- 组合(Composite)模式
- Magento An error occurred while saving the URL rewrite (索引刷不了怎么办)
- running a 32bit executable on a 64 ubuntu lucid
- 模板代码的组织方式
- java可以递归多少次
- NameValueCollection详解
- js call
- 防止登陆页面嵌套
- js 验证手机号,邮箱一类的东西,js定位html元素,浏览器滚到到html元素