
设计模式笔记
文章平均质量分 82
记录学习设计模式的笔记, 并结合自身的设计开发经历进行心得上的总结. 还在进行中.
小大小丑
小丑
展开
-
[设计模式笔记]索引
一. 对象创建型模式1. Simple Factory (简单工厂模式)http://blog.youkuaiyun.com/bagboy_taobao_com/article/details/9495425http://blog.youkuaiyun.com/bagboy_taobao_com/article/details/94955292. Factory Method(工厂方法模式原创 2013-10-26 12:12:16 · 1280 阅读 · 0 评论 -
[设计模式笔记]快速小结(三)---行为型模式2
三. 行为型模式20. Observer(观察者模式)意图: 定义对象间的一种一对多的依赖关系, 当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新. 结构:图22说明: 文档视图就是用这个模式.http://blog.youkuaiyun.com/bagboy_taobao_com/article/details/1285315121.原创 2013-10-26 12:04:37 · 1295 阅读 · 0 评论 -
[设计模式笔记]快速小结(三)---行为型模式1
三. 行为行模式14. Chain Of Responsibility(职责链模式)意图: 使多个对象都有机会处理请求, 从而避免请求的发送者和接收者之间的耦合关系. 将这些对象连成一条链, 并沿着这条链传递该请求, 直到有一个对象处理它为止.结构:图16说明: 有多少开端, 就有多少条责任链.http://blog.youkuaiyun.com/bagboy_taob原创 2013-10-26 11:59:54 · 1406 阅读 · 0 评论 -
[设计模式笔记]快速小结(二)---结构型模式
二. 结构型模式7. Adapter(适配器模式)意图: 将一个类的接口转换成客户希望的另外一个接口. Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作.结构:图7 多重继承实现方式.图8 对象组合方式实现说明: Adapter中的Request实现调用了Adaptee中的方法. 怎样使得Adapter可以调用Adaptee原创 2013-10-26 11:53:37 · 1387 阅读 · 0 评论 -
[设计模式笔记]快速小结(一)---对象创建型模式
一. 对象创建型模式1. Simple Factory (简单工厂模式)意图: 隐藏创建具体类的代码.结构:图1说明: nWhichProducthttp://blog.youkuaiyun.com/bagboy_taobao_com/article/details/9495425http://blog.youkuaiyun.com/bagboy_taobao_com/article/原创 2013-10-26 11:46:36 · 1423 阅读 · 0 评论 -
[设计模式笔记]三. 行为型模式--25. Visitor模式(访问者)对象行为型模式(二)
场景根据Visitor模式的结构图和自己的理解.如图:图1代码class ObjectStruct{public: Element* m_pElementA; Element* m_pElementB; // 你也可以使用一个数组, 列表等来存储里面的ObjectStruct中的元素. // 因为这里使用的是父类Element的指原创 2013-10-26 08:33:14 · 1424 阅读 · 0 评论 -
[设计模式笔记]三. 行为型模式--25. Visitor模式(访问者)对象行为型模式(一)
行为型模式--Visitor(访问者)对象行为型模式一. 意图 表示一个作用于某对象结构中的各元素的操作. 它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作.. 使用Visitor模式, 必须定义两个类层次: 一个对应于接受操作的元素层次, 另一个对应于定义对元素的操作的访问者层次(元素访问者). 给访问者类层次增加一个新的子类原创 2013-10-26 08:28:25 · 1368 阅读 · 0 评论 -
[设计模式笔记]三. 行为型模式--24. Template Method模式(模板方法)类行为型模式(一)
行为型模式--Template Method模式(模板方法)类行为型模式一. 意图 定义一个操作中的算法的骨架, 而将一些步骤延迟到子类中. TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤.通过使用抽象操作定义一个算法中的一些步骤, 模板方法确定了它们的先后顺序. 二. 适用性1. 各原创 2013-10-24 17:40:12 · 1427 阅读 · 0 评论 -
[设计模式笔记]三. 行为型模式--23. Strategy模式(策略)对象行为型模式(一)
一. 意图允许一个对象在其内部状态改变时改变它的行为. 对象看起来似乎修改了它的类.(状态与行为绑定, 状态变了, 行为也就随之改变.).二. 适用性当存在以下情况时使用Strategy模式许多相关的类仅仅是行为有异. "策略"提供了一种用多个行为中的一个行为来配置一个类的方法.需要使用一个算法的不同变体. 例如, 你可能会定义一些反映不同的空间/时原创 2013-10-24 17:34:08 · 1443 阅读 · 0 评论 -
[设计模式笔记]三. 行为型模式--22. State模式(状态)对象行为型模式(一)
行为型模式--State模式(状态)对象行为型模式一. 意图允许一个对象在其内部状态改变时改变它的行为. 对象看起来似乎修改了它的类.(状态与行为绑定, 状态变了, 行为也就随之改变.).二. 适用性在下面的两种情况下均可使用State模式:一个对象的行为取决于它的状态, 并且它必须在运行时刻根据状态改变它的行为.一个操作中含有庞大的多分支的原创 2013-10-24 17:27:20 · 1532 阅读 · 0 评论 -
[设计模式笔记]三. 行为型模式--21. Observer模式(观察者)对象行为型模式(一)
行为型模式--Observer模式(观察者)对象行为型模式一. 意图 定义对象间的一种一对多的依赖关系, 当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新. 这一模式中的关键对象是目标(subject)和观察者(observer). 一个目标可以有任意数目的依赖它的观察者. 一旦目标的状态发生改变, 所有的观察者都得到通知. 作为对这个原创 2013-10-18 14:31:32 · 1806 阅读 · 0 评论 -
[设计模式笔记]三. 行为型模式--20. Memento模式(备忘录)对象行为型模式(一)
行为型模式--Memento模式(备忘录)对象行为型模式一. 意图 在不破坏封装性的前提下, 捕获一个对象的内部状态, 并在该对象之外保存这个状态. 这样以后就可将该对象恢复到原先保存的状态. 一个备忘录(memento)是一个对象, 它存储另一个对象在某个瞬间的内部状态, 而后者称为备忘录的原发器(originator). 当需要设置原发原创 2013-10-18 10:14:33 · 1547 阅读 · 0 评论 -
[设计模式笔记]三. 行为型模式--19. Mediator模式(中介者)对象行为型模式(一)
行为型模式--Iterator模式(迭代器)对象行为型模式一. 意图 用一个中介对象来封装一系列的对象交互. 中介者使各对象不需要显式地相互引用, 从而使其耦合松散, 而且可以独立地改变它们之间的交互.二. 适用性一组对象以定义良好但是复杂的方式进行通信。产生的相互依赖关系结构混乱且难以理解.一个对象引用其他很多对象并且直接与这些对象通信原创 2013-10-17 20:05:04 · 1465 阅读 · 0 评论 -
[设计模式笔记]三. 行为型模式--18. Iterator模式(迭代器)对象行为型模式(一)
行为型模式--Iterator模式(迭代器)对象行为型模式一. 意图 提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示.二. 适用性访问一个聚合对象的内容而无需暴露它的内部表示.支持对聚合对象的多种遍历(例如顺序遍历list, 倒序遍历list等)为遍历不同的聚合结构提供一个统一的接口(支持多态迭代)原创 2013-10-15 12:01:08 · 1931 阅读 · 0 评论 -
[设计模式笔记]三. 行为型模式--17. Interpreter模式(解释器模式)(二)
场景:我定义一个加减法则// 表达式expression ::= literal | PlusSign | MinusSign | '(' expression ')'// 加号(执行加法)PlusSign ::= '+'// 减号(执行减法)MinusSign ::= '-'// 终结符(终结符有数字字符组成)literal ::= '0' | '原创 2013-10-14 17:42:40 · 1495 阅读 · 0 评论 -
[设计模式笔记]三. 行为型模式--17. Interpreter模式(解释器模式)(一)
行为型模式--Interpreter(解释器)类行为型模式一. 意图 给定一个语言, 定义它的文法的一种表示, 并定义一个解释器, 这个解释器使用该表示来解释语言中的句子.二. 适用性 如果一种特定类型的问题发生的频率足够高, 那么可能就值得将该问题的各个实例表述为一个简单语言中的句子. 这样就可以构建一个解释器, 该解释器通过解释这些句原创 2013-10-14 17:36:45 · 1600 阅读 · 0 评论 -
[设计模式笔记]三. 行为型模式--16. Command模式(命令模式)(一)
行为型模式--Command模式(命令)对象行为型模式一. 意图 将一个请求封装为一个对象, 从而使你可用不同的请求对客户进行参数化; 对请求排队或记录请求日志, 以及支持可撤消的操作.(封装成对象, 从而可以利用面向对象中继承, 多态, 重载等特性, 从而使得你的设计更灵活, 独立, 解耦, 内聚)二. 适用性这一模式的关键是一个抽象的Com原创 2013-10-12 17:19:29 · 1682 阅读 · 0 评论 -
[设计模式笔记]三. 行为型模式--15.Chain Of Responsibility(职责链模式)(二)
场景:根据自己的理解和书上的例子假设了这样的场景在一个程序中, 按F1, 程序显示出鼠标所在的区域的帮助信息. 例如鼠标在对话框的左上角区域, 则显示对话框的帮助信息XXX. 鼠标在对话框的左上角区域的按钮上时, 也是显示对话框的帮助信息XXX. (总之是在鼠标的左上角上, 无论在不在控件上)角色:CMyAPP 程序类, 控制整个程序的运行C原创 2013-10-12 08:46:47 · 1338 阅读 · 0 评论 -
[设计模式笔记]三. 行为型模式--15.Chain Of Responsibility(职责链模式)(一)
行为型模式--Chain Of Responsibility(职责链) 对象行为型模式一. 意图 使多个对象都有机会处理请求, 从而避免请求的发送者和接收者之间的耦合关系. 将这些对象连成一条链, 并沿着这条链传递该请求, 直到有一个对象处理它为止.二. 适用性在以下条件下使用Responsibility 链:2.1 有多个的对象可以处原创 2013-10-12 08:40:47 · 1785 阅读 · 0 评论 -
[设计模式笔记]二. 结构型模式总结
Adapter与Bridge结构型模式之间有很多相似之处(例如: 在很多结构型模式中, 都有一个相似性, 就是都是包含了一个对象的引用或者实体, 用户不直接调用对象, 而是过这些模式中的对应类间接调用对象, 通过这样的间接调用, 在调用对象的方法前后可以做一些事情.(当然, 不做也可以) 虽然他们的目的是不一样的.), 尤其是它们的参与者和协作之间的相似性. 这可能是因为结构型模式依赖于同一个原创 2013-09-17 18:00:38 · 1378 阅读 · 0 评论 -
[设计模式笔记]二. 结构型模式--13.Proxy模式(代理模式)(一)
结构型模式--Proxy模式(代理)一. 意图为其他对象提供一种代理以控制对这个对象的访问.二. 适用性在需要用比较通用和复杂的对象指针代替简单的指针的时候, 使用Proxy模式. 下面是一些可以使用P r o x y模式常见情况:1. 远程代理(Remote Proxy)为一个对象在不同的地址空间提供局部代表.2. 虚代理(Virtual原创 2013-09-17 17:55:10 · 1602 阅读 · 0 评论 -
[设计模式笔记]二. 结构型模式--12.Flyweight模式(享元模式)(二)
场景文档编辑器(该编辑器只能编辑24个字母和空格, 可以修改字体大小, 颜色)(位置可以动态计算).角色CharacterFactory 负责管理24个字符和空格CharacterFlyweight对象. 里面需要有一个Flyweight列表, 列表存储对象指针.Flyweight 定义了接口 Draw(Contex* pContex)Character原创 2013-09-17 17:52:03 · 1571 阅读 · 0 评论 -
[设计模式笔记]二. 结构型模式--12.Flyweight模式(享元模式)(一)
结构型模式--Flyweight模式(享元)一. 意图运用共享技术有效地支持大量细粒度的对象.二. 适用性Flyweight模式的有效性很大程度上取决于如何使用它以及在何处使用它. 当以下情况都成立时使用Flyweight模式:1. 一个应用程序使用了大量的对象。2. 完全由于使用大量的对象,造成很大的存储开销。3. 对象的大多数状态原创 2013-09-17 17:48:03 · 1556 阅读 · 0 评论 -
[设计模式笔记]二. 结构型模式--11.Facade模式(外观模式)(一)
结构型模式--FACADE模式(外观)一. 意图为子系统中的一组接口提供一个一致的界面, Facade模式定义了一个高层接口, 这个接口使得这一子系统更加容易使用.二. 适用性1. 当你要为一个复杂子系统提供一个简单接口时. Facade可以提供一个简单的缺省视图, 这一视图对大多数用户来说已经足够, 而那些需要更多的可定制性的用户可以越过fac原创 2013-09-17 17:41:50 · 1365 阅读 · 0 评论 -
[设计模式笔记]二. 结构型模式--10.Decorator模式(装饰模式)(一)
Decorator(装饰)模式(对象结构型模式)一. 意图动态地给一个对象添加一些额外的职责. 就增加功能来说, Decorator模式相比生成子类更为灵活.二. 适用性1. 在不影响其他对象的情况下, 以动态, 透明的方式给单个对象添加职责.2. 处理那些可以撤消的职责.3. 当不能采用生成子类的方法进行扩充时. 一种情况是, 可能有大量独立的原创 2013-09-17 13:48:13 · 1467 阅读 · 0 评论 -
[设计模式笔记]二. 结构型模式--9.Composite模式(组合)(一)
Composite(组合)模式(对象结构型模式)一. 意图将对象组合成树形结构以表示"部分-整体"的层次结构. Composite使得用户对单个对象和组合对象的使用具有一致性.二. 适用性1. 你想表示对象的部分-整体层次结构.2. 你希望用户忽略组合对象与单个对象的不同, 用户将统一地使用组合结构中的所有对象.三. 模式结构原创 2013-09-17 13:41:30 · 1569 阅读 · 0 评论 -
[设计模式笔记]二. 结构型模式--8.Bridge模式(桥模式)(二)
场景写日志功能日志功能可能运行在不同操作系统上(Linux系统, Windows系统, Android系统, ios系统等), 日志有不同的格式(XML格式, TXT格式, SelfDefine格式)这里明显有两个维度(操作系统和日志格式).无论什么格式的日志, 在写入时, 需要调用不同系统的文件操作API.所以日志格式在抽象维度, 操作系统在实现维度.原创 2013-09-12 21:58:11 · 1587 阅读 · 0 评论 -
[设计模式笔记]二. 结构型模式--8.Bridge模式(桥模式)(一)
结构型模式 Bridge模式(桥模式)一. 意图将抽象部分与它的实现部分分离,使它们都可以独立地变化二. 适用性2.1. 你不希望在抽象和它的实现部分之间有一个固定的绑定关系. 例如这种情况可能是因为, 在程序运行时刻实现部分应可以被选择或者切换.2.2. 类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。这时Bridge模式使你可以原创 2013-09-12 21:52:25 · 1466 阅读 · 0 评论 -
[设计模式笔记]二. 结构型模式--7.Adapter模式(适配器模式)(二)
场景有某设备需要这样的功能: 开灯/关灯, 开风扇/关风扇. 像这种开关动作, 一般使用I/O卡控制. 假设I/O卡有很多种型号.这里可以使用Simaple Factory模式角色IO卡创建工厂1个(CIODeviceFactory)(提供静态方法CreateIODevice(nIODeviceType)来创建具体类)抽象IO卡类1个(CIODevi原创 2013-09-12 21:44:13 · 1649 阅读 · 0 评论 -
[设计模式笔记]二. 结构型模式--7.Adapter模式(适配器模式)(一)
结构型模式 Adapter模式(适配器模式)一. 意图将一个类的接口转换成客户希望的另外一个接口. Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作二. 适用性2.1 你想使用一个已经存在的类,而它的接口不符合你的需求。.2.2 你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼原创 2013-09-12 21:39:56 · 1660 阅读 · 0 评论 -
[设计模式笔记]一. 创建型模式--6.Singleton模式(单体模式)(一)
创建型模式 Singleton模式(单体模式)一. 意图保证一个类仅有一个实例, 并提供一个访问它的全局访问点.二. 适用性1. 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时.2. 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时.三. 模式结构图1原创 2013-09-12 21:30:27 · 1262 阅读 · 0 评论 -
[设计模式笔记]一. 创建型模式--5.Prototype模式(原型)(二)
场景假设飞机由自我复制的能力. 生产飞机时, 先生成一部原型机, 因为生产原型机需要对原型机的各种参数进行调试, 调试出飞机的最好的参数. 这些参数确定后, 就可以进行批量生产, 批量生产就相当于飞机的Clone了. 如果生产每一台飞机都像生产原型机那样, 那效率是很低下的.角色Client 使用者负责飞机部件的生产流程, 调用CPlanBuilder提供的原创 2013-09-12 21:24:24 · 1259 阅读 · 0 评论 -
[设计模式笔记]一. 创建型模式--5.Prototype模式(原型)(一)
创建型模式--Prototype模式(原型)一. 意图用原型实例指定创建对象的种类, 并且通过拷贝这些原型创建新的对象.二. 适用性2.1 当要实例化的类是在运行时刻指定时;2.2 为了避免创建一个与产品类层次平行的工厂类时;2.3 当一个类的实例只能有几个不同状态组合中的一种时;2.4 当建立相应数目的原型并克隆它们可能比每次用合适的状原创 2013-09-12 21:19:22 · 1427 阅读 · 0 评论 -
[设计模式笔记]一. 创建型模式--4.Builder模式(二)
场景:假设直升飞机由机头, 机身, 机尾, 螺旋桨, 垂直起降系统组成. 战斗机由机头, 机身, 机尾, 喷气系统组成. 两种飞机的生产过程都是生产机头, 机身, 机尾, 螺旋桨/喷气系统, 垂直起降系统, 然后组装, (也就是说两种飞机的组成有一点区别, 但是生产步骤, 流程极为相似).这个场景就符合Builder模式(使用相同的生产流程, 生产不同的飞机).原创 2013-08-14 20:51:47 · 1190 阅读 · 0 评论 -
[设计模式笔记]一. 创建型模式--4.Builder模式(一)
Builder模式一. 意图将一个复杂对象的构建于它的表示分离, 使得同样的构建过程可以创建不同表示.二. 适用性2.1 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时;2.2 当构造过程必须允许被构造的对象有不同的表示时;三. 模式结构图1四. 角色说明Direct原创 2013-08-14 20:47:36 · 1198 阅读 · 0 评论 -
[设计模式笔记]一. 创建型模式--3.Abstract Factory模式(二)
创建型模式--Abstract Factory模式(二)场景:假设直升飞机和战斗机都由机头, 机身, 机尾组成. 直升飞机由直升飞机厂生产, 战斗机有战斗机厂生产.两种飞机的生产过程都是生产机头, 机身, 机尾, 然后组装(也就是说两种飞机的生成流程是一样的).(机头, 机身, 机尾的生产顺序没有严格规定, 当然有严格规定也行).(两种飞机的组成一样才使原创 2013-08-09 11:23:05 · 1186 阅读 · 0 评论 -
[设计模式笔记]一. 创建型模式--3.Abstract Factory模式(一)
创建型模式--3.Abstract Factory模式(一)Abstract Factory(抽象工厂)模式, 又称工具箱(Kit 或Toolkit)模式.(对象创建型模式)一. 意图提供一个创建一系列或相互依赖对象的接口, 而不需要指定它们具体的类.二. 适用性2.1 一个系统要独立于它的产品的创建, 组合和表示时;2.原创 2013-08-09 11:14:49 · 1093 阅读 · 0 评论 -
[设计模式笔记]一. 创建型模式--2.Factory Method模式(二)
场景:直升飞机由直升飞机厂生产, 战斗机有战斗机厂生产. 用户需要什么飞机, 直接找到对应的飞机工厂生产即可.这个场景就可以使用Factory Method模式.角色:抽象飞机工厂1个(CPlaneFactory)具体飞机工厂2个(CHelicopterFactory和CBattlePlaneFactory)抽象飞机1个(CPlane)具原创 2013-08-09 11:02:36 · 1304 阅读 · 0 评论 -
[设计模式笔记]一. 创建型模式--2.Factory Method模式(一)
一. 创建型模式--2.Factory Method模式(一)Factory Method(工厂方法)模式一. 意图定义一个用于创建对象的接口, 让子类决定实例化哪一个类. Factory Method使一个类的实例化延迟到其子类.二. 适用性2.1 当一个类不知道它所必须创建的对象的类的时候;2.2 当一个类希望由它的 子类来指原创 2013-08-09 10:55:40 · 1187 阅读 · 0 评论 -
[设计模式笔记]一. 创建型模式-- 1.Simple Factory模式(二)
创建型模式-- 1.Simple Factory模式(二)场景:有某设备需要这样的功能: 开灯/关灯, 开风扇/关风扇. 像这种开关动作, 一般使用I/O卡控制. 假设I/O卡有很多种型号.这里可以使用Simaple Factory模式角色:IO卡创建工厂1个(CIODeviceFactory)(提供静态方法CreateIODevice(nIODevic原创 2013-07-26 14:28:51 · 1305 阅读 · 0 评论