美文网首页Java学习笔记
Java 设计模式 -- 组合模式

Java 设计模式 -- 组合模式

作者: ghwaphon | 来源:发表于2016-10-04 12:41 被阅读628次

组合模式 : 允许你将对象组合成树形结构来表现 "整体/部分" 层次结构。组合能够让我们用一致的方式处理个别对象以及对象集合。

先来看一张图

demo01.png

图中所示的结构和树一样,有叶子节点也有根节点,我们如何能够将二者统一起来,像处理叶子节点一样处理根节点,或者说像处理根节点一样处理叶子节点。下面我们以一个简单的遍历来实现这种效果。首先,我们定义一个统一的父类。

public abstract class LessonModal {
    protected String name;

    public String getName() {
        return name;
    }

    public void print() {
        throw new UnsupportedOperationException();
    }

    public void add(LessonModal modal) {
        throw new UnsupportedOperationException();
    }

    public void remove(LessonModal modal) {
        throw new UnsupportedOperationException();
    }

    public LessonModal getChild() {
        throw new UnsupportedOperationException();
    }
}

由于叶子节点无法再添加子节点,所以在这里我们将 print(), get(), remove(), getChild() 方法设置默认抛出一个异常。这样的话,在继承的时候,根节点就重写这三个方法,而叶子节点只需要重写 print() 方法,其它都使用默认实现即可。

public class ScienceLesson extends LessonModal {

    private ArrayList<LessonModal> lessons = new ArrayList<>();

    public ScienceLesson() {
        this.name = "ScienceLesson";
    }

    @Override
    public void add(LessonModal modal) {
        lessons.add(modal);
    }

    @Override
    public void remove(LessonModal modal) {
        lessons.remove(modal);
    }

    @Override
    public void print() {
        System.out.println(getName());

        Iterator<LessonModal> modalIterator = lessons.iterator();
        while (modalIterator.hasNext()) {
            LessonModal modal = modalIterator.next();
            System.out.print("\t");
            modal.print();
        }
    }
}

print() 方法中我们仍然使用了迭代器。这是根节点的书写方式,下面再看看叶子节点的书写方式。

public class Biological extends LessonModal {

    public Biological() {
        this.name = "Biological";
    }

    @Override
    public void print() {
        System.out.println(getName());
    }
}

其它的几个类都采用以上这两种写法,根据自己的不同种类进行选择。可见,只要我们这么做,就可以对根节点和叶子节点进行统一的处理,不必区别对待。下面进行测试

public class Client {
    public static void main(String[] args) {
        LessonModal scienceLesson = new ScienceLesson();
        LessonModal biological = new Biological();
        LessonModal physical = new Physical();
        LessonModal chemical = new Chemical();
        LessonModal organicChemical = new OrganicChemical();
        LessonModal inorganicChemical = new InorganicChemical();

        chemical.add(organicChemical);
        chemical.add(inorganicChemical);

        scienceLesson.add(biological);
        scienceLesson.add(chemical);
        scienceLesson.add(physical);

        scienceLesson.print();
    }
}

输出结果

ScienceLesson
    Biological
    Chemical
        Organic Chemical
        Inorganic Chemical
    Physical

相关文章

  • Java设计模式之08_Composite(组合模式)

    更多Java设计模式:Java设计模式-目录 一、定义 组合模式(Composite Pattern)也叫合成模式...

  • java/android 设计模式学习笔记(12)---组合模式

    java/android 设计模式学习笔记(12)---组合模式 【备注】只用于个人收藏

  • Java设计模式<组合模式>

    Java设计模式<组合模式> 意图 对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和...

  • Java设计模式--组合模式

    在这种模式下,所有对象像树形结构一样,有机的结合在了一起,体现出层次感,各种层次的节点可以自由增加,上下层调用简单...

  • Java设计模式----组合模式

    使用组合模式的场景 把部分和整体的关系用树型结构来表示,从而使客户端可以使用统一的方式处理部分对象和整体对象。 组...

  • Java设计模式——组合模式

    Java设计模式之组合模式 回顾 之前分享了桥接模式,相信大家对解耦已经有了一个新的认识。 组合模式 简介 将对象...

  • Java设计模式 - 组合模式

    定义 组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有...

  • Java 设计模式 -- 组合模式

    组合模式 : 允许你将对象组合成树形结构来表现 "整体/部分" 层次结构。组合能够让我们用一致的方式处理个别对象以...

  • java设计模式 - 组合模式

    1.定义 又叫作整体-部分(Part-Whole)模式,它是一种将对象组合成树状的层次结构的模式,用来表示“整体-...

  • 组合模式

    设计模式系列7--组合模式 《Objective-c 编程之道 iOS 设计模式解析》 - 组合模式 常见组合模式...

网友评论

    本文标题:Java 设计模式 -- 组合模式

    本文链接:https://www.haomeiwen.com/subject/bggjyttx.html