java-设计模式(结构型)-【组合模式】

1.组合模式(Composite)

定义:组合模式有时又叫部分-整体模式在处理类似树形结构的问题时比较方便

使用场景:将多个对象组合在一起进行操作,常用于表示树形结构中,例如二叉树,数等,文件目录。

2.文件复制例子

文件类:

//对文件各种操作的接口
public interface FileOperate {

	void copy();
}
//file:单个文件
class File implements FileOperate
{
	//文件名
    private String fileName=null;
    public File(String fileName)
    {
    	this.fileName=fileName;
    }
	@Override
	public void copy() {
		// TODO Auto-generated method stub
		System.out.println("复制“"+fileName+"”文件。。。");
	}

    public String getFileName() {
		return fileName;
	}
	public void setFileName(String fileName) {
		this.fileName = fileName;
	}

}
//文件夹:包含所有的子文件
class FileFolder implements FileOperate
{
	//文件夹名
    private String folderName=null;
    //所有的子文件
    private ArrayList<File> child=new ArrayList<File>();
    public FileFolder(String folderName)
    {
    	this.folderName=folderName;
    }
    //添加子文件方法
    public void add (File file)
    {
    	child.add(file);
    }

    @Override
	public void copy() {
		// TODO Auto-generated method stub
    	System.out.println("当前文件夹:"+folderName);
    	Iterator it=child.iterator();
    	while(it.hasNext())
    	{
    	 File f=(File) it.next();
		  f.copy();
    	}
	}

    public String getFolderName() {
		return folderName;
	}
	public void setFolderName(String folderName) {
		this.folderName = folderName;
	}

}

  测试:

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
        FileFolder root=new FileFolder("我的视频");
        File file1=new File("致命ID.avi");
        File file2=new File("两天一夜.rmvb");
        //添加文件
        root.add(file1);
        root.add(file2);
        //复制文件
        root.copy();
	}
}

  运行结果:

当前文件夹:我的视频
复制“致命ID.avi”文件。。。
复制“两天一夜.rmvb”文件。。。

  

时间: 2024-11-13 10:59:37

java-设计模式(结构型)-【组合模式】的相关文章

设计模式-结构型-组合模式

组合模式(Composite): 定义: 组合模式又叫部分整体模式,它是一种将对象组合成树状的层次结构模式,用来表示"部分-整体"的关系,使用户对单个对象和组合对象具有一致的访问性. 组合模式的角色: 1)抽象构建(Component):它的主要作用是为树叶构件和树枝构件声明公共接口,并实现它们的默认行为.在透明式的组合模式中抽象构件还声明访问和管理子类的接口:在安全式的组合模式中不声明访问和管理子类的接口,管理工作由树枝构件完成. 2)树叶构件(Leaf):是组合中的叶节点对象,它没

java设计模式--结构型模式--组合模式

什么是组合模式,这个有待研究,个人觉得是各类组合而形成的一种结构吧. 组合模式: 1 组合模式 2 概述 3 将对象组合成树形结构以表示"部分-整体"的层次结构."Composite使得用户对单个对象和组合对象的使用具有一致性." 4 5 6 适用性 7 1.你想表示对象的部分-整体层次结构. 8 9 2.你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象. 10 11 12 参与者 13 1.Component 14 为组合中的对象声明接

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

先看看组合模式的定义吧:"将对象组合成树形结构以表示'部分-整体'的层次结构.组合模式使得用户对单个对象和组合对象的使用具有一致性." /** * 抽象组件 */ public interface Component { void operation(); } /** * 叶子组件 */ interface Leaf extends Component{ } /** * 容器组件 */ interface Composite extends Component{ } public in

java设计模式 GOF23 09 组合模式

一.组合模式简介 把整体和部分的关系用树形结构表示,从而可以统一处理. 二.组合模式实现细节 1)抽象构建:定义叶子和容器的共同特点. 2)叶子:没有子节点 3)容器:有容器的特征,可以包含子节点(一般实现的时候在这里添加容器存放子节点) 三.简单代码实现 package com.lz.combination; import java.util.ArrayList; import java.util.List; /* * 抽象构建 */ public interface IComponent {

Java设计模式之《组合模式》及应用场景

摘要: 原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/6489827.html 组合模式,就是在一个对象中包含其他对象,这些被包含的对象可能是终点对象(不再包含别的对象),也有可能是非终点对象(其内部还包含其他对象,或叫组对象),我们将对象称为节点,即一个根节点包含许多子节点,这些子节点有的不再包含子节点,而有的仍然包含子节点,以此类推.很明显,这是树形结构,终结点叫叶子节点,非终节点(组节点)叫树枝节点,第一个节点叫根节点.同时也类似于

java设计模式--结构型模式--享元模式

享元模式 概述 运用共享技术有效地支持大量细粒度的对象. 适用性 当都具备下列情况时,使用Flyweight模式: 1.一个应用程序使用了大量的对象. 2.完全由于使用大量的对象,造成很大的存储开销. 3.对象的大多数状态都可变为外部状态. 4.如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象. 5.应用程序不依赖于对象标识.由于Flyweight对象可以被共享,对于概念上明显有别的对象,标识测试将返回真值. 参与者 1.Flyweight 描述一个接口,通过这个接口flywe

java设计模式--结构型模式--桥接模式

1 桥接模式 2 概述 3 将抽象部分与它的实现部分分离,使它们都可以独立地变化. 4 5 6 适用性 7 1.你不希望在抽象和它的实现部分之间有一个固定的绑定关系. 8 例如这种情况可能是因为,在程序运行时刻实现部分应可以被选择或者切换. 9 10 2.类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充. 11 这时Bridge模式使你可以对不同的抽象接口和实现部分进行组合,并分别对它们进行扩充. 12 13 3.对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新编译.

java设计模式--结构型模式--装饰模式

1 装饰模式 2 概述 3 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator模式相比生成子类更为灵活. 4 5 6 适用性 7 1.在不影响其他对象的情况下,以动态.透明的方式给单个对象添加职责. 8 9 2.处理那些可以撤消的职责. 10 11 3.当不能采用生成子类的方法进行扩充时. 12 参与者 13 1.Component 14 定义一个对象接口,可以给这些对象动态地添加职责. 15 16 2.ConcreteComponent 17 定义一个对象,可以给这个对象添

java设计模式--结构型模式--外观模式

1 外观模式 2 概述 3 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 4 5 6 适用性 7 1.当你要为一个复杂子系统提供一个简单接口时.子系统往往因为不断演化而变得越来越 8 复杂.大多数模式使用时都会产生更多更小的类.这使得子系统更具可重用性,也更容 9 易对子系统进行定制,但这也给那些不需要定制子系统的用户带来一些使用上的困难. 10 Facade可以提供一个简单的缺省视图,这一视图对大多数用户来说已经足够,而那些需

Java设计模式之接口型模式总结

摘要: 原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6508967.html 之前认真学习了Java设计模式中的四大接口型模式,分别为:适配器模式(Adapter).外观模式(Facade).合成模式(Composite).桥接模式(Bridge). 1.在此处再温习一下四种设计模式: (1)适配器模式: 我们能够访问的类中不存在我们要访问的内容时,就可以使用这个适配器模式,当然就类而言,其实不存在什么不能被访问,这里的不能访问都是人