追MM 之合成模式实现

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://dba10g.blog.51cto.com/764602/230210

这一周,MM 告诉我要我见一次家长。听说,他们家计划生育执行的很不好,人丁兴旺啊。她爷爷就有10 几个儿子,儿子每个儿子又有很多儿子,儿子也有很多儿子。 要我一口气记下来,不累死才怪。还好ME  我学会了合成模式。把所有对象之间的关系,组建成一个树。只要告诉某个人,我立刻可以遍历出她所有的儿子信息来。

 

抽象构件:

package composite; 
 
public interface People { 
 
  public People getSelf();//返回自己的实例 
  public String getName();// 方便测试 
  public void operator();// 业务方法 

 

树叶构件:

package composite; 

public class Leaf implements People { 

  private String name; 
    
  public Leaf(String name){ 
    this.name = name; 
  } 
  public People getSelf() { 
     
    return this; 
  } 

  public void operator() { 
     

  } 
  public String getName() { 
    return name; 
  } 

 

3.树枝构件

package composite; 

import java.util.Vector; 

public class Composite implements People { 
  private String name; 
  private Vector<People>    sons =    new Vector<People>(); 
  public Composite(String name){ 
    this.name = name; 
  } 
    
  public People getSelf() { 
    return this; 
  } 

  public void add(People son){ 
    sons.add(son); 
  } 
    
    
  public void operator() { 
     
  } 

  public Vector<People> getSons(){ 
    return sons; 
  } 

  public String getName() { 
     
    return name; 
  } 

 

客户端

package composite; 

import java.util.Enumeration; 
import java.util.Vector; 

public class Client { 

