java设计模式 GOF23 09 组合模式

Posted

tags:

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

一.组合模式简介

  把整体和部分的关系用树形结构表示,从而可以统一处理。

二.组合模式实现细节

  1)抽象构建:定义叶子和容器的共同特点。

  2)叶子:没有子节点

  3)容器:有容器的特征,可以包含子节点(一般实现的时候在这里添加容器存放子节点)

三.简单代码实现

package com.lz.combination;

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


/*
 * 抽象构建
 */
public interface IComponent {
    void op();
}

/*
 * 叶子构件
 */
interface ILeaf extends IComponent {
    @Override
    public void op();
}

/*
 * 容器构件
 */
interface IComposite extends IComponent {
    @Override
    public void op();
}

class Leaf implements ILeaf {
    private String name;
    
    public Leaf(String name) {
        super();
        this.name = name;
    }

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

/*
 * 容器实现类中包含存放子节点
 */
class Composite implements IComposite {
    
    private String name;
    
    public Composite(String name) {
        super();
        this.name = name;
    }

    List<IComponent> list = new ArrayList<IComponent>();
    
    public void add(IComponent i) {
        list.add(i);
    }
    
    public void delete(int index) {
        list.remove(index);
    }
    
    public IComponent get(int index) {
        return list.get(index);
    }
    
    @Override
    public void op() {
        System.out.println("查杀"+this.name+"目录");
        for ( IComponent i : list) {
            i.op();
        }
    }
}
package com.lz.combination;

/*
 * 组合模式测试类
 */
public class Test {
    public static void main(String[] args) {
        Leaf l1 = new Leaf("文件1");
        Leaf l2 = new Leaf("文件2");
        Leaf l3 = new Leaf("文件3");
        Leaf l4 = new Leaf("文件4");
        Leaf l5 = new Leaf("文件5");
        Leaf l6 = new Leaf("文件6");
        Composite c1 = new Composite("目录1");
        Composite c2 = new Composite("目录2");
        c2.add(l4);
        c2.add(l5);
        c2.add(l6);
        c1.add(l1);
        c1.add(l2);
        c1.add(l3);
        c1.add(c2);
        c1.op();
    }
}

四.应用场景

  1)操作系统的资源管理器

  2)OA系统中组织结构

  3)junit单元测试框架

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

设计模式之GOF23组合模式

GoF 23 种设计模式之享元模式和组合模式

GOF23设计模式之组合模式(composite)

GOF23种设计模式总览

一起来学GOF23种设计模式

java设计模式 GOF23 02 工厂模式