java设计模式(一)——组合模式

合并模式把部分和整体的关系用树结构表示出来。

  • 一个文件系统就是一个合成模式系统
  • 树上有节点:树枝,树叶
  • 树枝:目录
  • 树叶:文件
  • 下面是组合模式的类图:
  • 下面是简单代码实现:
    import java.util.*;
    
    abstract class AbstractFile {
    	protected String name;//目录或文件名
    	public AbstractFile() {
    		
    	}
    	public AbstractFile(String name) {
    		this.name = name;
    	}
    }
    class File extends AbstractFile{
    	
    	public File() {
    		
    	}
    	public File(String name) {
    		super(name);
    	}
    	
    }
    class Folder extends AbstractFile{
    	private List<AbstractFile> list= new ArrayList<AbstractFile>();
    	public Folder() {
    		
    	}
    	public Folder(String name) {
    		super(name);
    	}
    	public void add(AbstractFile t) {
    		list.add(t);
    	}
    	public void out(Folder af) {
    		int len = af.list.size();
    		for(int i=0; i<len; ++i) {
    			System.out.println(af.list.get(i).name);
    			if(af.list.get(i) instanceof Folder) {//如果是目录
    				Folder f = (Folder)af.list.get(i);
    				f.out(f);	//递归实现输出文件或目录名称
    			}
    				
    		}
    	}
    }
    测试类:
    public class TestAbstractFile {
    	
    	public static void main(String[] args) {
    		Folder f = new Folder("F:\\");
    		
    		File file1 = new File("1.a");//文件
    		File file2 = new File("1.b");
    		Folder f1 = new Folder("\\aa");//目录
    		
    		File file3 = new File("2.a");
    		File file4 = new File("2.b");
    		Folder f2 = new Folder("\\bb");	
    		
    		File file5 = new File("3.a");
    		File file6 = new File("3.b");
    		
    		//组合
    		
    		f.add(file1);
    		f.add(file2);
    		
    		f.add(f1);			
    		f1.add(file3);
    		f1.add(file4);
    		
    		f1.add(f2);
    		f2.add(file5);
    		f2.add(file6);
    		//输出所有文件的name,包括目录名
    		f.out(f);
    	}
    
    }
    输出结果:
1.a
1.b
\aa
2.a
2.b
\bb
3.a
3.b


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值