Java设计模式-11、组合模式-树形结构的处理

第11章:组合模式-树形结构的处理

定义:

组合模式(Composite Pattern):组合多个对象形成树形结构以表示具有“整体—部分”关系的层
次结构。组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致
性。

递归处理

杀毒软件需要对文件夹和具体文件进行杀毒,文件夹称为容器,具体文件称为叶子

结构:

image-20201104213133083

代码实现:

//抽象构件
abstract class Component {
   
    public abstract void add(Component c); //增加成员

    public abstract void remove(Component c); //删除成员

    public abstract Component getChild(int i); //获取成员

    public abstract void operation(); //业务方法
}
//叶子构件
class Leaf extends Component {
   
    public void add(Component c) {
   
        //异常处理或错误提示
    }

    public void remove(Component c) {
   
        //异常处理或错误提示
    }

    public Component getChild(int i) {
   
        //异常处理或错误提示
        return null;
    }

    public void operation() {
   
        //叶子构件具体业务方法的实现
    }
}
//容器构件
class Composite extends Component {
   

    private ArrayList<Component> list = new ArrayList<Component>();

    public void add(Component c) {
   
        list.add(c);
    }

    public void remove(Component c) {
   
        list.remove(c);
    }

    public Component getChild(int i) {
   
        return (Component) list.get(i);
    }

    public void operation() {
   
        //容器构件具体业务方法的实现
        //递归调用成员构件的业务方法
        for (Object obj : list) {
   
            ((Component) obj).operation();
        }
    }
}

应用实例:

杀毒软件需要对文件夹和具体文件进行杀毒,文件夹称为容器,具体文件称为叶子

image-20201104211907185

image-20201104211922676

使用面向对象的方式实现杀毒
//图像文件类
class ImageFile {
   
    private String name;

    public ImageFile(String name) {
   
        this.name = name;
    }

    public void killVirus() {
   
        //简化代码,模拟杀毒
        System.out.println("----对图像文件'" + name + "'进行杀毒");
    }
}

//文本文件类
class TextFile {
   
    private String name;

    public TextFile(String name) {
   
        this.name = name;
    }

    public void killVirus() {
   
        //简化代码,模拟杀毒
        System.out.println("----对文本文件'" + name + "'进行杀毒"</
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值