java设计模式5.组合模式、门面模式、享元模式、桥接模式
- 组合模式
在面向对象的语言中,树结构有着巨大的威力,一个基于继承的类型的等级结构便是一个数结构,一个基于合成的对象结构也是一个数结构。组合模式将部分与整体的关系用树结构表示出来,使得客户端把一个个单独的成分对象和由它们组合而成的合成对象同等看待。
- 抽象构建角色:一个抽象角色,给参加组合的对象规定一个接口,这个接口给出共有的接口及默认行为。
- 树叶构建角色:代表参加组合的树叶对象,没有子对象,定义参加组合的原始对象行为。
- 树枝构建角色:代表参加组合的有子对象的对象,并给出树枝构件对象的行为。
对于子对象的管理方法如add,remove,getchild等,有两种方式。一种是透明方式:直接定义在抽象构建角色中,这样要求树叶和树枝构件都实现管理方法,但是在树叶中是空实现。另一种是安全方式:只在树枝构件中实现管理方法,而在树叶构件中只实现共有的方法。
- 门面模式
门面模式要求一个子系统的外部与其内部的通信必须通过一个统一的门面对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。
- 门面角色:客户端调用这个角色的方法。此角色知晓相关子系统的功能和责任,将所有客户端的请求委派到相应的子系统。
- 子系统角色:可以同时有一个或者多个子系统。每个子系统可以被客户端直接或者通过门面调用,子系统并不感知门面的存在。
- 享元模式
java中的String使用了享元模式。String对象是不变对象,即创建后不可以改变。如果要改变一个String的值,只有新建一个String对象。在JVM内部,String对象都是共享的,如果一个系统中有两个String对象所包含的字符串相同,JVM实际上只创建了一个String对象,提供给两个引用。从而实现String对象的共享。String.intern()方法给出这个字符串在共享池中的唯一实例。
- 抽象享元模式:所有具体享元类的超类,为这些类规定出需要实现的公共接口。
- 具体享元角色:实现抽象享元的所有接口,对象的部分或所有状态与所处环境无关,是的对象可以在系统内共享。
- 享元工厂:负责创建和管理享元角色,如果已存在,则返回已有的实例。
- 客户端角色:维护一个对享元角色的引用,自行管理享元对象中的可变状态,客户端不可以直接实例化享元对象,而必须通过工厂。
- 桥接模式
桥接模式的用意是通过聚合关系代替继承将抽象化与实现化脱耦,使得二者可以独立地变化。
- 抽象化角色:抽象化给出定义,并保存一个对实现化对象的引用。
- 修正抽象化角色:扩展抽象化角色,改变和修正父类对抽象化的定义。
- 实现化角色:给出实现化角色的接口,但不给出具体实现。此接口只给出底层操作,而抽象化角色给出基于底层操作的更高一层操作。
- 具体实现化角色:给出实现化角色接口的具体实现。
抽象化等级结构中的业务方法通过向对应的实现化对象委派自己的操作,这意味着抽象化角色可以通过向不同的实现化对象委派,来达到动态地转换自己功能的目的。
大多数的驱动器都是桥接模式的应用。使用驱动程序的应用系统就是抽象化角色,而驱动器本身扮演着实现化角色。JDBC为所有的关系数据库提供一个通用的接口。一个应用系统可以动态地选择一个合适的驱动器,然后通过驱动器向数据库引擎发出指令。由于JDBC驱动器的存在,应用系统可以不依赖于数据库引擎的细节而独立地演化,同时数据库引擎也可以独立于应用系统的细节而独立演化。
#笔记内容参考《java与模式》
java设计模式5.组合模式、门面模式、享元模式、桥接模式的更多相关文章
- 设计模式C#实现(十三)——享元模式(蝇量模式)
意图 0 适用性 1 结构 2 实现 3 效果 4 参考 5 意图 运用共享技术有效地支持大量细粒度的对象. 适用性 当以下情况都成立时使用: 一个程序使用了大量的对象 完全由于使用大量对象造成很大存 ...
- 《JAVA与模式》之享元模式
<JAVA与模式>之享元模式 在阎宏博士的<JAVA与模式>一书中开头是这样描述享元(Flyweight)模式的: Flyweight在拳击比赛中指最轻量级,即“蝇量级”或“雨 ...
- 设计模式之(十二)享元模式(Flyweight)
享元模式思想 就以小时候导锅来说吧(导锅是我家乡的方言,就是用细沙把一个模型锅的形状拓下来,然后把铝水倒进模型中,就导好一个锅了.小时候很喜欢看的,可惜现在看不到了.上个图片回忆下)了解了这个过程后就 ...
- 老和尚给小和尚讲故事引发了Java设计模式:组合模式
目录 示例 组合模式 定义 意图 主要解决问题 优缺点 安全式和透明式的组合模式 安全式的合成模式的结构 透明式的合成模式的结构 老和尚和小和尚的故事 示例 有一个绘图系统,可以描绘各种图形,假设现在 ...
- NET设计模式 第二部分 结构性模式(12):享元模式(Flyweight Pattern)
享元模式(Flyweight Pattern) ——.NET设计模式系列之十三 Terrylee,2006年3月 摘要:面向对象的思想很好地解决了抽象性的问题,一般也不会出现性能上的问题.但是在某些情 ...
- 设计模式-创建型模式,python享元模式 、python单例模式(7)
享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能.这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式. 享元模式尝 ...
- java高新技术-基本数据类型拆装箱及享元设计模式
享元设计模式 public static void main(String[] args) { Integer iObj = 3; //自动装箱 System.out.println(iObj + 1 ...
- 23种设计模式 - 对象性能(Singleton - Flyweight享元)
其他设计模式 23种设计模式(C++) 每一种都有对应理解的相关代码示例 → Git原码 ⌨ 对象性能 面向对象很好地解决了"抽象"的问题,但是必不可免地付出一定的代价.对于通常情 ...
- java设计模式之组合模式
组合模式 组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性.掌握组合模式的重点是要理解清楚 “部分/整体” 还有 ”单个对象“ 与 & ...
随机推荐
- jQuery中的事件与动画 笔记整理
一. jQuery中的事件 jQuery事件是对javaScript事件的封装. 1.基础事件 在javaScript中,常用的基础事件有鼠标事件.键盘事件.window事件.表单事件.事件的绑定和处 ...
- context创建过程解析(三)之deployDirectories
HostConfig.deployApps() //在监听到start事件类型,也就是StandardHost调用startInternal protected void deployApps() { ...
- java中对事务的理解
一.什么是事务 事务是访问数据库的一个操作序列,数据库应用系统通过事务集来完成对数据库的存取. 二.事务的原则(ACID) 原子性:事务要么全部都被执行,要么就全都不被执行,如果有子事务提交失败,那么 ...
- LeetCode :1.两数之和 解题报告及算法优化思路
最近开始重拾算法,在 LeetCode上刷题.顺便也记录下解题报告以及优化思路. 题目链接:1.两数之和 题意 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 ...
- javascript 异步请求封装成同步请求
此方法是异步请求封装成同步请求,加上token验证,环境试用微信小程序,可以修改文件中的ajax,进行封装自己的,比如用axios等 成功码采用标准的 200 到 300 和304 ,需要可以自行修改 ...
- Activiti6系列(4)- 三个war包的数据源及密码修改
一.activiti-app修改数据源和密码 1.使用sublimetext工具打开tomcat,方便进行配置文件的修改. 找到被解压的war包,activiti-app/WEB-INF/classe ...
- ASP.NET Core MVC 之视图组件(View Component)
1.视图组件介绍 视图组件是 ASP.NET Core MVC 的新特性,类似于局部视图,但它更强大.视图组件不使用模型绑定,并且仅依赖于调用它时所提供的数据. 视图组件特点: 呈块状,而不是整个响应 ...
- 微信小程序云开发报错解决: Setting data field "openid" to undefined is invalid.
最近在学习微信小程序云开发,刚一开始就遇到了问题. 点击获取openid的时候控制台开始报错: [云函数] [login] user openid: undefined VM97:1 Setting ...
- HTML5 Device Access (设备访问)
camera api (含图片预览) 参考地址 主要为利用input type=file, accept="image/*" 进行处理 图片预览方式(两种) const file ...
- org.apache.spark.logging类报错
一,1 在使用spark读取kafka数据时,当spark升级到2.0之后,出现如上问题:之前遇到了,当时在工程里面添加了org.apache.spark.Logging类,能够运行. 但是在后期使用 ...