- 浏览: 885467 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (509)
- android (55)
- CSS (23)
- eclipse (25)
- Data Structes and Algorithms (53)
- J2SE (87)
- Java_面试学习_j2se (26)
- java_面试学习_非技术 (13)
- java_gui (2)
- java_设计模式 (27)
- JDBC (10)
- java_web (15)
- hibernate (5)
- Oracle (37)
- Struts2 (7)
- Word-----dos (24)
- Jbpm (3)
- java小技巧 (8)
- math (1)
- flex (12)
- WebService (4)
- 生活 (9)
- 小框架或小语言 (27)
- spring (1)
- 面试~~~软实力 (7)
- jstat的用法 (1)
- jmap (1)
- 数据链路层和传输层的流量控制区别 (1)
- shell (0)
- 财商 (1)
- javascript (0)
- js研究 (1)
- 代码收集 (0)
最新评论
-
海尔群:
http://jingyan.baidu.com/articl ...
android加密 -
完美天龙:
------------------------- ...
asm----字节码操纵 -
houniao1990:
大神,请问 string 类型 定义为 oracle的 cha ...
hibernate注解 -
JamesQian:
Line:103
f.doFilter(msg);
是否需 ...
责任链模式_过滤器模式 -
sacoole:
好评
interview--- 如何从N个数中选出最大(小)的n个数?
这个标题说的是一种模式。。。又叫~~树模式~~整体部分模式 这个模式是为了同一树中的叶子节点和非叶子节点。。。 组合模式场景: 1。买电脑的商家,可以卖单独配件也可以卖组装整机。 2。复制文件,可以一个一个文件复制黏贴还可以整个文件夹进行复制。 3。再比如文件编辑,可以给单个字加粗,变色,改字体,也可以给整段文件做同样的操作。 组合模式使得用户对单个对象和组合对象的使用具有一致性。 我们需要写树形结构: 先写一个烂的,然后改进 public interface IRoot{ public String getInfo(); public void add(IBranch branch); public add(ILeaf leaf); public ArrayList getChildren(); } public interface IBranch{ public String getInfo(); public void add(IBranch branch); public add(ILeaf leaf); public ArrayList getChildren(); } public interface ILeaf{ public String getInfo(); } 三个接口写完了,看出问题来了。。。IRoot和IBranch居然里面内容一样。。。 其实根节点就是一种枝节点,而且如果你不考虑parent的话,那么根节点就只会关心本身和他的孩子,枝节点也是只关心本身和他的孩子。。所以改进去掉IRoot 再观察: 接口是为了什么。。。是提取共性的,那么观察下IBranch和ILeaf中居然都有getInfo(); 那么这个共性是不是应该封装起来下呢? 所以先把ILeaf改名为IInfo public interface INode{ //携带信息的能力,叶子节点和分支节点的共性 public String getInfo(); } 然后在IBranch中复用他 public interface IChildren{ //他拥有放入IInfo和得到孩子的能力 public List<INode> children = new ArrayList<INode>(); public void add(INode node); public List getChildren(); //并且在此扩展自己的能力 } //注意的是:虽然本身拥有List,但是本身不提供遍历能力哈,因为不建议程序员使用迭代器模式,java提供了,那么我们还是显示的遍历下算了,因为程序写起来简单。。。中庸才是王道,面向过程有时候还是好的,要遍历的话我们就是用递归,把函数分给每个子类呗。。。不过要知道这是面向过程的递归哈。。。。。。 public class Leaf implements INode{ //他是一个Node,仅此而已 ..... } public class Branch implements INode,IChildren{//他是一个node,而且还能装孩子 ...... } 业务逻辑中的遍历: public static String getTreeInfo(Branch root){ ArrayList<INode> children = root.getChildren(); String info = ""; for(INode info : children){ if(info instanceof Leaf){ info = info+info.getInfo()+"\n"; }else{ info = info+s.getInfo()+"\n" + getTreeInfo((Branch)info);//看见没,这里还是可以用多态,他有两个接口就可以在这两个接口的能力中自由转换 } } return info; } 下面的问题是:接口有必要吗? 如果你的IInfo接口的有许多不同的实现的话,那么接口当然有用,因为我们可以利用多态来扩展,但是这时如果不需要扩展,那么接口就多余了。。但是IInfo的实现就一种,那么用他干嘛啊。。。当然是用抽象类啦。。 改造: public abstract class AbstractNode{ //叶子节点所需要的能力只是得到信息 private String name = ""; private String position = ""; private int salary = 0; private AbstractNode parent; public Info(String name,String position,String salary){ this.name=name; this.position = position; this.salary = salary; } public String getInfo(){ String info = "姓名:"+this.name+"\t 职位:"+this.position+"\t薪水"+this.salary; return info; } public AbstractNode getParent(){ //新增,为了可以追溯到父亲 return this.parent; } public void setParent(AbstractNode parent){ this.parent = parent; } } public class Leaf extends AbstractNode{//继承是为了复用 public Leaf(String name,String position,int salary){ super(name,position,salary); } } public Branch extends AbstractNode{ ArrayList<AbstractNode> children = new ArrayList<AbstractNode>(); public Branch (String name,String position,int salary){ super(name,position,salary); } public void add(AbstractNode t){ t.setParent(this); //新增,为了反向引用 this.children.add(t); } public ArrayList<AbstractNode> getChildren(){ return this.children; } }
发表评论
-
设计模式--------享元模式
2010-11-15 14:04 1145Flyweight 是拳击比赛中的特用名词,意思是“特轻量 ... -
设计模式-------建造者模式
2010-11-10 20:38 1210状态间的自由切换 ... -
设计模式------访问者模式
2010-11-09 23:00 1024访问者模式是对迭代器模式的扩充,可以遍历不同的对象,然后执 ... -
题目---银行帐户管理系统
2010-08-10 13:54 1477//注意:不用if else语句的前提是状态的流动 ... -
概念-----依赖倒置
2010-08-09 13:45 1136依赖如果不导致,就是我依赖一个具体的东西。。。这是很正常的 ... -
概念-----好莱坞原则
2010-08-09 13:29 2432好莱坞,一个让许多俊男靓女欲罢不能的地方。在通往成功的路上,有 ... -
设计模式------适配器
2010-08-09 11:07 1002//适配器模式不适合在系统设计阶段采用,没有一个系统分析师 ... -
设计模式-----Singleton单件模式
2010-08-09 09:44 1139/* 1:同步一个方法可能造成程序执行效率下降100倍。。 ... -
题目----猫叫---设计模式
2010-08-06 16:20 1245题目:猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒 要 ... -
设计模式------装饰器
2010-08-06 16:14 1061装饰模式和代理模式的 ... -
设计模式------观察者模式
2010-08-06 15:16 1277大量参考设计模式之禅 观察者---就是间谍哈,或者叫 ... -
设计模式------策略模式
2010-08-06 14:54 1005我认为核心思想是:把变化的方法也当作参数传过来 1. ... -
设计模式------模板方法模式---桥梁模式
2010-07-31 18:43 1378如果两个类的某个方法90%代码一样,怎么重用? 把不同的地方 ... -
题目-----面向对象设计题
2010-07-29 10:38 1496/*面向对象设计把握一个重要的经验:谁拥有数据,谁就对 ... -
设计模式------工厂模式
2010-07-09 13:25 1353工厂模式是一种创建型模式。。。其中创建型模式包括:单例,工 ... -
设计模式--------Facade~~外观模式~~门面
2010-07-09 11:34 1047可以看成事对多个方法的封装。。。。。对多个对象的代理。。目 ... -
设计模式-------中介者模式
2010-07-09 11:31 1248语义:类和类之间不 ... -
设计模式-----状态模式
2010-07-09 11:15 1152/** 一个类中的方法是不稳定的,他在不同的状态下需要不 ... -
设计模式-------命令模式
2010-07-09 10:23 1306重点中的重点: 把"执行者"类当中 ... -
设计模式------桥模式~bridge
2010-07-09 09:01 1019/** 语义:实现系统 ...
相关推荐
c++设计模式-结构型模式-组合模式;qt工程;c++简单源码; 组合(Composite Pattern)模式的定义:有时又叫作整体-部分(Part-Whole)模式,它是一种将对象组合成树状的层次结构的模式,用来表示“整体-部分”的关系...
《C++设计模式--基于Qt4开源跨平台开发框架》一书主要探讨了如何在C++编程中利用设计模式,并结合Qt4框架进行高效的跨平台应用开发。设计模式是软件工程中的重要概念,它们是经过时间和实践验证的解决特定问题的模板...
JAVA-设计模式-结构型模式-组合模式
设计模式通常分为三类:创建型模式(如工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式),结构型模式(如适配器模式、装饰器模式、代理模式、桥接模式、组合模式、外观模式、享元模式)以及行为型模式(如...
组合模式是一种结构型设计模式,它允许我们使用树形结构来表示部分-整体关系,使得我们能够像处理单个对象一样处理整个集合。在Java中,这种模式的应用可以帮助我们简化对复杂对象层次结构的操作,同时保持接口的...
总结来说,"组合模式-空军指挥系统"这一主题涉及到Java设计模式中的组合模式理论和实践,以及如何在实际的空军指挥系统项目中应用该模式。通过组合模式,我们可以构建出层次分明、易于管理和扩展的系统,使得在复杂...
C++设计模式是一种在软件开发中经过验证的解决常见问题的方法论,它为软件开发提供了标准的解决...在研究提供的源码时,读者应重点关注如何在实际场景中应用和组合这些设计模式,以及它们如何与QT4框架的特性相结合。
组合模式是一种软件设计模式,属于结构型模式,它允许我们以树形结构来表示部分与整体的关系,使得我们可以像处理单个对象一样处理整个集合。在iOS开发中,这种模式非常有用,特别是在处理数据结构或者UI组件时,...
- 组合模式(Composite):将对象组合成树形结构以表示“部分-整体”的层次结构。 - 装饰模式(Decorator):动态地给一个对象添加一些额外的职责。 - 享元模式(Flyweight):使用共享对象,有效地支持大量细...
组合模式,也称为树形模式,是一种结构型设计模式,它允许我们表示部分-整体层次结构,使得客户端代码可以统一地处理单个对象和对象集合。这种模式将对象组织成树形结构,允许用户对部分或整个树进行操作,简化了...
设计模式中的组合模式的示例代码。 包括透明写法和安全写法两种实现方式的示例。
这个资源"Java设计模式----通俗易懂版"显然是一个专门针对初学者或需要深入理解设计模式的开发者编写的指南。作者以形象生动的例子解释了23种经典的Java设计模式,使得复杂的概念变得更加易于理解。 首先,我们要...
2. **设计模式分类**:设计模式通常分为三类:创建型模式(如工厂方法、抽象工厂、单例、建造者、原型)、结构型模式(如适配器、桥接、装饰、组合、代理、外观、享元)和行为型模式(如责任链、命令、解释器、迭代...
设计模式06-适配器、桥接、组合模式 设计模式07-组合模式、装饰模式 设计模式09-外观模式、享元模式 设计模式10-代理模式、结构型模式大复习 设计模式11-行为模式-责任链、命令模式 设计模式12-解释器模式 设计模式...
《设计模式--基于C#的工程化实现及扩展》是一本深入探讨软件设计模式的书籍,作者王翔通过C#语言来阐述各种设计模式的工程化应用和拓展。设计模式是软件开发中的一种最佳实践,它总结了在特定场景下解决常见问题的...
"自定义控件 - 设计模式 - 良好设计 - ViewPager"这个主题,旨在探讨如何利用设计模式来创建高效且可维护的自定义ViewPager。ViewPager是一个常用的Android组件,它允许用户在多个视图之间滑动,常用于实现页面轮播...
结构型模式则关注如何将类或对象组合成更大的结构,例如适配器模式(Adapter)、装饰器模式(Decorator)、代理模式(Proxy)、桥接模式(Bridge)和组合模式(Composite)。这些模式可以帮助我们处理类与类之间的...
c++设计模式-结构型模式-桥接模式;qt工程,c++简单源码; 桥接(Bridge)模式的定义如下:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度...
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...