随笔分类 -  Design Patterns

摘要:存在着一个极为重要的特质,它是人、城市、建筑或荒野的生命与精神的根本准则。这种特质客观明确,但却无法命名。 这是一个略带惆怅的特质。 把作者和译者都拖出去打30大板吧,而且要翻过来打的那种。 阅读全文
posted @ 2009-07-11 00:50 包建强 阅读(2563) 评论(29) 推荐(0) 编辑
摘要:哪天,如果你发现自己的同事目光呆滞了,十有八九是受了此文的毒害。切记切记,在人工呼吸的时候,一定要默念“道,可道,非常道,永恒之道,无名特质之道……” 阅读全文
posted @ 2009-07-10 23:45 包建强 阅读(3058) 评论(18) 推荐(0) 编辑
摘要:一.大师尚在人间二.中文版的是是非非三.程序员的内功心法四.各章读书笔记及译文修正五.术语解读质(quality)门(gate)道(way)六.绝妙好辞赏析七.最后,上升到哲学附录:相关评论汇总 阅读全文
posted @ 2009-07-03 14:15 包建强 阅读(931) 评论(0) 推荐(0) 编辑
摘要:http://book.csdn.net/bookfiles/103/1001038134.shtml 设计模式源自建筑学和人类学 http://blog.csdn.net/sanlongcai/archive/2008/01/02/2010677.aspx 谈谈《建筑的永恒之道》中的内容安排和整体思路 http://blog.run2me.com/johnxu/archive/2008/... 阅读全文
posted @ 2009-07-02 13:59 包建强 阅读(1032) 评论(0) 推荐(0) 编辑
摘要:本系列《被遗忘的设计模式》是《我也设计模式》的续篇,准备向大家介绍20个在GOF23模式之外的散见于其他地方的另类模式。有感于大家都全力去研究GOF,而忽视了其中的变通,局限了自己的思路,其实,模式这东西,是很玄和奇妙的。 阅读全文
posted @ 2008-06-30 14:07 包建强 阅读(4906) 评论(18) 推荐(0) 编辑
摘要:最近收集到很多资料,关于一些不在GOF中的设计模式,于是有了一种要把这些share出来的想法,列表如下: 1.不变模式 2.过滤器 3.只读接口 4.动态链接 5.缓存管理 6.小语言 7.空对象 8.哈希适配器对象 9.单线程执行 10.静态锁定顺序 11.锁对象 12.受保护的挂起 13.阻行 14.调度器 15.读/锁写模式 16.生产者-消费者 17.双缓冲 18.异步处理 19.Futu... 阅读全文
posted @ 2008-03-21 14:37 包建强 阅读(826) 评论(2) 推荐(0) 编辑
摘要:当不再使用for循环,替代以foreach/GetEnumerator, 当从if条件/switch分支得到的不再是string,而是一个工厂对象, ————以上种种情形,标志着编程功力的提高。 使用迭代器,是为了访问一个集合而无需暴露它的内部表示。这里,内部表示指的是数据结构可以是树/数组/链表等等,不同的内部结构对应不同的遍历算法... 阅读全文
posted @ 2007-10-25 16:37 包建强 阅读(544) 评论(1) 推荐(0) 编辑
摘要:中介者的神奇在于我们天天在使用却丝毫感觉不到:WindowsForm和WebForm 如果说Observer是一种1对多的模式,那么中介者就是一种多对多的模式,是Observer更普遍的方式。 现实中最好的事例就是房屋中介所:某人想买房子,这期间要办理一大堆手续,会把买卖双方都搞死的,尤其是买方。于是中介机构出现了,买方只面对中介,中介会为其办理所有手续。当买方的人越来越多时,中介的作用... 阅读全文
posted @ 2007-10-25 15:50 包建强 阅读(844) 评论(1) 推荐(0) 编辑
摘要:一提到这个模式就会想到“击鼓传花”这个游戏。 这个模式的核心主要是Handler抽象类,几个设计要点: 1.它要保持对自身的一个引用,就是next字段以及相应属性 2.DoHandler()方法是一个递归遍历,直到处理完这个请求 传入的参数字符串s是等待处理的请求,当然,这个参数可以是任意类 3.HandlerRequest()方法要抽象出来, 传入的参数要与DoHandler... 阅读全文
posted @ 2007-10-24 18:28 包建强 阅读(752) 评论(1) 推荐(0) 编辑
摘要:桥模式,将意图intension与实现implementor分离。其中,意图通常用接口来定义,而实现相应为Factory,返回具体的意图Implemention1。 public interface Intention { void Echo(string message); } public class Implemention1 : Int... 阅读全文
posted @ 2007-10-24 12:14 包建强 阅读(1354) 评论(1) 推荐(0) 编辑
摘要:GOF的定义:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 这个模式很少用到,我看过一个机器人指令的实现,使用了该模式。 两个子类的实现,TernimalExpression类是具体做事情的类;NonternimalExpression类是一个容器,它的interpret方法,负责遍历其内部的所有TernimalExpression对象: ... 阅读全文
posted @ 2007-10-23 22:41 包建强 阅读(1001) 评论(1) 推荐(0) 编辑
摘要:模板方法很简单,只要有抽象类的地方,都可以看到这个模式:就是在父类中的非抽象方法中调用抽象方法。 基于委托的模板方法:从而具体实现方法可以不依赖于抽象类,达到解耦的目的 几点注意: 1.delegate声明在模板类中 2.在类DoCompA和DoCompB中定义与委托相同的方法 3.在Main()中组装委托链,调用tm.DoComp()意味着这是一个模板方法(非抽象中... 阅读全文
posted @ 2007-10-04 11:43 包建强 阅读(449) 评论(0) 推荐(0) 编辑
摘要:这个模式是对模板方法的简单包装,可以看到,只是多了一个Context类这个包装器。 以上UML图的代码很好实现,关键是Client如何使用Context类: Strategy s = new ConcreteStrategyA(); Context context = new Context(); context.St... 阅读全文
posted @ 2007-10-04 11:42 包建强 阅读(537) 评论(0) 推荐(0) 编辑
摘要:Observer模式的迷人处在于它实现了.NET事件机制,这使得它在OO设计中大放光彩。 定义:观察者模式定义了一种一对多的依赖关系,让多个观察者Observer对象同时监听某一个主题对象Subject。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。 逐个分析: 1.Subject是一个集合类,负责将所有的Observer注册到弱集合arr中,这个由Attach... 阅读全文
posted @ 2007-10-04 11:41 包建强 阅读(537) 评论(0) 推荐(0) 编辑
摘要:状态模式是把各种状态封装成不同的类。 关于Context类的实现,不太同于Strategy,虽然原理是一样的: public class Context { private State stateA, stateB, state; public Context() { stateA = new State... 阅读全文
posted @ 2007-10-04 11:41 包建强 阅读(386) 评论(0) 推荐(0) 编辑
摘要:Facade简化并提供了对基础架构的统一访问,从而减少复杂性。它只是封装,可以看成黑盒。 在Web编程中,有所谓的n-层架构,就是Facade的思想,即每一层都封装好一部分功能,提供给上一层统一的方法调用,比如说数据层,将操作一次数据库的整个过程封装为一个方法,而我们在逻辑层调用该方法时,只需要传递一个SQL参数: Code highlighting produced by Actipro C... 阅读全文
posted @ 2007-10-03 16:46 包建强 阅读(657) 评论(0) 推荐(0) 编辑
摘要:这个模式用途很多,先看它的UML: abstract public class Subject { abstract public void Request(); } public class RealSubject : Subject { public override void Request() {... 阅读全文
posted @ 2007-10-03 16:44 包建强 阅读(867) 评论(0) 推荐(0) 编辑
摘要:关于组合模式,我本来写了很多,可是当看到吕振宇老哥的文章后,我觉得他那篇讲组合模式的文章是最好的,所以,删去了我原先的文章,这里部分引用他的。在结尾加一些我自己的理解。 合成模式有时又叫做部分-整体模式(Part-Whole)。合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式可以使客户端将单纯元素与复合元素同等看待。 对象的树结构 一个树结构由两种节点组成:树枝节点和树叶... 阅读全文
posted @ 2007-10-03 16:44 包建强 阅读(611) 评论(0) 推荐(0) 编辑
摘要:简单又实用的模式,引用+包装 有两种适配器, 1.类适配器 只要有接口,就可以使用:继承一个类,实现另一个接口,在接口中包装继承的方法,对外表现为接口方法 2.对象适配器 对于两个类,继承一个类A,引用另一个类B(在ctor中讲B的对象传递过去) 对A中的方法重写new/override,在方法中包装B的方法 对于一个接口一个类,... 阅读全文
posted @ 2007-10-03 00:12 包建强 阅读(689) 评论(0) 推荐(0) 编辑
摘要:代码实现如下,注意几点: 1.Decorator中的Operation()方法是对被修饰对象ConcreteComponent中方法Operation()的封装 2.ConcreteDecorator中的Operation()方法是对其父类Operation()方法的封装,同时加入一些额外的新方法 3.ConcreteDecorator中的构造函数负责将修饰与被修饰对象链接在一起,如下图: ... 阅读全文
posted @ 2007-10-02 21:21 包建强 阅读(666) 评论(0) 推荐(0) 编辑