摘要: 一、职责链(Chain of Responsibility)模式责任链模式是一种对象的行为模式【GOF95】。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织链和分配责任。从击鼓传花谈起击鼓传花是一种热闹而又紧张的饮酒游戏。在酒宴上宾客依次坐定位置,由一人击鼓,击鼓的地方与传花的地方是分开的,以示公正。开始击鼓时,花束就开始依次传递,鼓声一落,如果花束在某人手中,则该人就得饮酒。击鼓传花便是责任链模式的应 阅读全文
posted @ 2011-11-29 15:18 Flying Dreams 阅读(151) 评论(0) 推荐(0) 编辑
摘要: Proxy代理模式是一种结构型设计模式,主要解决的问题是:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。如下图: 比如说C和A不在一个服务器上,A要频繁的调用C,我们可以在A上做一个代理类Proxy,把访问C的工作交给Proxy,这样对于A来说,就好像在直接访问C的对象。在对A的开发中我们可以把注意力完全放在业务的实现上。 GoF《设计模式》中说道:为其他对象提供一种代理以控 阅读全文
posted @ 2011-11-29 14:49 Flying Dreams 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 发布于2011-06-29前言 此文译自CodeProject上<How I explained OOD to my wife>一文,该文章在Top Articles上排名第3,读了之后觉得非常好,就翻译出来,供不想读英文的同学参考学习。作者(Shubho)的妻子(Farhana)打算重新做一名软件工程师(她本来是,后来因为他们孩子出生放弃了),于是作者就试图根据自己在软件开发设计方面的经验帮助她学习面向对象设计(OOD)。自作者从事软件开发开始,作者常常注意到不管技术问题看起来多复杂,如果从现实生活的角度解释并以对答的方式讨论,那么它将变得更简单。现在他们把在OOD方面有些富有成 阅读全文
posted @ 2011-11-29 14:22 Flying Dreams 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 2010-09-20 作者:云飞龙行 来源:云飞龙行的blog来写一个大家既陌生又熟悉的设计模式,也是非常实用的一个设计模式,那就是桥接模式。说陌生是很多朋友并不熟悉这个设计模式,说熟悉是很多人经常见到或者是下意识的用到这个设计模式,只是不知道罢了。桥接模式是非常实用的一个模式,下面就来写写它。 桥接模式(Bridge)1 场景问题1.1 发送提示消息考虑这样一个实际的业务功能:发送提示消息。基本上所有带业务流程处理的系统都会有这样的功能,比如某人有新的工作了,需要发送一条消息提示他。从业务上看,消息又分成普通消息、加急消息和特急消息多种,不同的消息类型,业务功能处理是不一样的,比如加急消息是 阅读全文
posted @ 2011-11-29 14:19 Flying Dreams 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 2010-09-20 作者:云飞龙行 来源:云飞龙行的blog来写一个大家既陌生又熟悉的设计模式,也是非常实用的一个设计模式,那就是桥接模式。说陌生是很多朋友并不熟悉这个设计模式,说熟悉是很多人经常见到或者是下意识的用到这个设计模式,只是不知道罢了。桥接模式是非常实用的一个模式,下面就来写写它。 桥接模式(Bridge)1 场景问题1.1 发送提示消息考虑这样一个实际的业务功能:发送提示消息。基本上所有带业务流程处理的系统都会有这样的功能,比如某人有新的工作了,需要发送一条消息提示他。从业务上看,消息又分成普通消息、加急消息和特急消息多种,不同的消息类型,业务功能处理是不一样的,比如加急消息是 阅读全文
posted @ 2011-11-28 16:50 Flying Dreams 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 学习设计模式也有一段时间了,今天就把我整理的一篇课程和大家分享,有不妥之处欢迎指出.生活中的一个例子: 就拿汽车在路上行驶的来说。即有小汽车又有公共汽车,它们都不但能在市区中的公路上行驶,也能在高速公路上行驶。这你会发现,对于交通工具(汽车)有不同的类型,然而它们所行驶的环境(路)也在变化,在软件系统中就要适应两个方面的变化?怎样实现才能应对这种变化呢?概述:在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式。意图: 将抽象部.. 阅读全文
posted @ 2011-11-28 16:43 Flying Dreams 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 一. 从树谈起 基本上所有人都知道树这个概念。稍微深究.NET本质的人会懂得,.NET有个对象树。学习ASP.NET的人肯定会知道,Web上有个控件树。哪怕是只学习过数据结构应付考试的大学生也会知道Tree这个概念。二. 把需求扩展成树 举个我们最常用的Photoshop做例子。在Photoshop中,有许多图形工具,比如星星,比如方形,再比如圆形等等。在Photoshop中,不用多说,也有很多种颜色供我们选择。于是就产生了,红色的星星,绿色的星星。红色的方形,绿色的方形等等。看看所产生的树:现在是三种图形,三种颜色,于是我们就一共去声明了九个类,当然我们还不算中间过程中的辅助父类。如果我们现 阅读全文
posted @ 2011-11-28 16:31 Flying Dreams 阅读(333) 评论(0) 推荐(0) 编辑
摘要: 本文为大家介绍软件设计中的一些原则,都是经过长期经验总结出来的知识,每一个程序员都应该了解,相信对大家在进行软件设计的过程中会有很大帮助。 Don’t Repeat Yourself (DRY) DRY 是一个最简单的法则,也是最容易被理解的。但它也可能是最难被应用的(因为要做到这样,我们需要在泛型设计上做相当的努力,这并不是一件容易的事)。它意味着,当我们在两个或多个地方的时候发现一些相似的代码的时候,我们需要把他们的共性抽象出来形一个唯一的新方法,并且改变现有的地方的代码让他们以一些合适的参数调用这个新的方法。 参考:http://en.wikipedia.org/wiki/KISS_pr 阅读全文
posted @ 2011-11-28 15:54 Flying Dreams 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 1、定义:原型模式就是通过一个原型对象来表明要创建的对象类型,然后用复制这个对象的方法来创建更痛类型的对象。2、原理:有两部分组成,抽象原型和具体原型。3、使用时机:系统需要 创建吃的对象是动态加载的,而且产品具有一定层次时,可以考虑使用原型模式。1>当要实例化的类是在运行时刻指定时,例如,通过动态装载;2>或者为了避免创建一个与产品类层次平行的工厂类层次时;3>或者当一个类的实例只能有几个不同状态组合中的一种时。4>建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。4、效果:1>可以再运行时刻增加和删除产品。2>可以通过改变值来指 阅读全文
posted @ 2011-11-28 15:50 Flying Dreams 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 有的时候,我们需要一个实例时,并且,当创建一个实例的过程比较复杂或者说是昂贵时,比如,创建实例的构造函数非常的复杂,在执行这个构造函数时会消耗较长的时间,同时呢,这个构造函数中的一些信息又没有什么变化(也就是说创建第一个实例时初始化信息是这样的,创建第二个实例时初始化信息还是还是这样的),那么直接使用 new 来创建这样一个实例就显得太昂贵了,最好的解决方法,并不是使用 new 来实例化一个对象,而是使用克隆,也就是复制,克隆呢,就是通过复制现在已经有了的实例来创建新的实例,这样有什么好处呢?很明显,这样实现呢,客户端根本就不知道具体要实例化的是哪一个类,它只知道是复制了,但具体的实例化情况, 阅读全文
posted @ 2011-11-28 15:49 Flying Dreams 阅读(174) 评论(0) 推荐(0) 编辑