• 组合模式

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

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

对于子对象的管理方法如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. Jquery 小结

    1. 名词解释 实例对象:var p1=new Person();  p1就是实例对象 构造:function Person(){} 原型对象:在 JavaScript 中,每当定义一个对象(函数也是 ...

  2. 【iOS】The identity used sign the executable is no longer valid.

    之前就遇到过这个问题,如图: 今天又遇到了,证书过期的问题. 需要访问苹果开发者的官网 http://developer.apple.com 来解决. 参考:How to fix “The ident ...

  3. 简易数据分析 08 | Web Scraper 翻页——点击「更多按钮」翻页

    这是简易数据分析系列的第 8 篇文章. 我们在Web Scraper 翻页--控制链接批量抓取数据一文中,介绍了控制网页链接批量抓取数据的办法. 但是你在预览一些网站时,会发现随着网页的下拉,你需要点 ...

  4. Netty源码解析---服务端启动

    Netty源码解析---服务端启动 一个简单的服务端代码: public class SimpleServer { public static void main(String[] args) { N ...

  5. 开启java之门

    一.Java语言概述 Java语言诞生于1995年,由Sun公司推出. 2009年,Sun公司被甲骨文公司收购,所以我们现在访问oracle官网即可:https://www.oracle.com Ja ...

  6. Java悲观锁Pessimistic-Lock常用实现场景

    1:商品库存秒杀采用悲观锁Pessimistic-Lock主要好处是安全,充分利用了数据库的性能来做的一种锁机制. 悲观锁的实现: (1)环境:mysql + jdbctemplate (2)商品表g ...

  7. 如何创建Github创库

    重点:利用Markdown语言写简单的日常使用的文本 基础写作和语法格式 本篇文章的内容来源于Github的基础写作帮助.如果在观看时有什么问题,可以直接查阅源文件.另外需要说明的是Git对Markd ...

  8. 【Java例题】5.5 两个字符串中最长公共子串

    5. 查找两个字符串中含有的最长字符数的公共子串. package chapter5; import java.util.Scanner; public class demo5 { public st ...

  9. java并发编程(二十一)----(JUC集合)CopyOnWriteArraySet和ConcurrentSkipListSet介绍

    这一节我们来接着介绍JUC集合:CopyOnWriteArraySet和ConcurrentSkipListSet.从名字上来看我们知道CopyOnWriteArraySet与上一节讲到的CopyOn ...

  10. Notepad++编辑器——Verilog、代码片段、F6编译

    Notepad++是一款精致小巧的编辑器,自带Verilog语法识别功能,插件也挺好用的.这里陈列一下我的设置. 版本:Notepad++ 7.6.6 ,32位 //================= ...