首页 > 其他分享 >软件设计-组合模式

软件设计-组合模式

时间:2023-10-30 19:56:37浏览次数:26  
标签:return name 组合 软件设计 AbstractFile 模式 Add file public

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

public class 组合模式 {
    public static void main(String[] args)
    {
        AbstractFile fileA=new File("fileA");
        AbstractFile fileB=new File("fileB");
        //fileA.printName();

        AbstractFile folderB=new Folder("folderB");
        AbstractFile folderA=new Folder("folderA");
        //folderB.printName();

        AbstractFile root=new Folder("root");

        root.Add(fileA);
        root.Add(folderA);
        folderA.Add(fileB);
        folderA.Add(folderB);

        print(root);
    }
    static void print(AbstractFile file)
    {
        file.printName();
        List<AbstractFile> list=file.getCildern();
        if(list==null)
            return ;
        for(AbstractFile children : list)
        {
            //children.printName();     错误的
            print(children);
        }
    }
}
abstract class AbstractFile{
    protected String name;

    public abstract boolean Add(AbstractFile file);
    public abstract boolean Remove(AbstractFile file);
    public abstract List<AbstractFile> getCildern();

    public void printName()
    {
        System.out.println(name);
    }

}
class File extends AbstractFile{

    public File(String name)
    {
        this.name=name;
    }
    @Override
    public boolean Add(AbstractFile file)
    {
        return false;
    }
    @Override
    public boolean Remove(AbstractFile file)
    {
        return false;
    }
    @Override
    public List<AbstractFile> getCildern()
    {
        return null;
    }
}

class Folder extends AbstractFile{
    private List<AbstractFile> list =new ArrayList<AbstractFile>();
    public Folder(String name)
    {
        this.name=name;
    }
    @Override
    public boolean Add(AbstractFile file)
    {
        return list.add(file);
    }
    @Override
    public boolean Remove(AbstractFile file)
    {
        return list.remove(file);
    }
    @Override
    public List<AbstractFile> getCildern()
    {
        return list;
    }
}

运行结果

 

标签:return,name,组合,软件设计,AbstractFile,模式,Add,file,public
From: https://www.cnblogs.com/cinan/p/17798647.html

相关文章

  • 设计模式—创建型模式之工厂模式
    设计模式—创建型模式之工厂模式工厂模式(FactoryPattern)提供了一种创建对象的最佳方式。我们不必关心对象的创建细节,只需要根据不同情况获取不同产品即可。简单工厂模式比如我们有造车的工厂,来生产车,我们先定义一个抽象车产品://抽象车产品类publicabstractclassAbstract......
  • 生产者消费者模式下实现多batch延时推理
    生产者消费者模式下实现多batch延时推理需求分析在实际推理过程中为了实现较高的吞吐量和较高的资源利用率,往往会使用多线程来收集多次请求,并组合形成多batch下的模型推理,一种常见的实现便是生产者和消费者模式,其需求如下:生产者收集提交的请求,消费者对请求进行消费,并将结果返......
  • 设计模式-工厂方法(Factory Method)
    1.定义 定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。2.示例创建一个接口:publicinterfaceShape{voiddraw();}创建接口具体实现类 publicclassSquareimplementsShape{@Overridepublicvoiddraw(){......
  • 设计模式-装饰器模式
    目录设计模式-装饰器模式什么是装饰器设计模式?java示例设计模式-装饰器模式什么是装饰器设计模式?装饰器设计模式(DecoratorPattern)是一种结构型设计模式,它允许你通过将对象包装在一个装饰器类中来动态地扩展其功能。装饰器模式能够在不改变原有对象的情况下,通过添加新的装饰器类......
  • 回溯全排列与组合、子集
    回溯模板:for(start状态:选择列表){path.push_back(选择);BackTrack(遍历层数);path.pop_back();}避免深度方向的重复选择:每次遍历时候层数+1,且start=这时层数避免广度方向的重复选择:那么start状态应该等于层数想下一层选择的是以前没选择的状态,就使用used标记......
  • 番外-软件设计(1)
    [实验任务一]:人与肤色使用抽象工厂模式,完成下述产品等级结构: 实验要求:1. 画出对应的类图;2. 提交源代码;packageAbstract_factory;publicclassBlackFactoryimplementsMWFactory{    publicManproduceMan()    {        returnnewBlackSkinMan......
  • 番外-软件设计(2)
    [实验任务一]:计算机组装使用建造者模式,完成下述任务:计算机组装工厂可以将CPU、内存、硬盘、主机等硬件设备组装在一起构成计算机,计算机的类型可以是笔记本,也可以是台式机。实验要求:1. 画出对应的类图;2. 提交源代码;packageBuilder;publicclassComputer{    privat......
  • Centos8进入单用户模式重置密码方法
    开机出现grubbootloader开机选项菜单时,立即点击键盘任意鍵,bootloader会暂停。按下e,编辑选项菜单,移动上下鍵至linux16核心命令行:加入rd.break。linux16/vmlinuz-3.10.0-123.el7.x86_64root=UUID=449d53d1-84c2-40c0-b05e-d1900591d71brord.lvm.lv=vg_kvm7usb/swapcra......
  • JavaScript 中的单例模式
    单例模式是JavaScript中最流行的设计模式之一。单例模式的优点全球访问点:提供对实例的单点访问,可以轻松管理全球资源。内存效率:该模式确保只有一个实例,这特别节省内存。延迟初始化:仅在需要时才创建实例,从而提高性能这是一种创建模式,可确保类只有一个实例,同时提供对该实例......
  • Redis的四种模式:单机、主从、哨兵、集群简介
    Redis的单机模式单机模式就是安装一个redis,启动起来,业务调用即可。具体安装步骤和启动步骤就不赘述了,单机在很多场景也是有使用的,例如在一个并非必须保证高可用的情况下。单机的优点:部署简单,0成本。成本低,没有备用节点,不需要其他的开支。高性能,单机不需要同步数据,数据......