• 组合模式

在面向对象的语言中,树结构有着巨大的威力,一个基于继承的类型的等级结构便是一个数结构,一个基于合成的对象结构也是一个数结构。组合模式将部分与整体的关系用树结构表示出来,使得客户端把一个个单独的成分对象和由它们组合而成的合成对象同等看待。

  • 抽象构建角色:一个抽象角色,给参加组合的对象规定一个接口,这个接口给出共有的接口及默认行为。
  • 树叶构建角色:代表参加组合的树叶对象,没有子对象,定义参加组合的原始对象行为。
  • 树枝构建角色:代表参加组合的有子对象的对象,并给出树枝构件对象的行为。

对于子对象的管理方法如add,remove,getchild等,有两种方式。一种是透明方式:直接定义在抽象构建角色中,这样要求树叶和树枝构件都实现管理方法,但是在树叶中是空实现。另一种是安全方式:只在树枝构件中实现管理方法,而在树叶构件中只实现共有的方法。

  • 门面模式

门面模式要求一个子系统的外部与其内部的通信必须通过一个统一的门面对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。

  • 门面角色:客户端调用这个角色的方法。此角色知晓相关子系统的功能和责任,将所有客户端的请求委派到相应的子系统。
  • 子系统角色:可以同时有一个或者多个子系统。每个子系统可以被客户端直接或者通过门面调用,子系统并不感知门面的存在。
  • 享元模式

java中的String使用了享元模式。String对象是不变对象,即创建后不可以改变。如果要改变一个String的值,只有新建一个String对象。在JVM内部,String对象都是共享的,如果一个系统中有两个String对象所包含的字符串相同,JVM实际上只创建了一个String对象,提供给两个引用。从而实现String对象的共享。String.intern()方法给出这个字符串在共享池中的唯一实例。

  • 抽象享元模式:所有具体享元类的超类,为这些类规定出需要实现的公共接口。
  • 具体享元角色:实现抽象享元的所有接口,对象的部分或所有状态与所处环境无关,是的对象可以在系统内共享。
  • 享元工厂:负责创建和管理享元角色,如果已存在,则返回已有的实例。
  • 客户端角色:维护一个对享元角色的引用,自行管理享元对象中的可变状态,客户端不可以直接实例化享元对象,而必须通过工厂。
  • 桥接模式

桥接模式的用意是通过聚合关系代替继承将抽象化与实现化脱耦,使得二者可以独立地变化。

  • 抽象化角色:抽象化给出定义,并保存一个对实现化对象的引用。
  • 修正抽象化角色:扩展抽象化角色,改变和修正父类对抽象化的定义。
  • 实现化角色:给出实现化角色的接口,但不给出具体实现。此接口只给出底层操作,而抽象化角色给出基于底层操作的更高一层操作。
  • 具体实现化角色:给出实现化角色接口的具体实现。

抽象化等级结构中的业务方法通过向对应的实现化对象委派自己的操作,这意味着抽象化角色可以通过向不同的实现化对象委派,来达到动态地转换自己功能的目的。

大多数的驱动器都是桥接模式的应用。使用驱动程序的应用系统就是抽象化角色,而驱动器本身扮演着实现化角色。JDBC为所有的关系数据库提供一个通用的接口。一个应用系统可以动态地选择一个合适的驱动器,然后通过驱动器向数据库引擎发出指令。由于JDBC驱动器的存在,应用系统可以不依赖于数据库引擎的细节而独立地演化,同时数据库引擎也可以独立于应用系统的细节而独立演化。

#笔记内容参考《java与模式》

