`

易学设计模式二 组合模式(Composite)

阅读更多
组合模式

将对象组合成树形结构以表示"部分-整体"的层次结构。"Composite使得用户对单个对象和组合对象的使用具有一致性


适用性

    1.你想表示对象的部分-整体层次结构。

    2.你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。





不废话,上代码

public interface Node {

	public void copy();  //定义统一的接口:复制
	
}


public class Folder implements  Node{

	private String folderName; 
	private ArrayList<Node> nodeList = new ArrayList<Node>(); //用于存储文件夹下的文件夹或文件的信息    
	
	public Folder(String folderName){    
        this.folderName = folderName;    
    }    
	
	 public void add(Node node){  //增加文件或文件夹    
         nodeList.add(node);    
     }   
	 
	 public void remove(Node node) {
		 nodeList.remove(node);
	 }
	 
	 public void copy(){   //文件夹复制操作实现递归    
         System.out.println("复制文件夹:" + folderName);    
         for(int i=0;i<nodeList.size();i++){    
             Node node = (Node)nodeList.get(i);    
             node.copy();    
         }    
     }    
}


public class File implements Node {
	
	private String fileName;
	
	public File(String fileName){    
        this.fileName = fileName;    
    }    
   
    public void copy(){    
        System.out.println("复制文件:" + fileName);    
    }    

}


public class Client {

	public static void main(String[] args) {

		Folder document = new Folder("我的资料");  //我的资料文件夹    
        File book = new File("Java编程思想.pdf");   //文档文件    
        Folder music = new Folder("我的音乐");    //我的音乐文件夹    
        Folder goodVoice = new Folder("好声音");
        File music1 = new File("你是我的眼.mp3");    //音乐文件1    
        File music2 = new File("Without You.mp3");   //音乐文件2    
        File music3 = new File("rock You.mp3");   //音乐文件2    
        //确定树形结构关系    
        document.add(book);    
        document.add(music);    
        music.add(goodVoice);
        goodVoice.add(music3);
        music.add(music1);    
        music.add(music2);    
   
        document.copy(); //复制“我的资料”文件夹,递归地复制了其下所有文件夹和文件。

	}

}


输出

复制文件夹:我的资料
复制文件:Java编程思想.pdf
复制文件夹:我的音乐
复制文件夹:好声音
复制文件:rock You.mp3
复制文件:你是我的眼.mp3
复制文件:Without You.mp3
  • 大小: 81.4 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics