設計模式--組合模式的簡單實現以及思路

前言:

 組合模式可以看做是文件系統,文件夾和文件都是一種存貯方式,文件又分爲圖像、文本、視頻等文件,文件夾下有包含有其他的文件或者文件夾

 他們每一個都是一個節點,因此客戶端可以使用統一的方式來進行處理。文件夾下包含着一個集合用於存儲它的子節點

把部分和整體的關係使用樹形結構來表示,從而使客戶端可以使用統一的方式

處理部分的對象和整體對象

組合模式核心

  抽象構件(Component)角色:定義了葉子和容器構件的共同點

  葉子(Leaf) 構件角色:無子節點

  容器(Composite)構件角色:有容器特徵,可以包含子節點

一、代碼實現

  

package Composite;

import java.util.ArrayList;
import java.util.List;

//相當於基本的節點
public interface AbstractFile {
	void killVIrus();
}
//不同的文件類型
class ImageFile implements AbstractFile
{ private String name;
   
	public ImageFile(String name) {
	super();
	this.name = name;
}

	@Override
	public void killVIrus() {
		// TODO 自動生成的方法存根
		System.out.println("對圖像文件"+name+"進行查殺");
	}
	
}
class TextFile implements AbstractFile
{ private String name;
   
	public TextFile(String name) {
	super();
	this.name = name;
}

	@Override
	public void killVIrus() {
		// TODO 自動生成的方法存根
		System.out.println("對文本文件"+name+"進行查殺");
	}
	
}
class VideoFile implements AbstractFile
{ private String name;
   
	public VideoFile(String name) {
	super();
	this.name = name;
}

	@Override
	public void killVIrus() {
		// TODO 自動生成的方法存根
		System.out.println("對視屏文件"+name+"進行查殺");
	}
	
}
//文件夾,同樣也是節點
class Folder implements AbstractFile
{  private String name;
  public Folder(String name) {
	super();
	this.name = name;
}
  //有一個集合包含着它的子節點
List<AbstractFile> list=new ArrayList<AbstractFile>();
     public void add(AbstractFile abstractFile)
     
     {
    	 list.add(abstractFile);
    //	 System.out.println("成功將文件添加!");
     }
     public void remove(AbstractFile abstractFile)
     {
    	 list.add(abstractFile);
    //	 System.out.println("成功將文件刪除!");
     }
     public AbstractFile get(Integer index)
     {
    	return  list.get(index);
     }
	@Override
	//遞歸遍歷
	public void killVIrus() {
		// TODO 自動生成的方法存根
		System.out.println("對文件夾"+name+"進行查殺");
		for (AbstractFile abstractFile : list) {
			abstractFile.killVIrus();
		}
		
	}
	
}


調用:

package Composite;

public class Client {
	public static void main(String[] args) {
		AbstractFile f2,f3,f4,f5;
		Folder folder,folder2;
		 f2=new ImageFile("揚哥哥的大頭照.jpg");
		f3=new TextFile("日誌.txt");
		 folder=new Folder("我的收藏");
		 folder2=new Folder("我的收藏子文件");
		 folder.add(f2);
		 folder.add(f3);
		 folder.add(folder2);
		 folder.killVIrus();
	}

}

實現結果:

二、應用場景

  操作系統的資源管理器

 GUI中的容器層次圖

 XML文件解析

 OA系統中組織結構處理

 Junit單元測試框架

  底層設計就是組合模式,TestCase(葉子) TestUnite(容器)   Test接口

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章