几个设计模式的学习备忘
来源:互联网 发布:java swing html布局 编辑:程序博客网 时间:2024/06/03 16:45
1 Factory Method:工厂方法
1 对象创建型模式
2 意图:定义一个用于创建对象的接口,让子类决定实例化哪一个类,使一个类的实例化延迟到子类
3 别名:虚构造器
4 动机:框架使用抽象类定义和维护对象间的关系,对象的创建由框架负责。但它只知道要创建的对象的抽象父类,而不知道具体哪种子类将被创建
5 工厂方法:负责“生产”一个对象
6 本质:用一个virtual method完成创建过程
7 适用性:
1 当一个类不知道它所必须创建的对象的类的时候
2 当一个类不知道它所必须创建的对象的类的时候
2 Abstract Factory:抽象工厂
1 对象创建型模式
2 意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类
3 别名:Kit
4 动机:客户仅通过NotepadFactory接口创建Notepad的组件monitor/battery/cpu,它们并不知道哪些类创建了这些组件。即客户仅与抽象类定义的接口交互,而不使用特定的具体类的接口
5 适用性:
1 一个系统要独立于它的产品的创建、组合和表示时 2 一个系统要有多个产品系列中的一个来配置时
3 当你要强调一系列相关的产品对象的设计以便进行联合使用时
4 当你要提供一个产品类库,而只想显示它们的接口而不是实现时
6 效果:
1 它分离了具体的类
2 它使得易于交换产品系列
3 有利于产品的一致性
4 难以支持新种类的产品
1-2 工厂方法与抽象工厂:总结
1 Factory Method是基础,Abstract Factory是扩展
2 Factory Method、Abstract Factory都设计到类层次结构中对象的创建过程
1 Factory Method需要依附一个Creater类
2 Abstract Factory需要一个平行的类层次
3 Adapter(适配器模式)
1 意图:将一个类的接口转换为客户希望的另外一个接口。Adapter可以使原本接口不兼容而不能一起工作的类可以一起工作
2 动机:为复用而设计的工具箱类不能被复用的原因仅仅因为它的接口与专业应用领域所需要的接口不同
3 适用性:
1 希望使用一个已存在的类,而它的接口不符合要求
2 想创建一个可复用的类,该类可以与不相干或不可预见的类协同工作
4 Observer(观察者模式)
1 意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知并被自动更新
2 动机:需要维护相关对象间的一致性,且不希望为了维护一致性而使各类间紧密耦合,这样可以降低它们间的可重用性
5 MVC(Model-View-Control)
1 MVC关系图
2 MVC关系图的理解
模型M
视图V
控制器C
分工
抽象系统应用的功能
抽象数据表达
抽象用户和系统的事件的语义映射
封装系统的状态
表示针对用户的数据
把用户的输入翻译为系统事件
提供使用系统功能的方法和路径
维护与Model数据的一致性
根据用户的输入和上下文情况选择合适的显示数据
管理数据的存储和一致性
当数据发生变化时通知相关部分
协作
当它改变系统数据时通知view
把model表征给用户
把用户输入转变成对model的系统行为
能够被view检索数据
当数据被相关model改变时更新表示的数据
根据用户输入和model的动作结果选择合适的view
提供对controller的操作途径
把用户输入提交给controller
6 Iterator(迭代器模式)
1 意图:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示
2 动机:一个聚合对象(如list)应提供一种方法让别人可以访问其内部的元素,而又不暴漏内部结构。针对不同的需要,可以以不同的方式遍历该列表
3 关键思想:将对列表的访问和遍历从列表中分离出来并放入一个迭代器(iterator)对象中。由迭代器定义一个访问该列表元素的接口。迭代器复杂跟踪跟踪当前的元素,即它知道哪些元素访问过了。
4 效果:
1 支持以不同的方式遍历一个聚合对象;也可以自己定义迭代器的子类以支持新的遍历
2 迭代器简化了聚合的接口
3 在同一个聚合对象上可以有多个遍历,即可以同时进行多个遍历
- 几个设计模式的学习备忘
- 设计模式的几个原则
- 设计模式的几个基本原则
- 几个设计模式的例子
- 常用的几个设计模式
- 基本的几个设计模式
- 设计模式的几个原则
- 备忘 设计模式
- 设计模式备忘
- c++ 设计模式备忘:
- 备忘-设计模式
- 设计模式原则备忘
- 设计模式系列19---可复原的备忘模式
- 几个零散的设计模式类图
- 几个难以理解的设计模式
- 设计模式的几个重要原则
- 合作开发用到的几个 设计模式
- 关于设计模式的几个有趣比喻
- CString用法整理
- Linux的一些常用命令
- PSD下载资源
- JS在指定时间运行代码(可运行后台代码)
- AfxBeginThread
- 几个设计模式的学习备忘
- c# mvc webGrid 无刷新分页
- 1204 Word Puzzles
- GridView 导出为Excel
- 关于《南都遭封杀……漩涡中的中国首富李彦宏……》的感想
- Creator(级联查询)
- Timer class with queued callbacks
- [ZZ]如何用栈实现递归与非递归的转换
- asp.net中导出到Excel的方法汇总