码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA设计模式(10):结构型-组合模式(Composite)

时间:2015-04-22 18:09:40      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:设计模式   组合模式   

先看看组合模式的定义吧:“将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。

/**
 * 抽象组件
 */
public interface Component {
	void operation();
}
/**
 * 叶子组件
 */
interface Leaf extends Component{
	
}
/**
 * 容器组件
 */
interface Composite extends  Component{
	
}

public interface AbstractFile {
	void killVirus();
}
class ImageFile implements AbstractFile{
	private String name;
	
	public ImageFile(String name) {
		super();
		this.name = name;
	}

	@Override
	public void killVirus() {
		System.out.println("图像文件"+name+"进行查杀");
	}
}
class TextFile implements AbstractFile{
	private String name;
	
	public TextFile(String name) {
		super();
		this.name = name;
	}

	@Override
	public void killVirus() {
		System.out.println("文本文件"+name+"进行查杀");
	}
}
class VideoFile implements AbstractFile{
	private String name;
	
	public VideoFile(String name) {
		super();
		this.name = name;
	}

	@Override
	public void killVirus() {
		System.out.println("视频文件"+name+"进行查杀");
	}
}
class Folder implements AbstractFile{
	private String name;
	
	private List<AbstractFile> list = new ArrayList<AbstractFile>();
	
	public Folder(String name) {
		super();
		this.name = name;
	}
	
	public void add(AbstractFile file){
		list.add(file);
	}
	
	public void remove(AbstractFile file){
		list.remove(file);
	}
	
	public AbstractFile getChildr(int index){
		return list.get(index);
	}

	@Override
	public void killVirus() {
		System.out.println("文件夹"+name+"进行查杀");
		
		for(AbstractFile file:list){
			file.killVirus();
		}
	}
}


测试:

public class Client {
    
	public static void main(String[] args) {
		AbstractFile f2,f3,f4,f5;
		Folder f1 = new Folder("我的收藏");
		f2 = new ImageFile("mm.jpg");
		f3 = new TextFile("123.txt");
		f1.add(f2);
		f1.add(f3);
		
		Folder f11 = new Folder("我的电影");
		f4 = new VideoFile("笑傲江湖.avi");
		f5 = new VideoFile("神雕侠侣.mp4");
		f11.add(f4);
		f11.add(f5);
		
		f1.add(f11);
		
		f1.killVirus();
	}
	
}

什么情况下使用组合模式

       引用大话设计模式的片段:“当发现需求中是体现部分与整体层次结构时,以及你希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时,就应该考虑组合模式了。”

JAVA设计模式(10):结构型-组合模式(Composite)

标签:设计模式   组合模式   

原文地址:http://blog.csdn.net/lovesomnus/article/details/45197889

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!