基于JAVA的设计模式之组合模式

Posted hbsdljz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于JAVA的设计模式之组合模式相关的知识,希望对你有一定的参考价值。

  • 概念

    将所有对象组合成一种树形结构,有分支节点、叶子节点,分支节点可以有自己的子节点,子节点可以是分支节点、叶子节点,可以进行增删的操作,而叶子节点不可以。比如文件夹就是一个分支节点,而文件就是一个叶子节点。用于遍历组织结构或者处理树形对象。父类引用指向派生类对象(Compoent->Document,Folder)

  技术图片

  • 类图

  技术图片

  • 代码  
public abstract class Component 
    public void add(Component component)
        //新建文件夹或文件
    
    public void remove(Component component)
        //删除文件夹或文件
    
    public void print()
        //打印
    
    public String getName()
        //名字
        return null;
    
    public String getType()
        //类型
        return null;
    


//文件类 叶子类 不能操作孩子 即不能有add remove
public class Document extends Component 
    private String name;
    private String type;
    public Document(String name,String type)
        this.name=name;
        this.type=type;
    
    @Override
    public void print() 
        System.out.println(type+":"+name);
    

    @Override
    public String getName() 
        return this.name;
    

    @Override
    public String getType() 
        return this.type;
    
//文件夹类 孩子可以是文件夹也可以是文件
public class Folder extends Component
    private String name;
    private String type;
    private List<Component>components=new ArrayList<Component>();
    public Folder(String name,String type)
        this.name=name;
        this.type=type;
    
    @Override
    public void add(Component component) 
        components.add(component);
    

    @Override
    public void remove(Component component) 
        components.remove(component);
    

    @Override
    public void print() 
        System.out.println(type+":"+name);
        for (Component  component:
             components) 
            component.print();
        
    

    @Override
    public String getName() 
        return this.name;
    

    @Override
    public String getType() 
        return this.type;
    

public class Main 
    public static void main(String[] args) 
        Folder desktop=new Folder("桌面","文件夹");
        Folder c=new Folder("c:","文件夹");
        Folder childFolder=new Folder("新建文件夹","文件夹");
        Document d1=new Document("pig.jpg","文件");
        Document d2=new Document("duck.png","文件");
        childFolder.add(d1);
        childFolder.add(d2);
        c.add(childFolder);
        Folder d=new Folder("d:","文件夹");
        Document d3=new Document("git.txt","文件");
        d.add(d3);
        Folder e=new Folder("e:","文件夹");
        desktop.add(c);
        desktop.add(d);
        desktop.add(e);
        desktop.print();
    

以上是关于基于JAVA的设计模式之组合模式的主要内容,如果未能解决你的问题,请参考以下文章

java设计模式之组合模式

Java进阶篇设计模式之六 ----- 组合模式和过滤器模式

java设计模式之组合模式

Java设计模式——创建型模式之合成(组合)模式

java23中设计模式之组合模式

java设计模式5.组合模式门面模式享元模式桥接模式