Composite

概述:

容器与内容的一致性

Composite_sample


说明:

1.本文仅仅是对 图解设计模式 的简单总结(个人笔记).
2.文章中的图片均来自本书,添加水印只是为了防止盗链行为,并无侵权的想法.
综上,若侵权, 请联系删除!
转载请标注出处!


案例:

  • 案例说明:

    列出文件和文件夹一览

  • Composite_uml_case
  • 主要代码:
  • Directory.java
    package Gof.Composite;
    
    import java.util.Iterator;
    import java.util.ArrayList;
    
    public class Directory extends Entry {
        private String name;                    // 文件夹的名字
        private ArrayList directory = new ArrayList();      // 文件夹中目录条目的集合
        public Directory(String name) {         // 构造函数
            this.name = name;
        }
        public String getName() {               // 获取名字
            return name;
        }
        public int getSize() {                  // 获取大小
            int size = 0;
            Iterator it = directory.iterator();
            while (it.hasNext()) {
                Entry entry = (Entry)it.next();
                size += entry.getSize();
            }
            return size;
        }
        public Entry add(Entry entry) {         // 增加目录条目
            directory.add(entry);
            return this;
        }
        protected void printList(String prefix) {       // 显示目录条目一览
            System.out.println(prefix + "/" + this);
            Iterator it = directory.iterator();
            while (it.hasNext()) {
                Entry entry = (Entry)it.next();
                entry.printList(prefix + "/" + name);
            }
        }
    }
    
  • 代码链接:传送门

    uml综述Composite_uml

  • Leaf(树叶):表示内容的对象,该角色中不能放入其他对象
  • Composite(复合物):表示容器角色,可以放入leaf,composite对象
  • Component:是leaf,composite角色的父类
  • Client: 使用composite模式的角色

收获:

  • 能够使容器内容具有一致性,创造出递归结构的模式就是composite模式
  • 使用Composite模式可以使容器与内容具有一致性,也可以称之为多个和单个的一致性,即多个对象结合在一起,当做一个对象处理

相关设计模式:

  • command: 编写宏命令时用到了composite模式
  • visitor: 可以使用visitor 访问composite模式
  • Decorator:使装饰框与内容具有一致性
  • Composite: 时leaf和composite具有一致性

注意:

此部分内容属于对GOF Design Pattern知识的初步认知阶段,参考书籍是结城浩的《图解设计模式》,简单易懂,十分推荐!
以上内容,作者一字一句码出来的,纯属不易,欢迎大家转载,转载是还请您表明出处。另外如果我有侵权行为,请在下方留言,确认后我会及时撤销相应内容,谢谢大家!

PS:欢迎大家来到我的小站,鸣谢!