组合模式composite

组合模式把整体和部分用树形结构来表示,就运用组合的方式进行对象操作。

抽象构件(Component):定义了叶子和容器构件的共同点。

叶子构件(Leaf):无子节点。

容器构件(Composite):有容器特征,可以包含子节点。

具体代码演示,模拟杀毒:

 1.抽象组件:

/**
 * 抽象组件
 */
public interface AbstractFile {
    void killVirus();
}

 2.容器组件,Folder文件夹:

/**
 * 容器组件
 */

class Folder implements AbstractFile{
    private String name;
    //用于存放本容器构件下的子节点
    private List<AbstractFile> list=new ArrayList<>();

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

    public void add(AbstractFile file){
        list.add(file);
    }

    public AbstractFile getChild(int index){
        return list.get(index);
    }

    public void remove(AbstractFile file){
        list.remove(file);
    }

    @Override
    public void killVirus() {
        System.out.println("--文件夹:"+name+"--查杀");
        //递归,查杀
        for (AbstractFile file : list) {
            file.killVirus();
        }

    }
}

容器组件实现了抽象组件,自定义了一个list<抽象组件>的集合,并在抽象方法中对集合进行了具体的操作。

3.两个叶子组件:

        (1).照片文件

//照片叶子组件
class ImageFile implements AbstractFile{
    private  String name;

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

    @Override
    public void killVirus() {
        System.out.println("--图像文件--"+name+"--查杀");
    }
}

        (2).文本文件

class TxtFile implements AbstractFile{
    private  String name;

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

    @Override
    public void killVirus() {
        System.out.println("--文本文件--"+name+"--查杀");
    }
}

4.模拟杀毒测试:

public static void main(String[] args) {
        AbstractFile f2,f3,f6,f7;
        Folder f1=new Folder("我的收藏");
        f2=new ImageFile("av.jpg");
        f3=new TxtFile("我的种子");

        f1.add(f2);
        f1.add(f3);
        f1.killVirus();
        System.out.println("----------------");

        Folder f4 = new Folder("我的文件夹");
        f6=new ImageFile("天龙八部");
        f7=new TxtFile("斗破苍穹");

        f4.add(f6);
        f4.add(f7);
        f4.add(f1);
        f4.killVirus();


    }

结果:--文件夹:我的收藏--查杀
--图像文件--av.jpg--查杀
--文本文件--我的种子--查杀
----------------
--文件夹:我的文件夹--查杀
--图像文件--天龙八部--查杀
--文本文件--斗破苍穹--查杀
--文件夹:我的收藏--查杀
--图像文件--av.jpg--查杀
--文本文件--我的种子--查杀

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

愛沢かりん

感谢您对我的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值