【设计模式】组合模式

组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性,掌握组合模式的重点是要理解清楚“部分-整体”还有单个对象和组合对象的含义。组合模式可以让客户端修改配置文件一样简单的完成本来需要流程控制语句来完成的功能。经典案例:目录结构,网站导航结构等。

实例:文件夹系统

文件的统一接口

public interface File {
    /**
     * 增加子节点的方法
     */
    void add(File file);
    /**
     * 删除子节点的方法
     */
    void remove(File file);

    /**
     * 使用某个软件打开这个文件(文件打开方式)
     */
    void open();
}

文件夹也是一个文件,定义了文件夹的打开方式,和修改子节点的方式

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

public class Floder implements File{
    /**
     * 文件夹有子节点,定义一个存放子节点的集合(可以是set,list,map,Array等)
     */
    private List<File> files = new ArrayList<File>();

    public void add(File file) {
        System.out.println("添加文件");
        files.add(file);
    }

    public void remove(File file) {
        System.out.println("移除文件");
        files.remove(file);
    }

    public void open() {
        System.out.println("使用windows资源管理器打开了我这个文件夹");
    }
}

一个word文档

public class DocFile implements File {
    public void add(File file) {
        //word文档无子节点不做处理
    }

    public void remove(File file) {
        //word文档无子节点不做处理
    }

    public void open() {
        System.out.println("使用office2003打开了我这个Word文档");
    }

}

一个图片文档

public class ImageFile implements File {
    public void add(File file) {
        //图片无子节点不做处理
    }

    public void remove(File file) {
        //图片无子节点不做处理
    }

    public void open() {
        System.out.println("使用美图秀秀打开了我这个Image文档");
    }
}

调用示例

public class CompositeDemo {
    public static void main(String[] args) {
        //初始化操作,存在一个文件夹
        //文件夹下有一个word文档
        File floder = new Floder();
        File docFile = new DocFile();
        floder.add(docFile);

        //业务操作
        //打开文件夹
        floder.open();
        //打开word文档
        docFile.open();
        //移除word文档,并添加一个图片文档
        floder.remove(docFile);
        File imageFile = new ImageFile();
        floder.add(imageFile);
    }
}

 

Component   为组合中的对象声明接口,在适当情况下实现所有类共有接口的缺省行为

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值