`
yangshen998
  • 浏览: 1246816 次
文章分类
社区版块
存档分类
最新评论

java 设计模式 学习笔记(15) 组合模式

 
阅读更多

组合模式:

将对象组合成树形结构以表示‘部分-整体’的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。

用最经典的树和叶子节点的关系来描述整体-部分 关系最为恰当不过了:

在数据结构中,树有孩子节点,这个孩子节点可能是树,也可能是叶子节点。叶子节点不能再有孩子节点,但树可以有。

从这里可以看出,树和叶子节点都可以被看成是 孩子节点。

组合模式的目的是将整体和部分被一致对待,那么在这里,我们可以将叶子节点和树合并成一个组合。既然合并了,那么提供给客户代码的接口肯定是相同的。

1. Component 类,组合中的对象声明接口,在适当的情况下,声明所有类共有接口的默认行为。在这里,Component 类树枝和叶子的共有抽象类,也就是它定义了共有的方法,这些方法由子类去实现。

2. Composite 类,组合类。不过在这里主要行使的是树枝节点的功能。同时也体现了树枝 - 叶子 是 整体- 部分 关系。

既然既是组合类又是树枝类,那么必须会有管理子节点的功能,以及递归显示还是节点的功能。

3. Leaf 类,叶子节点类。叶子节点没有子节点,其虽然继承 了Component 类,并重写了Component所有的方法,但只在自己需要的方法中添加有效代码:

4. 编写测试代码,来验证我对组合模式理解的正确性

结果输出:

组合模式分为安全方式和透明方式;

透明方式:叶子节点和 树枝节点都具有相同的接口,在这里,Leaf 类也实现了add,remove 方法

好处:都提供给客户代码一样的接口

坏处:Leaf 类重写了不需要的方法,并且这写方法没有意义,并且可能会误导客户代码来调用这些无意义的方法。

安全方式:在Component 只声明公共都需要的接口,在本例中,Component 应该值声明showComponent() 方法,而将add,remove() 方法的声明和实现都应该放在Composite 类中。

好处:Leaf 没有无效代码

坏处:客户代码在调用树枝或叶子及节点的接口时,例如调用add 方法,得先判断是不是 Composite 类。

分享到:
评论

相关推荐

    尚硅谷设计模式源码笔记课件.zip

    本课程是使用Java来讲解设计模式,考虑到设计模式比较抽象,授课采用 图解+框架源码分析的方式 1) 内容包括: 设计模式七大原则(单一职责、接口隔离、依赖倒转、里氏替换、开闭原则、迪米特法则、合成复用)、UML...

    java-design-patterns:Java 设计模式学习笔记

    Java Design PatternsJava 设计模式学习笔记,简单易懂,每个模式都有相应的代码示列,帮助学习理解。在线阅读地址:设计原则创建型模式作用:将创建与使用代码解耦结构型模式作用:将不同的功能代码解耦桥接模式...

    设计模式笔记(包含所有设计模式)个人总结提炼笔记

    2. 结构型模式:结构型模式关注对象之间的组合关系,包括适配器模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式和代理模式。这些模式可以帮助我们更好地组织和管理对象之间的关系,提高代码的灵活性和可...

    《javascript设计模式》学习笔记七:Javascript面向对象程序设计组合模式详解

    本文实例讲述了Javascript面向对象程序设计组合模式。...其实从面向对象之五之后,与javascript本身关系不是很大,更重要的是设计模式的一些概念,只要了解javascript面向对象的一般知识,掌握设计模式的含义,代码

    Java并发编程(学习笔记).xmind

    Java并发编程 背景介绍 并发历史 必要性 进程 资源分配的最小单位 线程 CPU调度的最小单位 线程的优势 (1)如果设计正确,多线程程序可以通过提高处理器资源的利用率来提升系统吞吐率 ...

    javascript设计模式之策略模式学习笔记

    策略模式利用组合,委托等技术和思想,有效的避免很多if条件语句。  2. 策略模式提供了开放-封闭原则,使代码更容易理解和扩展。  3. 策略模式中的代码可以复用。 一:使用策略模式计算奖金; 下面的demo是我在书...

    java-design-patterns:java 学习模式

    Java Design Patterns 学习笔记 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元...

    java-patterns:Java 23种基本的设计模式整料整理学习,责任链模式过滤器,工厂模式BeanFactory,观察者模式ContextListen等。结合Spring源码理解学习

    describe:设计模式学习笔记 逻辑结构图 代码结构图 设计模式简述 创建型模式,共五种:工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。 结构型模式,共七种:适配器模式,装饰器模式,代理模式,...

    java8源码-akangaroo:学习笔记,完善中

    学习笔记较长,如果想查看文章的目录,chrome浏览器可以配合简悦插件使用,或者下载到本地使用Typora打开。 :hot_beverage: Java基础 Java容器 Java并发 数据结构和算法 数据结构 树 图 算法 分治 动态规划 回溯 ...

    Java 知识汇总(资源,工具,笔记,源码,文章,文档分类整理).zip

    - 【Rxjava的学习笔记】在[com.gradle.java.rxjava](/tree/master/src/main/java/com/gradle/java/rxjava)包名下; - 【LeetCode源码及题解】在[com.gradle.java.leetcode](/tree/master/src/main/java/...

    java8源码-jcohy-study-sample:个人学习整理

    Ps:Java设计模式 [设计原则] [单一职责原则] [里氏替换原则] [依赖倒转原则] [接口隔离原则] [迪米特法则] [合成复用原则] 设计模式 创建型模式(5种) 结构型模式(7种) 关系型模式(11种) 适配器模式、装饰模式、代理...

    左程云leetcode-hjLearningNotes:hj学习笔记

    第一部分:设计模式 & UML 简单工厂 工厂方法模式 抽象工厂模式 策略模式 责任链模式 命令模式 模板方法模式 适配器模式 代理模式 外观模式 组合模式 装饰模式 享元模式 桥接模式 Builder模式 状态模式 解释器模式 ...

    《javascript设计模式》学习笔记二:Javascript面向对象程序设计继承用法分析

    本文实例讲述了Javascript面向对象程序设计继承用法。分享给大家供大家参考,具体如下: 1.关于继承: 百度百科对继承的解释是:继承是指一个对象直接使用另一对象的属性和方法。 (话说百科对于计算机概念的继承的...

    asp.net知识库

    VS2005 ASP.NET本地化学习笔记&感受 在自定义Server Control中捆绑JS文件 Step by Step 深度解析Asp.Net2.0中的Callback机制 使用 Web 标准生成 ASP.NET 2.0 Web 站点 ASP.NET 2.0基于SQLSERVER 2005的aspnetdb.mdf...

    leetcode题库-JavaStudy:Java学习

    1、设计模式-组合模式合并多数据源业务演变流程demo 2、多线程三大问题底层深究 1、设计模式:模板方法 2、算法:学习动态规范,刷题最长回文数,最长公共子串,爬楼梯 3、kafka:kafka兼顾性能和高可用的实现逻辑 1...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视...

Global site tag (gtag.js) - Google Analytics