首页 > 编程语言 >组合模式--Java实现

组合模式--Java实现

时间:2023-10-16 13:34:16浏览次数:34  
标签:Java 组合 -- AbstractFile System filename add public out

画类图

以文件夹浏览为例;

具体代码实现

//AbstractFile.java
package org.example.design008;

public abstract class AbstractFile {
    public abstract void add(AbstractFile element);
    public abstract void remove(AbstractFile element);
    public abstract void display();
}

//TextFile.java
package org.example.design008;

public class TextFile extends AbstractFile{
    public TextFile(String filename) {
        this.filename=new String();
        this.filename = filename;
    }

    private String filename;

    @Override
    public void add(AbstractFile element) {
        System.out.println("add textFile");
    }

    @Override
    public void remove(AbstractFile element) {
        System.out.println("remove textFile");
    }

    @Override
    public void display() {
        System.out.print(filename);
        System.out.println(" TextFile");
    }
}

//ImageFile.java
package org.example.design008;

import javax.xml.transform.Source;

public class ImageFile extends AbstractFile{
    public ImageFile(String filename) {
        this.filename=new String();
        this.filename = filename;
    }

    private String filename;

    @Override
    public void add(AbstractFile element) {
        System.out.println("add imageFile");
    }

    @Override
    public void remove(AbstractFile element) {
        System.out.println("remove imageFile");
    }

    @Override
    public void display() {
        System.out.print(filename);
        System.out.println(" ImageFile");
    }
}

//VideoFile.java
package org.example.design008;

public class VideoFile extends AbstractFile{
    public VideoFile(String filename) {
        this.filename=new String();
        this.filename = filename;
    }

    private String filename;

    @Override
    public void add(AbstractFile element) {
        System.out.println("add videoFile");
    }

    @Override
    public void remove(AbstractFile element) {
        System.out.println("remove videoFile");
    }

    @Override
    public void display() {
        System.out.print(filename);
        System.out.println(" VideoFile");
    }
}

//Folder.java
package org.example.design008;

import java.util.ArrayList;

public class Folder extends AbstractFile{
    public Folder(String filename) {
        this.filename=new String();
        this.filename = filename;
    }

    private String filename;
    private ArrayList<AbstractFile> list=new ArrayList<>();
    @Override
    public void add(AbstractFile element) {
        list.add(element);
        System.out.println("add folder");
    }

    @Override
    public void remove(AbstractFile element) {
        list.remove(element);
        System.out.println("remove folder");
    }

    @Override
    public void display() {
        System.out.println(filename);

        for(Object object:list){
            ((AbstractFile)object).display();
        }

        System.out.println("====Folder Display====");
    }
}

//Client.java
package org.example.design008;

public class Client {
    public static void main(String[] args) {
        AbstractFile obj1,obj2,obj3,obj4;
        Folder f1,f2,f3;

        obj1=new ImageFile("a.jpg");
        obj2=new TextFile("b.txt");

        f1=new Folder("Image_Text");
        f1.add(obj1);
        f1.add(obj2);

        obj3=new VideoFile("c.mp4");
        f2=new Folder("Image_Video");
        f2.add(obj1);
        f2.add(obj3);

        obj4=new ImageFile("d.jpg");
        f3=new Folder("Image_Text_Video");
        f3.add(f1);
        f3.add(f2);
        f3.add(obj4);

        f3.display();
    }
}

标签:Java,组合,--,AbstractFile,System,filename,add,public,out
From: https://www.cnblogs.com/liuzijin/p/17767124.html

相关文章

  • [CISCN2019 华东南赛区]Web11
    原理smartySSTI模板注入解题过程首先进入靶场,看到currentIP,猜测是自己的ip,怎么获取的,大概率是请求包的X-Forwarded-For字段之后又看到了文件底部的smarty,是php的一种模板,思路清晰了,估计是在X-forwarded-for进行ssti注入二话不说抓包没看到X-Forwarded-For字段咋办,自己写......
  • 放弃WordPress,纯手撸一个导航网站
    最近AI好火啊,各种AI工具导航网站也层出不穷,思路就是建站然后流量做大赚广告费。于是,我仔细研究下了所谓的导航网站,不仅AI领域,其他诸如编程啊,产品经理啊,跨境电商啊等等行业都有导航站,的确极大的增加了工作效率,做到了工具和资源的整合。从技术的角度讲,各大导航网站无一例外都是使......
  • win11开启ssd失败分享
    github下载openssh服务软件并安装,sshd服务不能打开:\WINDOWS\system32>C:\WINDOWS\system32>netstartsshdOpenSSHSSHServer服务正在启动.OpenSSHSSHServer服务无法启动。系统出错。发生系统错误1067。进程意外终止。查询说是权限问题,但尝试发现不是权限问题......
  • WebGIS:明小图
         ......
  • 无涯教程-NumPy - reshape函数
    此函数在不更改数据的情况下为数组提供了新的维度,它接受以下参数-numpy.reshape(arr,newshape,order')Sr.No.描述1arr数组2newshapeint或int的元组,新维度应与原始维度兼容3order如果数组存储在类似Fortran的连续内存中,则"C"表示C风格,"F"表示Fortran风格,"......
  • 还不会在MT4用Renko,FPmarkets澳福手把手教你一分钟学会
    很多投资者还不会在MT4上使用Renko,让FPmarkets澳福通过一个具体的例子来探讨,Renko图表指标在MT4平台上的应用,以AG Renko为例。首先,投资者需要解压缩下载的档案,并将其移动到MT4的“指标”文件夹中。重启MetaTrader交易平台后,所添加的工具就会出现在指标列表中。若要将AG Renko添加......
  • uniapp全局修改字体
    App.vue中<stylelang="scss"> /*注意要写在第一行,同时给style标签加入lang="scss"属性*/ @import"uview-ui/index.scss"; @font-face{ font-family:'selffont'; src:url("/static/fonts/AlimamaFangYuanTiVF-Thin.ttf&quo......
  • ASP.NET Core Minimal API之optional route parameter with default value and option
    publicstaticvoidMain(string[]args){varbuilder=WebApplication.CreateBuilder(args);varapp=builder.Build();app.MapGet("/product/{name}",(stringname)=>$"Theproductis{name}").WithName("product&......
  • 2023-2024-1 20231413 《计算机基础与程序设计》第四周学习总结
    班级:2023-2024-1-计算机基础与程序设计作业要求:2023-2024-1《计算机基础与程序设计》教学进程目标:自学教材:计算机科学概论第4、5章并完成云班课测试《C语言程序设计》第3章并完成云班课测试教材学习内容总结:了解了门和电路、计算部件的基础知识教材学习中的问题和解决过程:......
  • AI厂家
    识渊科技(sailyond.com)https://www.sailyond.com/#/core-tech/automl  ......