登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

秒大刀 博客

好好学习 天天向上

 
 
 

日志

 
 
 
 

重读“设计模式”  

2009-04-20 21:39:02|  分类: 读书 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

创建型模式

简单工厂模式 Simple Factory

    根据参数返回具有同样方法的对象,这些对象可以派生自相同的基类也可以没有任何关系。但这些对象的方法接口必须是兼容的,这才能替换使用

工厂方法模式 Factory Method

    由给定的参数决定具体要实例化哪个类,一般都是对string进行switch判别。C#中可以采用反射来改写。

抽象工厂模式 Abstract Factory

    连工厂和对应的产品线都可以整套换的,可以认为是Factory Method的组合。

单件模式 Singleton

    这个比较简单,用的也是很多的。一般有一个静态对象持有者来保持全局唯一对象。

生成器模式 Builder

    将复杂对象的创建过程和它的表示分离。这样就可以采用相同的创建过程创建不同的对象了。

原型模式 Prototype

    实现Clone接口,这样对象就可以拷贝了,很简单那。

结构型模式

适配器模式 Adapter

    一般用于实现新老系统时间的兼容性适配。一般都是继承自老命令承载者,聚合新命令承载者,然后重写接口实现,将命令转发给新的命令承载者。

桥接模式 Bridge

    将类的接口抽象出来,把实现独立,这样可以实现运行时的对象替换。Strategy策略模式可以实现具体方法的替换,State可以实现字段的动态替换,Template Method可以实现方法片段的动态替换。

组合模式 Composite

    最经典的就是目录结构。一个抽象的Node,一个继承自Node的非叶节点、一个继承自Node的叶节点。

装饰模式 Decorator

    在组合模式的基础上,实现了行为的动态组合

外观模式 Façade

    把复杂系统重新封装一个统一的接口,这样外部调用时就不用关心系统很多个类的接口了,而只要关系这一个Facade接口

享元模式 Flyweight

    其实就是弱引用或者说是字符串池的实现。把昂贵的对象共享起来。

代理模式 Proxy

    通过代理来屏蔽底层具体的应用。经典的有远程代理,弱引用或者其他要求简单的实现对象访问而不想关心底层详细实现的情景。 

行为型模式

职责链模式 Chain of Responsibility

    把事件发往一个处理链,依次进行处理加工。经典的有win消息的处理流程。

命令模式 Command

    将所有的操作抽象为统一的命令对象。这样可以轻松实现Undo和Redo的效果。也可以将Command对象保存起来,这样软件的行为就可以重放了。

解释器模式 Interpreter

    实现结构上和Composite模式很像

迭代器模式 Iterator

    这个东西很多语言都有支持,可以屏蔽底层具体的实现。比如iterator在C++的非线性容器中可以屏蔽具体的数据结构,C#中的foreach也是通过iterator模式实现的

中介者模式 Mediator

备忘录模式 Memento

    把对象的数据拿出来存到另外一个对象中,然后在适当的时候执行序列化和反序列化以实现对象的恢复。和State有点像,不过State的目的在于动态替换数据,而Momento在于对象的状态记忆。

观察者模式 Observer

    设计上有支持多播的能力。

状态模式 State

    把对象内部的不同状态封装成不同的类,这样就可以实现对象内部的字段动态改变的能力,这些封装成为State,这些State可以在运行时被动态的替换。

策略模式 Strategy

    这个东西通常在不同算法的替换上用的比较多。State模式实现了对象字段的动态替换,Stratery实现了对象方法的动态替换。

模板方法模式 Template Method

    实现对象动态行为改变的另外一种设计模式。和Strategy模式有点像,不过TemplateMethod更注重的是把行为片段延迟到子类中实现,而行为的框架在基类中写死了。Strategy就压根是完全依赖与子类了。

访问者模式 Visitor

 

  评论这张
 
阅读(1178)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018