  /** 
    * @param args 
    */ 
  public static void iteratorTree(Composite composite){ 
    Vector<People> sons = composite.getSons(); 
    Enumeration<People> enums = sons.elements(); 
    while(enums.hasMoreElements()){ 
      People son    =enums.nextElement(); 
      if(son instanceof Composite){ 
        Composite temp = (Composite)son; 
        System.out.println(son.getName()); 
        iteratorTree(temp); 
      }else{ 
        System.out.println(son.getName()); 
      } 
      /* 
        Composite temp = (Composite)son;//ClassCastException 
        System.out.println(son.getName()); 
        iteratorTree(temp); 
      */ 
    } 
  } 
  public static void main(String[] args) { 

    Composite root = new Composite("爷爷"); 
     
    Composite son1 = new Composite("儿子1"); 
    Composite son2 = new Composite("儿子2"); 
        
    People grandson11 = new Leaf("孙子11"); 
    People grandson112 = new Leaf("孙子12"); 
     
    root.add(son1); 
    root.add(son2); 
     
    son1.add(grandson112); 
    son1.add(grandson11); 
     
    iteratorTree(root); 
  } 

 

合成模式: 有两种方式,1.透明式合成模式、2安全式合成模式。

而以上代码 运用的是安全式合成模式。 因为 树枝构件 和树叶构件 虽然实现同一个接口,但是树枝却有很多自己客制化的方法。 如果树枝构件想访问那些方法,会在编译器过程中报错的,更谈不上运行时了。所以说来,是相对安全的。

 

另外一中透明式合成模式: 树叶构件和树枝构件拥有相同的方法,这些方法都是来自于抽象构件。说一说来,对于客户端来说,树叶构件和树枝构件都是一样的,没有区别。这势必造成了如果一个树叶对象,访问了树枝方法,具有危险性。

本文出自 “简单” 博客,请务必保留此出处http://dba10g.blog.51cto.com/764602/230210

时间: 2024-10-03 08:04:51

追MM 之合成模式实现的相关文章

追MM之原型模式实现

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dba10g.blog.51cto.com/764602/229578 跟MM用QQ聊天,一定要说些深情的话语了.但是,学理科的,哪有那多的情话啊,所以只能在网上搜集了好多肉麻的情话,需要时只要copy出来放到QQ里面就行了,这就是我的情话prototype了.     抽象原型角色:给出具体原型类的接口,一般要继承Cloneable接口 具体原型:被复制的对象,需要时,需要重写

从追MM谈Java的23种设计模式

Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE MicrosoftInternetExplorer4 从追MM 谈Java 的23 种设计模式   1 .FACTORY- 追MM 少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM 爱吃的东西,虽然口味有所不同,但不管你带MM 去麦当劳或肯 德基,只管向服务员说" 来四个鸡翅" 就行了.麦当劳和肯德基就是生产鸡翅的Factory.   工厂模式:客户类和工厂类分开.消费者任

合成模式-透明的

[关键字]:java,design pattern,设计模式,<Java与模式>学习,composite,合成模式 [环境]:StarUML5.0 + JDK6 [作者]:Winty (wintys@gmail.com) http://www.blogjava.net/wintys/ [正文]: 透明的合成模式 package pattern.composite.transparent; import java.util.*; /** * 透明的合成模式:Composite Pattern *

合成模式-安全的

[关键字]:java,design pattern,设计模式,<Java与模式>学习,composite,合成模式 [环境]:StarUML5.0 + JDK6 [作者]:Winty (wintys@gmail.com) http://www.blogjava.net/wintys/ [正文]: 安全的合成模式 安全的合成模式 package pattern.composite.safe; import java.util.*; /** * 安全的合成模式:Composite Pattern

Java与模式:合成模式

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 合成(Composite)模式是一种非常重要的设计模式,合成模式将对象组织到树中,用来描述树的关系.一.原理图从原理图可见,File.Folder都可以同等 看待苇IFile,为对象管理提供了极大的便利.当然,树的概念不单单是文件文件夹的层次概念,只 是因为这个很形象,实际中还有很多树的概念,比如组织机构,分类层次等等,都是逻辑上的概念,不管

学习php设计模式 php实现合成模式(composite)_php技巧

一.意图 将对象组合成树形结构以表示"部分-整体"的层次结构.Composite使用户对单个对象和组合对象的使用具有一致性. Composite变化的是一个对象的结构和组成.二.合成模式中主要角色抽象组件(Component)角色:抽象角色,给参加组合的对象规定一个接口.在适当的情况下,实现所有类共有接口的缺省行为.声明一个接口用于访问和管理Component的子组件树叶组件(Leaf)角色:在组合中表示叶节点对象,叶节点没有子节点.在组合中定义图元对象的行为.树枝组件(Composi

绘图,图层与合成模式

在LAYER调色板中,在MODE下拉列表中,有多种模式用于合成.了解这几种模式的作用,对图像的合成有重要的作用.下面进行详细的说明: Normal 模式 : 这是绘图与合成的基本模式,也是一个图层的标准模式.当一个色调和选择的图像区域合成进入到背景中时, Normal模式将下面的象素用增添到图像中的象素取代,这是对背景象素的一个直接替代. 在Normal模式中工作时,在最终确定一个编辑之前可以通过单击并拖动Opacity滑标来改变绘图和选择的不透明度,其中Opacity滑标在合成与合并图层时出现

做百度推广和追MM的异曲同工之处

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 伟大的雷锋同志说过:"对待同志像春天般温暖,对待工作像夏天般火热,对待个人主义像秋风扫落叶一样,对待敌人像冬天一样残酷无情",我觉得用在众多网站推广营销工作者身上真是再合适也不过了.下面分析几点,为什么对待百度和追未来的老婆有很多共通点.:) 一,不抛弃不放弃. 在国内做推广,如果你认为百度的优化和排名你做不上而放弃,转战

PS将MM婚纱照合成梦幻的森林蝴蝶仙子效果教程

本期重点:利用抠图.蒙版等技术合成复杂图像.为了让大家看到更清晰的操作,步骤可能有些多,只要耐心一定能学会!一起动手做哦-- 最终效果图: 原图: 蝴蝶素材: 背景: 分类:PS合成图片教程数码专题 ps婚纱照处理教程