我参照书中的例程重新构想了一些更加生动、易于理解的例子,希望大家喜欢。
代码可以通过以下链接进行浏览:
结构型模式描述了如何将对象或类结合在一起,形成更加强大的结构。
- 代理模式
- 定义
- 也叫委托模式
- 为其他对象提供一种代理,以控制这个对象的访问
- 角色:抽象角色、真实角色、代理角色
- 种类:远程代理(访问另外的JVM)、虚拟代理(延迟创建不需要的部件)、保护代理、缓存代理、同步代理、智能引用代理(比如日志)
- 优点
- 职责清晰
- 高扩展性
- 智能化:在运行时才确定被代理的真实对象
- 使用场景
- 非常广泛,比如RMI AOP
- 定义
- 装饰模式
- 定义
- 动态地给一个对象添加额外的职责
- 角色:抽象构件、具体构件、装饰角色、具体装饰角色
- 优点
- 装饰类和被装饰类可以独立发展,不会耦合
- 装饰模式是继承的替代方案
- 装饰模式可以动态地扩展一个对象的功能
- 缺点
- 多层装饰比较复杂
- 使用场景
- 需要扩展一个类的功能
- 需要动态地给一个对象增加功能
- 需要给一批类进行改装或增加功能
- JavaIO中很多都用了装饰模式
- 定义
- 适配器模式
- 定义
- 又叫变压器模式
- 将一个类的接口转换成另一个接口
- 优点
- 可以让两个没有关系的类在一起运行
- 增加了类的透明度
- 提高类的复用度
- 增强代码的灵活性
- 使用场景
- 修改一个正在运营的系统时,需要对系统进行扩展,此时已有一个类,单这个类不符合系统中的接口,这是需要适配器来转换接口
- 定义
- 组合模式
- 定义
- 又叫合成模式
- 将对象组合成树形结构表示,使得整体和部分具有一致性
- 角色:抽象部件、叶子部件、树枝部件
- 优点
- 高层模块调用相对简单
- 节点自由增加
- 缺点
- 不易控制树枝的部件类型
- 不易使用继承方法增加新的行为
- 使用场景
- 菜单、文件等
- 需要客户端忽略整体和局部的区别,平等对待所有构件
- 定义
- 桥梁模式
- 定义
- 也叫桥接模式,是一种不常用的模式
- 将抽象和实现解耦合,使得两者可以独立变化
- 角色:抽象化角色、修正抽象化角色、实现化角色、具体实现化角色
- 优点
- 抽象和实现分离,实现可以不受抽象的约束
- 客户端不用关心实现细节
- 提高灵活性和扩展性
- 使用场合
- 如果需要在抽象和实现之间增加更多的灵活性
- 实现化的改变对客户端是完全没有影响的
- 可以动态耦合
- 不希望继承的场合
- 跨平台应用
- C++中可以完全隐藏实现部分
- 定义
- 外观模式
- 定义
- 也叫门面模式
- 要求子系统与外部的通信通过一个统一的对象进行
- 角色:外观角色、子系统角色
- 优点
- 减少系统项目依赖
- 提高灵活性
- 增强安全性
- 使用场景
- 希望子系统提供外界访问接口
- 子系统相对独立
- 预防风险扩散
- 定义
- 享元模式
- 定义
- 是池技术的重要实现方式
- 使用共享技术可以有效地降低大量细粒度操作产生的开销
- 分为内部状态和外部状态
- 角色:抽象享元、具体享元、享元工厂、客户端
- 优点
- 大幅减少系统中的内存开销
- 缺点
- 增加了系统的复杂性
- 享元模式的状态外部化,使得外部状态的运行时间变长
- 使用场景
- 系统中有大量相似的对象
- 对象的操作不需要特定的身份
- 需要缓冲池的场景
- Java中String Integer等都是享元模式
- 定义