zoukankan      html  css  js  c++  java
  • Composite 组合模式

      

     

      注:组合模式是结构型设计模式 将对象组合成树形结构以表示部分整体的关系,Composite使得用户对单个对象和组合对象的使用具有一致性。

     

      组合模式又叫部分-整体模式,它使我们在树形结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样处理复杂元素,从而使得客户程序和复杂元素的内部结构的解耦。

     

      组合模式在文件系统中有一个经典使用,文件夹、不同的文件组成一个非常复杂的树形结构,而我们的copy 操作,可以不必关心被copy的对象的树形结构。

     

    Java可简单实现

     

    1,定义一个树形节点接口

     

    package com.pattern.structure.composite;
    
     
    
    public interface Node {
    
     
    
    public void copy() ;
    
    }

     

    2,定义两个文件

    Mp3文件

     

    package com.pattern.structure.composite;
    
     
    
    public class Mp3 implements Node {
    
     
    
    @Override
    
    public void copy() {
    
     
    
    System.out.println("copy mp3...");
    
    }
    
     
    
    }

     

    Word文件

     

    package com.pattern.structure.composite;
    
     
    
    public class Word implements Node {
    
     
    
    @Override
    
    public void copy() {
    
     
    
    System.out.println("copy word...");
    
    }
    
     
    
    }

     

    3,定义一个文件夹

     

    package com.pattern.structure.composite;
    
     
    
    import java.util.ArrayList;
    
    import java.util.List;
    
     
    
     
    
    public class Folder implements Node {
    
     
    
    private List<Node> nodes = new ArrayList<Node>() ;
    
     
    
    public void add(Node node) {
    
    nodes.add(node) ;
    
    }
    
     
    
    @Override
    
    public void copy() {
    
    for(Node node : nodes) {
    
    node.copy(); 
    
    }
    
    }
    
     
    
    }

     

    4,定义一个客户端程序

     

    package com.pattern.structure.composite;
    
     
    
    public class Client {
    
     
    
    public static void main(String[] args) {
    
    // 简单元素
    
    Node mp3 = new Mp3() ;
    
    Mp3.copy(); 
    
     
    
    // 复杂元素
    
    Node word = new Word() ;
    
    Folder folder = new Folder() ;
    
     
    
    folder.add(mp3); 
    
    folder.add(word);
    
     
    
    Folder root = new Folder() ;
    
    root.add(folder); 
    
    root.add(word);
    
     
    
    root.copy();
    
    }
    
    }

     

     

    可以看出,使用组合模式,树形结构的元素(简单元素或者复杂元素),对客户端的调用来说,是解耦的。

     

    组合模式通用类图

     

    ------

      文章只为技术交流学习,若所写有误,请斧正,评论或消息与我,为不误导后来学习的人;若有不小心所写侵权,请告知我;若转载,请注明出处。

      

     

     

     

    松下问童子,言师采药去。 只言此山中,云深不知处。
  • 相关阅读:
    ACS 20070108 更新
    道德沦丧 还是意识淡薄
    Alienwave.CommunityServer 20070103 更新
    无题
    《白马啸西风》之李文秀
    突然感觉自己像拉皮条的
    数据库日志文件(x.ldf)如何打开?
    调试.NET出错
    老大离开南京了
    最近太任性了
  • 原文地址:https://www.cnblogs.com/sten/p/3348382.html
Copyright © 2011-2022 走看看