将类像搭积木一样搭建起来
- 类结构型模式
- 对象结构型模式
- 关心类与对象的组合
适配器模式
- 客户端可以通过目标类的接口访问它所提供的服务
- :适配器
- 被包装的对象:适配者
- 将一个接口转换为客户想要的接口
- 角色
- target 目标抽象类
- adapter 适配器类
- Adaptee 适配者类
- Client 用户
- 目标类和适配者类解耦
- 增加了类的透明性和复用性
- 灵活性和扩展性很好
- 类适配器
- 优点:可以透明使用子类
- 缺点:对于单继承语言,无法提供多个适配器
- 对象适配器
- 考虑到组合优于继承,适配器类关联适配者类
- 缺点:当Adaptee不适合修改时,如果要适配这个类就需要生成Adaptee的子类,然后在Adapter内调用子类方法
- 双向适配器
- Java的inputStreamAdapter类用于包装InputStream类
- 适配器中同时包含对目标类和适配者类的引用
- 默认适配器模式(缺省适配器模式)
- 实现适配器的部分接口
桥接模式
- 多对多:n——m(两个维度)
- 将继承关系转换为关联关系来解耦;同时减少类
- 抽象和实现部分分离
- 角色
- 抽象类
- 重写抽象类
- 实现接口
- 具体实现类
- 优点:抽象和实现分离,优于多继承
- 缺点:难以理解
- 例如:跨平台播放器
组合模式(整体-部分模式)
- 例如Linux的文件树
- 容器对象和叶子对象
- 组合模式令客户不去区分容器对象和叶子对象,使用具有一致性
- 文件树
- 容器类聚合了组件类,这样容器类可以声明一个抽象组件类,并调用其子类叶子节点
- 因为叶子和容器类同时继承了组件类,这样就模糊了容器类和叶子类的区别
- 实例
- 水果盘
- 文件夹遍历
- XML文档解析
- Swing组件
- 安全组合模式
- 在叶子节点中不声明管理方法(管理list)
- 透明组合模式
- 在叶子节点中实现所有组件类的方法
- 折中
- 在叶子节点中实现所有组件类的方法,但是对于管理方法抛出异常
- 组合模式的确定啊
- 设计变的更加抽象
- 新增叶子节点容易出错
享元模式
- 享元池
- 角色
- Flyweight 抽象享元类
- 定义一个接口,通过该接口接受并作用于外部状态
- 当有外部状态时,需要依赖外部类
- ConcreteFlyweight 具体享元类
- 为内部状态增加存储空间,可共享的,状态是内部的
- UnsharedConcreteFlyweight 非共享具体享元类
- 不强制共享
- FlyweightFactory 享元工厂类
- 创建并管理享元类
- Flyweight 抽象享元类
- 处理内部状态
作业:
加密适配器
仿生机器人
毛笔
跨平台视频播放器
java虚拟机