`
丶西红柿丿炒蛋
  • 浏览: 5550 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

合成模式

 
阅读更多

定义

        讲对象组织到树结构中,用来描述整体和部分的关系。也叫部分-整体模式。合成模式可以使客户端讲单纯元素与复合元素同等看待。即合成模式把部分和整体的关系用树结构表示出来,使得客户端把一个个单独的成分对象和由这些成分对象组成的合成对象同等看待。

 

组成

   

        抽象构件角色(Component):抽象角色,给参加组合的对象规定一个接口,给出共有的接口及其默认行为。

        树叶构件角色(Leaf):代表参与组合的树叶对象。树叶没有下级的子对象。定义出参加组合的原始对象的行为。

        树枝构件角色():代表参与组合的有子对象的对象,并给出树枝构件对象的行为。

 

分类

   组合模式根据实现接口的不同分为两种形式:

        1)安全式

        

        安全式的合成模式要求管理聚集的方法只出现在树枝构件的类中。这中结构的组成为:

        抽象构件角色(Component):抽象角色,给参加组合的对象定义默认的行为和公共接口。可以管理所有的子对象。构件角色并不定义管理子对象的方法,这一定义有树枝构件对象给出。

        树叶构件角色(Leaf):没有下级子对象,定义出参加组合的原始对象行为。

        树枝构件角色(Composite):代表参与组合的下级子对象的对象。给出所有的管理子对象的方法。

interface Component{
    Composite getConposite();
    void sampleOperation();
}
class Composite implements Component{
    private Vector<Component> componentVector = new Vector<Component>();
    public Composite getConposite() {
        return this;
    }
    public void sampleOperation() {
        Enumeration<Component> enumeration = components();
        while(enumeration.hasMoreElements()){
            enumeration.nextElement().sampleOperation();
        }
    }
    public void add(Component component){
        componentVector.addElement(component);
    }
    public void remove(Component component){
        componentVector.removeElement(component);
    }
    public Enumeration<Component> components(){
        return componentVector.elements();
    }
}
class Leaf implements Component{
    public Composite getConposite() {
        return null;
    }
    public void sampleOperation() {
        System.out.println("to do operation");
    }
}

 

 

        2)透明式

         透明式要求所有的具体构件类,无论树枝还是树叶都符合一个固定的接口。


interface Component{
    Composite getConposite();
    void sampleOperation();
    void add(Component component);
    void remove(Component component);
    Enumeration<Component> components();
}
class Composite implements Component{
    private Vector<Component> componentVector = new Vector<Component>();
    public Composite getConposite() {
        return this;
    }
    public void sampleOperation() {
        Enumeration<Component> enumeration = components();
        while(enumeration.hasMoreElements()){
            enumeration.nextElement().sampleOperation();
        }
    }
    public void add(Component component){
        componentVector.addElement(component);
    }
    public void remove(Component component){
        componentVector.removeElement(component);
    }
    public Enumeration<Component> components(){
        return componentVector.elements();
    }
}
class Leaf implements Component{
    public Composite getConposite() {
        return null;
    }
    public void sampleOperation() {
        System.out.println("to do operation");
    }
    public void add(Component component){
    }
    public void remove(Component component){
    }
    public Enumeration<Component> components(){
        return null;
    }
}

         树叶类给出了add()、remove()、compnents()等方法的实现,但是这些方法其实不适用树叶类。

 

 

 

 

参考:

《Java与模式》

 

 

 

 


 

 

 

  • 大小: 4.9 KB
  • 大小: 13.5 KB
  • 大小: 14.5 KB
分享到:
评论

相关推荐

    设计模式之合成模式Java实现和类设计图

    设计模式之合成模式的Java实现版本,包括UML类设计图,包含了两种实现,安全式和透明式

    JAVA与模式

     合成模式属于对象的结构模式,有时又叫做“部分——整体”模式。合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式可以使客户端将单纯元素与复合元素同等看待。 合成模式  合成模式把部分...

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

    二、合成模式中主要角色 抽象组件(Component)角色:抽象角色,给参加组合的对象规定一个接口。在适当的情况下,实现所有类共有接口的缺省行为。声明一个接口用于访问和管理Component的子组件 树叶组件(Leaf)角色:在...

    C#设计模式.PDF

    七、 使用合成模式时考虑的几个问题 97 八、 和尚的故事 98 九、 一个实际应用Composite模式的例子 98 C#设计模式(12)-Decorator Pattern 101 一、 装饰(Decorator)模式 101 二、 装饰模式的结构 102 三、 装饰...

    C#设计模式大全

    七、 使用合成模式时考虑的几个问题 八、 和尚的故事 九、 一个实际应用Composite模式的例子 C#设计模式(12)-Decorator Pattern 一、 装饰(Decorator)模式 二、 装饰模式的结构 三、 装饰模式示例性代码 ...

    Delphi模式编程第一分卷

    11.3.1 合成模式在组织机构管理系统中的应用 11.3.2 范例小结 第12章 装饰者模式(Decorator) 12.1 模式解说 12.2 结构和用法 12.2.1 模式结构 12.2.2 代码模板 12.2.3 问题讨论 12.3 范例与实践 12.3.1 ...

    C#设计模式结构型

    合成模式(Composite) • 设计方案一: 合成模式(Composite) • 设计方案二 合成模式(Composite) • 设计方案一和设计方案二的区别 – 设计方案二使得客户端更不需要关心所需处理的组件的 类别 – 设计方案二...

    MS-TTS影视解说配音工具神器 解锁版合成语音非常接近真人

    5、SSML模式:试听模式主体内容长度不得超过150字符,合成模式主体内容长度不得超过2500字符; 更新内容: 1.9.5 1、界面大小可自行调整; 2、Edge接口数据汉化; 3、角色数量增加到20个; 4、恢复强制更新。...

    Delphi模式编程第二分卷

    11.3.1 合成模式在组织机构管理系统中的应用 11.3.2 范例小结 第12章 装饰者模式(Decorator) 12.1 模式解说 12.2 结构和用法 12.2.1 模式结构 12.2.2 代码模板 12.2.3 问题讨论 12.3 范例与实践 ...

    C#23种设计模式_示例源代码及PDF

    合成模式:合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式就 合成模式 是一个处理对象的树结构的模式。 合成模式把部分与整体的关系用树结构表示出来。 合成模 式使得客户端把一个个单独的...

    MS-TTS影视解说配音工具神器 解锁版合成语音非常接近真人.zip

    MS-TTS影视解说配音工具神器 解锁版 微软TTS文本转语音引擎的确是非常NB,合成语音非常接近真人,应该是当前同类产品中...5、SSML模式:试听模式主体内容长度不得超过150字符,合成模式主体内容长度不得超过2500字符;

    java与模式

    1:模式的简史和形而上学;2:统一建模语言UML简介;3:软件的可维护性与可复用性;4:开-闭 原则;5:java语言接口;6:抽象类;...24:合成模式;25:装饰模式;26:设计模式在JAVA I/O设计原则;28:代理模式;....

    源码:阎宏设计模式光盘

    com.javapatterns.composite 合成模式 com.javapatterns.decorator 装饰模式 com.javapatterns.dip 依赖倒转原则 com.javapatterns.doubledispatch 专题:单分派与多分派 com.javapatterns.facade 门面模式 ...

    浅析java常用的设计模式(doc-23页).doc

    8、合成模式:合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。 合成模式就是一个处理对象的树结构的模式。合成模式把部分与整体的关系用树结构表 示出来。合成模式使得客户端把一个个单独的成分对象...

    百度语音合成,离线模式,非离线模式

    集成了百度语音合成的离线模式,在线模式,经测试是可以正常运行,百度不支持纯离线,离线第一次必须先连网校验通过之后,离线才能使用。

    Photoshop图层混合模式的计算公式探讨.txt

    Photoshop图层混合模式的计算公式探讨。图层混合模式是Photoshop CS3中最核心的功能之一,也是在图像处理中最为常用的一种技术手段。使用图层混合模式可以创建各种图层特效,实现充满创意的游戏画面设计作品。

    设计模式6大原则:里氏置换原则

    设计模式6大原则:里氏置换原则

Global site tag (gtag.js) - Google Analytics