论坛首页 Java企业应用论坛

用我的方式讲述-设计模式之组合模式(composite)

浏览 2638 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-09-29   最后修改:2009-09-29

composite是树形结构,那么我下面就用树的结构来写代码,希望对大家有所帮助 ======================================================================

 

//分支

public interface Brache {
 public void run();
}

 

======================================================================

 

//花
public class Flower implements Brache {
 public void run() {
  System.out.println("花儿怒放^_^");
 }
}

 

======================================================================

 

//叶子
public class Leaf implements Brache {
 public void run() {
  System.out.println("叶子长大了");
 }
}

 

======================================================================

 

//主干
public class Trunk implements Brache {

 private List<Brache> components = new ArrayList<Brache>();

 public void addComponent(Brache component) {
  if (component instanceof Leaf) {
   System.out.println("长新叶了");
  } else if (component instanceof Flower) {
   System.out.println("花苞初成");
  }
  components.add(component);
 }

 public void removeComponent(Brache component) {
  if (component instanceof Leaf) {
   System.out.println("叶子枯了");
  } else if (component instanceof Flower) {
   System.out.println("花儿谢了");
  }
  components.remove(component);
 }

 public List<Brache> getAllCompoments() {
  return components;
 }

 public void run() {
  for (Brache tempC : components) {
   tempC.run();
  }
 }
}

 

======================================================================

 

public class Client {
 //客户的(演示主干的形成)
 public static void main(String[] args) {
  //叶子
  Leaf leaf = new Leaf();
  //含苞的花儿啊
  Flower flower = new Flower();
  //主干一号
  Trunk trunk1 = new Trunk();
  trunk1.addComponent(leaf);//长出一片叶子
  trunk1.addComponent(flower);//冒出花苞
  trunk1.addComponent(flower);//冒出花苞
  trunk1.addComponent(flower);//冒出花苞
  //主干二号
  Trunk trunk2 = new Trunk();
  //枝繁叶茂
  trunk2.addComponent(leaf);//长出一片叶子
  trunk2.addComponent(leaf);//长出一片叶子
  trunk2.addComponent(leaf);//长出一片叶子
  trunk2.addComponent(leaf);//长出一片叶子
  trunk2.addComponent(leaf);//长出一片叶子
  //原来主干2是长在主干1上的分支
  trunk1.addComponent(trunk2);
  //像电影一样播放了
  trunk1.run();
 }
}

 

======================================================================

 

看了网上有的兄台写的资料,学习了一下,稍微做了个整理,希望对要学习的兄台有所帮助。呵呵!

   发表时间:2009-09-29  
编辑器真烂啊
0 请登录后投票
   发表时间:2009-09-29  
不知道该说什么,只是感觉很奇怪,只有一个问题,如果你一不小心往叶子上加一个花的时候怎么办呀? 树根节点的时候如果考虑了这个会比较好的。
0 请登录后投票
   发表时间:2009-09-29  
mwmw 写道
不知道该说什么,只是感觉很奇怪,只有一个问题,如果你一不小心往叶子上加一个花的时候怎么办呀? 树根节点的时候如果考虑了这个会比较好的。

恩,是。有空再改改,我的理解不够深刻。
0 请登录后投票
   发表时间:2010-02-22  
mwmw 写道
不知道该说什么,只是感觉很奇怪,只有一个问题,如果你一不小心往叶子上加一个花的时候怎么办呀? 树根节点的时候如果考虑了这个会比较好的。

叶子上门加不了花,没有这方法存在呢
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics