组合模式(Composite)-结构性

意图

组合模式(合成模式)又叫部分-整体模式。合成模式将对象组织成树结构,可以用来描述整体与部分的关系。合成模式可以使客户端将单纯元素与复合元素同等看待。

文件系统

比如,一个文件系统就是一个典型的组合模式系统。文件系统是一个树结构,树的节点有两种,一种是树枝节点(目录),一种是树叶节点(文件)。显然,可以把目录和文件当做同一种对象同等对待和处理。这也就是组合模式的应用。
组合模式(Composite)-结构性_第1张图片

类图与角色(安全式组合模式)

组合模式(Composite)-结构性_第2张图片

构建接口(Component):参加组合的对象的公共接口。

树叶构件(Leaf):代表参加组合的没有下级子对象的对象。

树枝构建(Composite):代表参加组合的有下级子对象的对象。

实例

//构件接口
interface Resource{//资源
    public int getSize();
}
//树叶构件
class File implements Resource{//文件
    private String name;
    private int size;
    public File(String name,int size){
        this.name=name;
        this.size=size;
    }
    @Override
    public int getSize(){
        System.out.println("文件"+name+"大小:"+size);
        return this.size;
    }
}
//树枝构件
class Directory implements Resource{
    private String name;
    private List<Resource> resources=new ArrayList<Resource>();
    public Directory(String name){
        this.name=name;
    }
    @Override
    public int getSize(){
        int size=0;
        for(Resource r:resources){
            size+=r.getSize();
        }  
        System.out.println("文件夹"+name+"大小:"+size);
        return size;
    }
    public void add(Resource r){
        resources.add(r);
    }
    public void remove(Resource r){
        resources.remove(r);
    }
    public List<Resource> getResourcess(){
        return resources;
    }
}
class test  {
	public static void main (String[] args) throws java.lang.Exception{
	    Directory diskC=new Directory("diskC");
	    File boot=new File("boot.ini",10);
	    diskC.add(boot);
	    Directory programFiles=new Directory("programFiles");
	    File qq=new File("qq.data",200);
	    programFiles.add(qq);
	    diskC.add(programFiles);
	    Directory windows=new Directory("windows");
	    File explore=new File("explore.exe",300);
	    windows.add(explore);
	    Directory config=new Directory("config");
	    File qqConfig=new File("qqConfig.xml",3);
	    config.add(qqConfig);
	    windows.add(config);
	    diskC.add(windows);
	    System.out.println("C盘大小为:"+diskC.getSize());
	}
}

你可能感兴趣的:(组合模式,合成模式,composite模式)