重点 命令 模式撤销
抽象工厂整套????
对象类适配器???
明天带粗鄙
最难的两套卷
时间安排
猜20道选择 40 20min
5简答 20 20min
2大题 40 20min一个
最后检查一下 注意审题,默念题干
真理
方法向父类集中,数据向子类集中
MVC使用的设计模式
p4观察者模式 组合模式 策略 工厂方法 装饰 控制器就是一个中介者模式
硬编码
硬编码是将数据直接嵌入到程序或其他可执行对象的源代码中的软件开发实践,与从外部获取数据或在运行时生成数据不同。 硬编码数据通常只能通过编辑源代码和重新编译可执行文件来修改,尽管可以使用调试器或十六进制编辑器在内存或磁盘上进行更改。 硬编码的数据通常表示不变的信息,例如物理常量,版本号和静态文本元素。 另一方面,软编码数据对用户输入,HTTP服务器响应或配置文件等任意信息进行编码,并在运行时确定。
+策略模式的描述
TODO
最后的面向对象关系
再复习1.5遍代码
重点复习 命令模式 中介者模式 观察者模式 享元模式 原型模式 抽象工厂 状态模式 备忘录模式
第二章
违背开闭原则的:简单工厂 原型模式深克隆 外观模式(增加子系统可能修改外观类) 不用策略模式而用条件判断
状态模式对开闭原则的支持并不太好
符合开闭 工厂方法 建造者 适配器 组合模式 装饰模式 代理模式 命令模式 中介者模式 策略模式 桥接模式
违背单一职责 单例模式
符合单一职责 桥接模式
迪米特原则 外观模式 中介者模式
对象结构式模式 外观 组合 享元 代理
对象行为模式 观察者 策略 状态 命令 职责链 中介者 备忘录
撤销操作 命令 备忘录
简单工厂
- 同一个基类 只需要名字即可 静态工厂方法 分离对象创建与业务 无需知道类名,只需知道参数 违背了开闭原则
- JDK 简单工厂 格式化日期 java加密技术 输入一个字符串得到一个算法接口
工厂方法
- 关键字 创建一个对象的接口,让其子类自己决定初始化哪一个工厂类 生成复杂对象 不需要知道所需对象的类 封装产品对象创建细节 动态指定
抽象工厂
- 关键字 一系列相关或相互依赖的接口 无需指定具体类 系统的产品有多于一个的产品族 隔离了具体类的生成
- 增减新的产品族工厂容易,增加产品等级结构麻烦
- 例题 QQ换皮肤 软件换主题
- 开闭原则 的倾斜性
建造者
- 关键字 复杂对象构建与表示分离 同样的构建不同的表示 用户不需要知道内部的具体构建细节 或者生产的产品属性之间相互有依赖
- 例题 KFC套餐p26
原型
- 关键字 拷贝创建新对象 稍微修改即可 创建新对象成本较大 系统保存对象的状态而状态变化很小用原型,变化很大用状态 避免分层次的工厂创建
- 例题 邮件复制 p31 原型管理器 相似对象的复制
- 大量"一样的图块"
- 软件提供的复制粘贴操作
- 2014A 个性化邮件
单例
- 关键字 一个实例 全局访问 扩展困难 违背了单一职责 只允许有一个公共访问点
- 例题 PPT 身份证号码 一个系统只允许一个打印池对象
- 饿汉单例模式 懒汉单例模式 注意同步
适配器
- 关键字 一个类的接口转另一个类的接口 不兼容一起工作 目标类适配者解耦
- 例题 没有源代码 函数名不一样 双向适配器
- 2015A API结构和调用方法存在差别
- 应用 不同的数据库调用API 大话设计模式里有
桥接
- 关键字 抽象与实现分离,都可独立变化 多个独立变化维度
- 例题 画不同颜色的不同形状 PPT模拟毛笔 跨平台播放器
- 适配器+桥接模式 期末题
- 应用 java语言通过虚拟机实现平台无关
组合
- 关键字 树形结构 单个对象复合对象具有一致性 整体-部分 忽略层次差异
- 例题 PPT 水果盘 文件浏览
- 大厦有很多类 管线按层查看
- 扩展 安全组合模式 透明组合模式
- 应用 操作系统树形结构 java swing
装饰
- 关键字 扩展功能 不知道源代码? 继承或关联实现 不能继承时也可用装饰者(不知道源码) 对象结构式模式 可以多个装饰模式组合
- 例题 PPT变形金刚 多重加密系统
- 扩展
外观
- 关键字 一致的界面 简化接口 对象结构式模式 客户类与子系统内部复杂性分隔开
- 例题 PPT 电气开关 文件加密(过程复杂)
- 把复杂软件弄成菜鸟模式 外观
- 首页 导航界面 快速访问子系统 菜单 工具栏
- 抽象外观 更加符合开闭原则
享元
- 关键字 共享技术支持大量细粒度对象 对象结构模式 相同或者相似对象内存中只保存一份 有大量相同相似对象适用 状态可以外部化 多次重复使用 状态变化小
- 外部状态:可随环境变化\不可以共享的状态
- 例题 PPT 共享网络设备
- 应用 创建一个图片对象 文档中多次使用 只需要标明位置
- 扩展 单纯享元模式 复合享元模式 +单例模式(只有一个享元工厂) +组合模式(复合享元)
代理
- 关键字 控制对象访问 对象结构模式 协调调用者和被调用这者
- 例题 PPT 论坛权限控制 数学运算代理(本地设置一个代理,远程实现了数学运算)
- 扩展 虚拟代理
- 远程代理 不同地址空间的局部代表
- 虚代理 创建开销很大的对象 代替创建这个对象
- 保护代理 设置访问权限
职责链
- 关键字 解除发送者和接受者耦合 可以是直线 环 树形结构 对象行为型模式
- 例题 PPT 审批假条
- java异常处理 Web过滤器 java awt
- 扩展 纯的职责链 不纯的职责链
命令
- 关键字 一个请求对应一个对象 解耦发送者和请求接受者 相同的接受者可以供不同请求者使用 需要在不同时间指定请求 请求排队操作 撤销恢复
- 例题 PPT 电视机遥控器 功能键设置
- 请求日志 命令队列
中介者
- 关键字 封装对象交互 独立改变交互 对象存在大量多对多联系 星型结构 简化对象交互 对象行为型模式
- 又名调停者模式
- 例题 PPT 虚拟聊天室
备忘录
关键字 不破坏封装性 保存状态 撤销 防止破坏历史封装性 对象行为型模式 内部状态信息不能被其他对象访问(不能在对象之外保存)
例题
一个集合存多个状态 可以撤销
备忘录可以和原型模式组合使用
状态
关键字 状态改变行为改变 可以避免过多的条件判断语句 封装了转换的规则 减少了条件语句的耦合 对象行为型模式
例题
策略
- 关键字 封装算法 对象行为型模式 动态选择算法 避免多重条件选择
- 例题 PPT 排序算法 旅游出行策略
- 2015 A1 卖票策略
观察者
- 定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新 对象行为模式
- java事件对象 一对一观察者模式
- 扩展 MVC模式