java设计模式5.组合模式、门面模式、享元模式、桥接模式的更多相关文章

  1. 设计模式C#实现(十三)——享元模式(蝇量模式)

    意图 0 适用性 1 结构 2 实现 3 效果 4 参考 5 意图 运用共享技术有效地支持大量细粒度的对象. 适用性 当以下情况都成立时使用: 一个程序使用了大量的对象 完全由于使用大量对象造成很大存 ...

  2. 《JAVA与模式》之享元模式

    <JAVA与模式>之享元模式 在阎宏博士的<JAVA与模式>一书中开头是这样描述享元(Flyweight)模式的: Flyweight在拳击比赛中指最轻量级,即“蝇量级”或“雨 ...

  3. 设计模式之(十二)享元模式(Flyweight)

    享元模式思想 就以小时候导锅来说吧(导锅是我家乡的方言,就是用细沙把一个模型锅的形状拓下来,然后把铝水倒进模型中,就导好一个锅了.小时候很喜欢看的,可惜现在看不到了.上个图片回忆下)了解了这个过程后就 ...

  4. 老和尚给小和尚讲故事引发了Java设计模式:组合模式

    目录 示例 组合模式 定义 意图 主要解决问题 优缺点 安全式和透明式的组合模式 安全式的合成模式的结构 透明式的合成模式的结构 老和尚和小和尚的故事 示例 有一个绘图系统,可以描绘各种图形,假设现在 ...

  5. NET设计模式 第二部分 结构性模式(12):享元模式(Flyweight Pattern)

    享元模式(Flyweight Pattern) ——.NET设计模式系列之十三 Terrylee,2006年3月 摘要:面向对象的思想很好地解决了抽象性的问题,一般也不会出现性能上的问题.但是在某些情 ...

  6. 设计模式-创建型模式,python享元模式 、python单例模式(7)

    享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能.这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式. 享元模式尝 ...

  7. java高新技术-基本数据类型拆装箱及享元设计模式

    享元设计模式 public static void main(String[] args) { Integer iObj = 3; //自动装箱 System.out.println(iObj + 1 ...

  8. 23种设计模式 - 对象性能(Singleton - Flyweight享元)

    其他设计模式 23种设计模式(C++) 每一种都有对应理解的相关代码示例 → Git原码 ⌨ 对象性能 面向对象很好地解决了"抽象"的问题,但是必不可免地付出一定的代价.对于通常情 ...

  9. java设计模式之组合模式

    组合模式 组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性.掌握组合模式的重点是要理解清楚 “部分/整体” 还有 ”单个对象“ 与 & ...

随机推荐

  1. 《SQL错题》

    (选择一项) A: B: C: D: 正确答案是 D                   (选择一项) A: B: C: D: 正确答案是 A           (选择一项) 8 A: B: C: ...

  2. 【Mac】解压文件夹中文乱码

    Mac 用的英文系统,发现下载含中文的文件后,解压为乱码,如图所示: 解决方法: 下载一个解压软件:"The Unarchiver" 安装后设置下,如图: 之后设置压缩文件的默认打 ...

  3. 命令用法习题,yum仓库的创建 chapter02 - 03 作业

    1.  分别用cat \tac\nl三个命令查看文件/etc/ssh/sshd_config文件中的内容,并用自己的话总计出这三个文档操作命令的不同之处? [root@localhost /]# ca ...

  4. 微信支付java开发

    微信公众平台 (此处只讲pay) 微信商户平台,公众号的后台管理工具,包含公众号的商户信息,公众号支付,扫码支付,刷卡支付 1.商户信息包含商户号,和此公众平台关联的商户号,需登录商户平台设置商户秘钥 ...

  5. redis过期策略与内存淘汰机制分析

    过期策略: 我们在set key时,可以给一个expire time,就是过期时间 这段过期时间以后,redis对key删除使用:定期删除+惰性删除 定期删除指redis默认在100ms内随机抽取一些 ...

  6. jquery EasyUi 添加节点、展开所有节点、默认选中第一个节点

    感觉easyUi 的树用起来不如 Ext 的树方便,首先,root节点不太好自定义, 异步加载时,只能通过后台判断生成root节点,但是这样一来有一个问题,就是第一次访问界面时, 树的初始化比较慢,大 ...

  7. vscode c 语言 win10

    在看 CSAPP 一些课程,一些c 语言的小程序的例子,想跑起来试试,用一个DEV  c++  简单上手,但这是一个上古的IDE, 前端开发中的代码不全,语法高亮,都不太好,就想着为什么不折腾一下 V ...

  8. 程序员修神之路--用NOSql给高并发系统加速(送书)

    随着互联网大潮的到来,越来越多网站,应用系统需要海量数据的支撑,高并发.低延迟.高可用.高扩展等要求在传统的关系型数据库中已经得不到满足,或者说关系型数据库应对这些需求已经显得力不从心了.关系型数据库 ...

  9. 洛谷 P2152 [SDOI2009]SuperGCD

    题意简述 求两个整数a,b的最大公约数0 < a , b ≤ 10 ^ 10000. 题解思路 如果 a % 2 == 0 && b % 2 == 0 gcd(a,b) = gc ...

  10. 《机器学习技法》---AdaBoost算法

    1 AdaBoost的推导 首先,直接给出AdaBoost算法的核心思想是:在原数据集上经过取样,来生成不同的弱分类器,最终再把这些弱分类器聚合起来. 关键问题有如下几个: (1)取样怎样用数学方式表 ...