组合模式

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

抽象构建角色:一个抽象角色,给参加组合的对象规定一个接口,这个接口给出共有的接口及默认行为。

树叶构建角色:代表参加组合的树叶对象,没有子对象,定义参加组合的原始对象行为。

树枝构建角色:代表参加组合的有子对象的对象,并给出树枝构件对象的行为。

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

门面模式

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

门面角色:客户端调用这个角色的方法。此角色知晓相关子系统的功能和责任,将所有客户端的请求委派到相应的子系统。

子系统角色:可以同时有一个或者多个子系统。每个子系统可以被客户端直接或者通过门面调用,子系统并不感知门面的存在。

享元模式

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

抽象享元模式:所有具体享元类的超类,为这些类规定出需要实现的公共接口。

具体享元角色:实现抽象享元的所有接口,对象的部分或所有状态与所处环境无关,是的对象可以在系统内共享。

享元工厂:负责创建和管理享元角色,如果已存在,则返回已有的实例。

客户端角色:维护一个对享元角色的引用,自行管理享元对象中的可变状态,客户端不可以直接实例化享元对象,而必须通过工厂。

桥接模式

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

抽象化角色:抽象化给出定义,并保存一个对实现化对象的引用。

修正抽象化角色:扩展抽象化角色,改变和修正父类对抽象化的定义。

实现化角色:给出实现化角色的接口,但不给出具体实现。此接口只给出底层操作,而抽象化角色给出基于底层操作的更高一层操作。

具体实现化角色:给出实现化角色接口的具体实现。

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

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

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

组合模式 桥接模式 java_java设计模式5.组合模式、门面模式、享元模式、桥接模式...相关推荐

  1. 【设计模式2022】第十三章 享元模式

    [设计模式2022]第十三章 享元模式 文章目录 [设计模式2022]第十三章 享元模式 一.概述 二.结构 三.实现 四.分析 1.优点 2.缺点 3.使用场景 五.Integer 包装类 一.概述 ...

  2. 设计模式【10】-- 顺便看看享元模式

    开局还是那种图,各位客官往下看- 享元模式是什么? 享元模式(FlyWeight),是结构型模式的一种,主要是为了减少创建对象的数量,减少内存占用以及提高性能.说到这里,不知道你是否会想到池技术,比如 ...

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

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

  4. 设计模式C++实现(9)——享元模式

    软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径.设计模式中运用了面向对象编程语言的重要特性:封装.继承.多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累.最 ...

  5. java 地图模式_Java设计模式之从[Dota地图]分析享元(Flyweight)模式

    在Dota游戏的地图中有几百棵树,现在假设这些树木无非是这两种:白杨.枫树,数量一共为400棵,那么,在装载这个地图场景的时候,我们是不是应该给这400课树一一建立对象呢?(如:MapItem tre ...

  6. 组合的示例代码 java_java实现Composite组合模式的实例代码

    //20210121 写在前面:刚期末考试完,考了面向对象,里边儿有23个设计模式,我寻思着考完挨个儿实现一下,本文实现组合模式 组合模式核心思想类似文件夹的概念,构件树形结构,树形有叶子结点和文件夹 ...

  7. 数列的组合及排列方式java_java数组排列组合

    ⑥ 对于正面考虑太复杂的问题,可以考虑反面. ⑦ 对于一些排列数与组合数的问题,需要构造模型. 典例分析排列数组合数的简单计算 [例1] 对于满足 n ≥ 13 的正...... Java 实现排列组 ...

  8. 《精通Python设计模式》学习结构型之享元模式

    这个我日常当中也没有用到过, 真的是游戏行业用得多些? 学习一下, 有个印象. import random from enum import EnumTreeType = Enum('TreeTye' ...

  9. java设计模式---享元模式

    Java深入到一定程度,就不可避免的碰到设计模式这一概念,了解设计模式,将使自己 对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广 泛,遵循一定的编程模式,才能使自己的 ...

最新文章

  1. [无向图割点] PKU 1523 SPF
  2. Python这么热,要不要追赶Python学习热潮?
  3. Scrapy匹配xpath时tbody标签的问题
  4. 最激动人心的视觉系统其实是最枯燥乏味的
  5. MySQL 隐式转换 字符串和整型说明
  6. 【Python】Matplotlib利用楔形绘制圆环形饼图
  7. mysql 备份的脚本
  8. 库克看下!罗永浩深夜再谈收购苹果:还需要点时间
  9. Github-PAT(Personal Access Token)
  10. android经典动态壁纸,android中自定义动态壁纸
  11. 计算机处理汉字信息时所使用的代码是,计算机处理汉字信息时所用的代码是什么...
  12. 负载均衡器部署方式和工作原理
  13. 关于各种校园网,局域网等出现IP识别错误(169IP开头)及其导致的联网失败,DNS错误的解决方法
  14. 解决机械+固态的电脑无法安装window10系统的问题
  15. C语言 弹小球 小游戏(控制台)
  16. ps意外崩溃_最新—Mac软件意外退出/移到废纸篓的解决方案,亲测有效
  17. 报错ConnectionString属性尚未初始化。
  18. mysql中limit2,1和limit2 offset 1的区别
  19. 五年级计算机课总结,2015秋信息技术五年级上册工作总结
  20. CC26xx(CortexM3) Watchdog Timer

热门文章

  1. fraction函数的分数处理
  2. cv2.bitwise_not(主要讲这个)
  3. 引用一个网络图片作为样式的致命悲剧
  4. 微信小程序 - 实现购物车结算
  5. 【FPGA-F3】阿里云FAAS平台,极大简化FPGA开发部署流程
  6. 1分钟破解3dState '学习版'得一些版权信息。
  7. PHP实现二叉树的深度优先遍历(前序、中序、后序)和广度优先遍历(层次) 转载陈小龙哈2017...
  8. AngularJS例子 ng-repeat遍历输出 通过js的splice方法删除当前行
  9. 美国第一大移动运营商的5G战略:已进入预商用测试
  10. 将RHEL7/centos7系统网卡名称eno16777736改为eth0