组合模式 以你之姓@ 2021-09-26 15:50 286阅读 0赞 用途 -------------------- 组合模式 (Component) 将对象组合成 树形结构以表示“部分-整体”的层次结构。 组合模式使得用户对单个对象和组合对象的使用具有 唯一性。 组合模式是一种 结构型模式。 结构 -------------------- ![70][] 图-组合模式结构图 Component : 组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理 Component 的子部件。 ![复制代码][copycode.gif] abstract class Component \{ protected String name; public Component(String name) \{ this.name = name; \} public abstract void Add(Component c); public abstract void Remove(Component c); public abstract void Display( int depth); \} ![复制代码][copycode.gif] Leaf : 表示叶节点对象。叶子节点没有子节点。 ![复制代码][copycode.gif] class Leaf extends Component \{ public Leaf(String name) \{ super(name); \} @Override public void Add(Component c) \{ System.out.println("Can not add to a leaf"); \} @Override public void Remove(Component c) \{ System.out.println("Can not remove from a leaf"); \} @Override public void Display( int depth) \{ String temp = ""; for ( int i = 0; i < depth; i++) temp += '-'; System.out.println(temp + name); \} \} ![复制代码][copycode.gif] Composite : 定义枝节点行为,用来存储子部件,在 Component 接口中实现与子部件相关的操作。例如 Add 和 Remove。 ![复制代码][copycode.gif] class Composite extends Component \{ private List<Component> children = new ArrayList<Component>(); public Composite(String name) \{ super(name); \} @Override public void Add(Component c) \{ children.add(c); \} @Override public void Remove(Component c) \{ children.remove(c); \} @Override public void Display( int depth) \{ String temp = ""; for ( int i = 0; i < depth; i++) temp += '-'; System.out.println(temp + name); for (Component c : children) \{ c.Display(depth + 2); \} \} \} ![复制代码][copycode.gif] Client : 通过 Component 接口操作结构中的对象。 ![复制代码][copycode.gif] public class CompositePattern \{ public static void main(String\[\] args) \{ Composite root = new Composite("root"); root.Add( new Leaf("Leaf A")); root.Add( new Leaf("Leaf B")); Composite compX = new Composite("Composite X"); compX.Add( new Leaf("Leaf XA")); compX.Add( new Leaf("Leaf XB")); root.Add(compX); Composite compXY = new Composite("Composite XY"); compXY.Add( new Leaf("Leaf XYA")); compXY.Add( new Leaf("Leaf XYB")); compX.Add(compXY); root.Display(1); \} \} ![复制代码][copycode.gif] 应用场景 -------------------- 1、想要表示对象的部分-整体层次结构。 2、想要客户端忽略组合对象与单个对象的差异,客户端将统一地使用组合结构中的所有对象。 关于分级数据结构的一个普遍性的例子是你每次使用电脑时所遇到的: 文件系统。 文件系统由目录和文件组成。每个目录都可以装内容。目录的内容可以是文件,也 可以是目录。 按照这种方式,计算机的文件系统就是以递归结构来组织的。如果你想要描述这样的数据结构,那么你可以使用组合模式。 要点 -------------------- 组合模式定义由 Leaf 对象和 Composite 对象组成的类结构; 它使得客户端变得简单; 它使得添加或删除子部件变得很容易。 [70]: /images/20210923/05b3b7a4bfcc4656b93253ffb6fed900.png [copycode.gif]: /images/20210923/0e320a22a312483c8d1dc99970805700.png
相关 组合模式 在我写外观模式的时候,我是举最近在做的一个考勤的例子,不熟悉的小伙伴可以去看一下前面的文章哦,在那个例子中我们分析了一下,考勤中每种类别员工的工作日计算方式是不一样的,比如说一 川长思鸟来/ 2022年05月09日 15:00/ 0 赞/ 231 阅读
相关 组合模式 组合模式 一、概述 1. 组合模式为处理树形结构提供了完美的解决方案,描述了如何将容器和叶子进行递归组 合,使得用户在使用时可以一致性的对待容器和叶子。 2. 古城微笑少年丶/ 2022年04月18日 04:47/ 0 赞/ 210 阅读
相关 组合模式 > 本文总结摘自刘伟老师的《设计模式》和程杰老师的《大话设计模式》 1.定义 组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个 朴灿烈づ我的快乐病毒、/ 2022年01月23日 00:21/ 0 赞/ 254 阅读
相关 组合模式 前言 组合模式(Composite),将对象组合树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 一、Compone 傷城~/ 2021年12月09日 00:49/ 0 赞/ 297 阅读
相关 组合模式 树形结构在软件中十分常见,如操作系统中的文件结构,文件夹包含文件和子文件夹,而子文件夹又包含文件和子子文件夹,像这样的结构称为树形结构。在树形结构中,文件夹或子文件夹称为容器( 清疚/ 2021年11月04日 16:10/ 0 赞/ 366 阅读
相关 组合模式 用途 -------------------- 组合模式 (Component) 将对象组合成 树形结构以表示“部分-整体”的层次结构。 组合模式使得用户对单个对象和 以你之姓@/ 2021年09月26日 15:50/ 0 赞/ 286 阅读
相关 组合模式 组合模式:将对象组合成树形结构以表示‘部分-整体’的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。 透明方式:就是在component中声明所有用来管理子对 r囧r小猫/ 2021年09月17日 03:18/ 0 赞/ 431 阅读
相关 组合模式 11.组合模式 ![70][] //抽象构件,它是叶子和容器共同的父类,并且声明了叶子和容器的所有方法 abstract class Abstr 末蓝、/ 2021年09月16日 23:58/ 0 赞/ 369 阅读
相关 组合模式 一 概述 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nL 你的名字/ 2021年07月24日 17:14/ 0 赞/ 547 阅读
相关 组合模式 合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类... 小灰灰/ 2020年06月13日 05:57/ 0 赞/ 806 阅读
还没有评论,来说两句吧...