组合模式
在面向对象的语言中, 树结构有着巨大的威力, 一个基于继承的类型的等级结构便是一个数结构, 一个基于合成的对象结构也是一个数结构. 组合模式将部分与整体的关系用树结构表示出来, 使得客户端把一个个单独的成分对象和由它们组合而成的合成对象同等看待.
抽象构建角色: 一个抽象角色, 给参加组合的对象规定一个接口, 这个接口给出共有的接口及默认行为.
树叶构建角色: 代表参加组合的树叶对象, 没有子对象, 定义参加组合的原始对象行为.
树枝构建角色: 代表参加组合的有子对象的对象, 并给出树枝构件对象的行为.
对于子对象的管理方法如 add,remove,getchild 等, 有两种方式. 一种是透明方式: 直接定义在抽象构建角色中, 这样要求树叶和树枝构件都实现管理方法, 但是在树叶中是空实现. 另一种是安全方式: 只在树枝构件中实现管理方法, 而在树叶构件中只实现共有的方法.
门面模式
门面模式要求一个子系统的外部与其内部的通信必须通过一个统一的门面对象进行. 门面模式提供一个高层次的接口, 使得子系统更易于使用.
门面角色: 客户端调用这个角色的方法. 此角色知晓相关子系统的功能和责任, 将所有客户端的请求委派到相应的子系统.
子系统角色: 可以同时有一个或者多个子系统. 每个子系统可以被客户端直接或者通过门面调用, 子系统并不感知门面的存在.
享元模式
java 中的 String 使用了享元模式. String 对象是不变对象, 即创建后不可以改变. 如果要改变一个 String 的值, 只有新建一个 String 对象. 在 JVM 内部, String 对象都是共享的, 如果一个系统中有两个 String 对象所包含的字符串相同, JVM 实际上只创建了一个 String 对象, 提供给两个引用. 从而实现 String 对象的共享. String.intern() 方法给出这个字符串在共享池中的唯一实例.
抽象享元模式: 所有具体享元类的超类, 为这些类规定出需要实现的公共接口.
具体享元角色: 实现抽象享元的所有接口, 对象的部分或所有状态与所处环境无关, 是的对象可以在系统内共享.
享元工厂: 负责创建和管理享元角色, 如果已存在, 则返回已有的实例.
客户端角色: 维护一个对享元角色的引用, 自行管理享元对象中的可变状态, 客户端不可以直接实例化享元对象, 而必须通过工厂.
桥接模式
桥接模式的用意是通过聚合关系代替继承将抽象化与实现化脱耦, 使得二者可以独立地变化.
抽象化角色: 抽象化给出定义, 并保存一个对实现化对象的引用.
修正抽象化角色: 扩展抽象化角色, 改变和修正父类对抽象化的定义.
实现化角色: 给出实现化角色的接口, 但不给出具体实现. 此接口只给出底层操作, 而抽象化角色给出基于底层操作的更高一层操作.
具体实现化角色: 给出实现化角色接口的具体实现.
抽象化等级结构中的业务方法通过向对应的实现化对象委派自己的操作, 这意味着抽象化角色可以通过向不同的实现化对象委派, 来达到动态地转换自己功能的目的.
大多数的驱动器都是桥接模式的应用. 使用驱动程序的应用系统就是抽象化角色, 而驱动器本身扮演着实现化角色. JDBC 为所有的关系数据库提供一个通用的接口. 一个应用系统可以动态地选择一个合适的驱动器, 然后通过驱动器向数据库引擎发出指令. 由于 JDBC 驱动器的存在, 应用系统可以不依赖于数据库引擎的细节而独立地演化, 同时数据库引擎也可以独立于应用系统的细节而独立演化.
# 笔记内容参考《java 与模式》
来源: http://www.bubuko.com/infodetail-2831836.html