- 浏览: 72378 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
z169351998:
...
StringOfArray in web service proxy -
z169351998:
撒大大 [size=x-small][/size]
StringOfArray in web service proxy -
z169351998:
引用[url][/url][flash=200,2 ...
StringOfArray in web service proxy -
huhu_long:
补充1:在二叉树遍历的时候,如果采取非递归的方式,则可以借助S ...
栈的一些应用 -
huhu_long:
简单说,取第一个作为参考pivot值,while(low< ...
快速排序
Compose objects into TREE structures...
所以当碰到树形结构时, 我们就应该考虑是否可以用Composite模式。
下面我们以一般网站的导航栏来做介绍。
没个Item都对应一个节点, 节点存储了导航的URL
组合模式又分为:
。安全模式
。透明模式
那么先来看看安全模式是怎样滴。
定义一个Node抽象类, 灰常简单, 暴露两个属性
然后是叶子节点, 叶子节点没有Child, 所以直接从Node继承过来, 不需要修改
再就是分支节点了
好啦, 看看客户端代码吧:
执行结果如下:
介绍完了安全模式, 再来看看透明模式
那本例来说, 所谓透明模式, 其实就是把Branch里面的add, remove, getChildre方法移到Node类里面去, 然后在客户端代码不需要进行类型的强制转换。
Node类改动比较大
Leaf类比支持add, remove, getChildre方法, 应该明确出来
Branch类得到了简化
客户端唯一不同的地方就是用超类申明, 并且不用强制转换
最后来看看执行结果, 和安全模式也是一样滴
所以当碰到树形结构时, 我们就应该考虑是否可以用Composite模式。
下面我们以一般网站的导航栏来做介绍。
没个Item都对应一个节点, 节点存储了导航的URL
组合模式又分为:
。安全模式
。透明模式
那么先来看看安全模式是怎样滴。
定义一个Node抽象类, 灰常简单, 暴露两个属性
public abstract class Node { private String name; private String url; public String getName() { return name; } public String getUrl() { return url; } public Node(String name, String url) { this.name = name; this.url = url; } }
然后是叶子节点, 叶子节点没有Child, 所以直接从Node继承过来, 不需要修改
public class Leaf extends Node { public Leaf(String name, String url) { super(name, url); } }
再就是分支节点了
public class Branch extends Node { // children 里面的元素有可能是 Branch, 也有可能是 Leaf private List<Node> children = new ArrayList<Node>(); public Branch(String name, String url) { super(name, url); } public void addChild(Node node) { this.children.add(node); } public void removeChild(Node node) { if (this.children.contains(node)) this.children.remove(node); } public List<Node> getChildren() { return this.children; } }
好啦, 看看客户端代码吧:
public class Client { public static void main(String[] args) { Node tree = buildTree(); printTreeInfo(tree); } private static Node buildTree() { Branch root = new Branch("root", "/root"); root.addChild(new Leaf("level1-1", "/level1-1")); root.addChild(new Leaf("level1-2", "/level1-2")); Branch level1 = new Branch("level1-3", "/level1-3"); level1.addChild(new Leaf("level1-3-2-1", "/level1-3-2-1")); level1.addChild(new Leaf("level1-3-2-2", "/level1-3-2-2")); root.addChild(level1); return root; } @SuppressWarnings("unchecked") private static void printTreeInfo(Node tree) { if (tree instanceof Leaf) { System.out.println("Name = " + tree.getName() + "; URL = " + tree.getUrl()); } else { System.out.println("Name = " + tree.getName() + "; URL = " + tree.getUrl()); List<Node> children = ((Branch) tree).getChildren(); Iterator iter = children.iterator(); while (iter.hasNext()) { printTreeInfo((Node) iter.next()); } } } }
执行结果如下:
引用
Name = root; URL = /root
Name = level1-1; URL = /level1-1
Name = level1-2; URL = /level1-2
Name = level1-3; URL = /level1-3
Name = level1-3-2-1; URL = /level1-3-2-1
Name = level1-3-2-2; URL = /level1-3-2-2
Name = level1-1; URL = /level1-1
Name = level1-2; URL = /level1-2
Name = level1-3; URL = /level1-3
Name = level1-3-2-1; URL = /level1-3-2-1
Name = level1-3-2-2; URL = /level1-3-2-2
介绍完了安全模式, 再来看看透明模式
那本例来说, 所谓透明模式, 其实就是把Branch里面的add, remove, getChildre方法移到Node类里面去, 然后在客户端代码不需要进行类型的强制转换。
Node类改动比较大
public abstract class Node { private String name; private String url; // children 里面的元素有可能是 Branch, 也有可能是 Leaf private List<Node> children = new ArrayList<Node>(); public String getName() { return name; } public String getUrl() { return url; } public Node(String name, String url) { this.name = name; this.url = url; } public void addChild(Node node) { this.children.add(node); } public void removeChild(Node node) { if (this.children.contains(node)) this.children.remove(node); } public List<Node> getChildren() { return this.children; } }
Leaf类比支持add, remove, getChildre方法, 应该明确出来
public class Leaf extends Node { public Leaf(String name, String url) { super(name, url); } @Override @Deprecated public void addChild(Node node) { throw new UnsupportedOperationException(); } @Override @Deprecated public List<Node> getChildren() { throw new UnsupportedOperationException(); } @Override @Deprecated public void removeChild(Node node) { throw new UnsupportedOperationException(); } }
Branch类得到了简化
public class Branch extends Node { public Branch(String name, String url) { super(name, url); } }
客户端唯一不同的地方就是用超类申明, 并且不用强制转换
Node root = new Branch("root", "/root"); Node level1 = new Branch("level1-3", "/level1-3"); List<Node> children = tree.getChildren();
最后来看看执行结果, 和安全模式也是一样滴
引用
Name = root; URL = /root
Name = level1-1; URL = /level1-1
Name = level1-2; URL = /level1-2
Name = level1-3; URL = /level1-3
Name = level1-3-2-1; URL = /level1-3-2-1
Name = level1-3-2-2; URL = /level1-3-2-2
Name = level1-1; URL = /level1-1
Name = level1-2; URL = /level1-2
Name = level1-3; URL = /level1-3
Name = level1-3-2-1; URL = /level1-3-2-1
Name = level1-3-2-2; URL = /level1-3-2-2
发表评论
-
备忘录模式
2011-07-01 17:58 711备忘录模式有叫备份模 ... -
门面模式
2011-06-30 10:19 686没看过门面模式(facade)的童鞋也许会好奇门面模式到底是啥 ... -
观察者模式
2011-06-29 15:29 726观察者模式又叫做发布订阅模式。。。 个人感觉这两种叫法代表的 ... -
迭代器模式
2011-06-27 12:51 750迭代器模式是为了方便遍历集合而产生, 但现在java提供的迭代 ... -
适配器模式
2011-06-24 17:20 777适配器(Adaptor)是大家日常生活中基本上天天要接触的。 ... -
策略模式
2011-06-24 16:14 722对于不同的需求可能有不同的实现, 但这些实现还不能独立成为什么 ... -
装饰模式
2011-06-24 15:25 896装饰模式, 顾名思义就是在原有基础上进行装饰。 那么“装饰者” ... -
责任链模式
2011-06-24 12:45 1017责任链模式就是将请求和处理分开了, 定义一个责任链, 请求不需 ... -
命令模式
2011-06-23 18:46 643顾名思义, 命令模式就是给不同的命令然后交给别人做就可以了。 ... -
中介者模式
2011-06-23 17:11 535中介者模式, 主角当然是中介者。那中介者是干什么的呢? 问得好 ... -
原型模式
2011-06-23 11:08 724原型模式的核型就是一个clone方法。 这也没什么好说的。 说 ... -
代理模式 - 动态
2011-06-22 16:20 812接着说代理模式。 动态代理就是让程序在运行是自动去找代理。 ... -
代理模式 - 静态
2011-06-22 15:41 659代理模式有较委托模式, 就是委托人委托代理做什么事情。 代理模 ... -
建造者模式
2011-06-22 13:25 912Builder 模式很重要的两个概念就是导演类和Builder ... -
模板方法模式
2011-06-21 17:41 948模板方法模式比较简单, 其实就是对一些不可变的业务进行封装, ... -
抽象工厂模式
2011-06-21 15:58 771抽象工厂模式是工厂模式的升级版本。适用多系列多产品的场景。 ... -
简单工厂模式
2011-06-21 14:47 796缺点: 不符合开闭原则 工厂类 public class ... -
工厂方法模式
2011-06-21 14:40 827产品由某一具体工厂的同一方法生产, 工厂只需被告知具体产品的类 ... -
开篇语
2011-06-21 14:39 690一直都在不间断的看设计模式, 但看了忘, 忘了又看。。。没有坚 ...
相关推荐
组合模式是一种对象结构型设计模式,它允许我们创建表示部分-整体层次结构的树形对象。在空军指挥系统中,这种模式的应用可以帮助我们构建一个灵活、可扩展的组织架构,其中每个部分(如飞机、飞行编队或基地)都...
java常用设计模式-组合模式 组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构以表示“部分-整体”的层次结构。这种模式使得客户端可以统一对待单个对象和对象组合。在组合模式中...
组合模式是一种对象结构型设计模式,它允许我们以树形结构来表示部分-整体关系,使得我们可以像处理单个对象一样处理整个集合。在五子棋游戏的实现中,组合模式的应用尤为关键,因为它帮助我们将棋盘上的棋子和棋盘...
### 设计模式实验报告——组合模式 #### 实验目的与背景 本次实验旨在通过实践学习设计模式中的组合模式,理解其工作原理及应用场景。组合模式(Composite Pattern)是一种结构型设计模式,它允许用户将对象组合成...
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的...
组合模式是一种软件设计模式,属于结构型模式,它允许我们以树形结构来表示部分与整体的关系,使得我们可以像处理单个对象一样处理整个集合。在iOS开发中,这种模式非常有用,特别是在处理数据结构或者UI组件时,...
组合模式是一种设计模式,它属于结构型模式,主要目的是为了将对象组织成树形结构,使得用户可以统一地处理单个对象和对象集合。在Java中,组合模式可以帮助我们实现部分与整体的层次结构,使得客户端代码可以一致地...
组合模式是一种行为设计模式,属于面向对象设计中的结构型模式,其主要目的是为了建立一种对象树形结构,这种结构能够使客户端代码以统一的方式处理单个对象和对象的组合。在组合模式中,我们通常会定义一个基类,...
组合模式是一种设计模式,它将对象组织成树形结构,使得用户可以统一处理单个对象和对象集合。在本实验中,我们将深入探讨组合模式的原理、实现方式以及其在实际编程中的应用。 首先,我们要理解组合模式的核心概念...
在这个主题中,我们主要探讨了如何利用组合模式(Composite Pattern)构建二叉树,并通过迭代器模式(Iterator Pattern)来实现对树的遍历,包括前序、中序和后序遍历。这些是设计模式中的经典应用,对于理解和掌握...
组合模式(Composite),将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 组合模式的适用场合是,一般当你发现需求中是体现部分与整体层次的结构时,...
组合模式是一种结构型设计模式,它允许我们使用树形结构来表示部分-整体关系,使得我们能够像处理单个对象一样处理整个集合。在Java中,这种模式的应用可以帮助我们简化对复杂对象层次结构的操作,同时保持接口的...
组合模式是一种结构型设计模式,它允许我们使用树形结构来表示部分-整体关系,使得我们能够以统一的方式处理单个对象和对象集合。在C++中,组合模式的应用可以帮助我们构建灵活且易于操作的对象层次结构,使得客户端...
组合模式是一种结构型设计模式,它允许我们使用树形结构来表示部分与整体的关系,使得我们可以在统一的接口下处理单个对象和对象的组合。在C#中,这种模式常用于处理对象集合,尤其在文件系统、组织结构或者树形菜单...
组合模式是一种设计模式,属于结构型模式,它允许我们以统一的方式处理单个对象和对象集合。在C#中,组合模式的应用可以帮助我们构建树形结构,并以一致的方法处理叶子节点(基本元素)和树枝节点(包含其他节点的...
组合模式是一种设计模式,它将对象组织成树形结构,使得用户可以对单个对象和对象集合进行统一处理。在“最简单的实现组合模式”中,我们关注的是如何以最直观、最少依赖的方式体现这种模式的核心思想。 组合模式的...
使用组合模式有如下的好处: l 定义了饱含基本对象和组合对象的类层次结构,基本对象可以被组合成更复杂的组合对象,而这个组合对象有可以被组合。 简化客户代码 客户可以一直地使用组合结构和单个对象,通常用户不...
组合模式是一种结构型设计模式,它允许我们使用树形结构来表示部分与整体的关系,使得我们能够以统一的方式来处理单个对象和对象的组合。在组合模式中,单个对象和组合对象都被视为同一类型,这使得客户端代码可以对...
java设计模式【之】组合模式【源码】【场景:遍历目录树】 * 组合模式 * 将对象组合成树结构,表示 “部分与整体” 的关系 * 要求 部分与整体,具备相同的父类 * * 代码实现 * 输出当前目录下,全部目录层级...
**Android组合模式简单Demo** 在Android开发中,设计模式是一种重要的编程思想,它能帮助我们构建更加优雅、可维护的代码结构。其中,组合模式(Composite Pattern)是一种结构型设计模式,它允许我们以树形结构来...