代码改变世界

随笔分类 -  设计模式初学者系列

【读书笔记】设计模式沉思录

2010-06-02 23:49 by 横刀天笑, 3642 阅读, 收藏, 编辑
摘要: 这本书的内容主要来自John Vlissides(Gof之一)为C++ Report写的一些小文,然后经过整理调整组织成本书。可惜的是John英年早逝(于2005年11月24日因脑瘤病故,享年44岁),不然我想留下的佳作也许更多。 阅读全文

在asp.net中实现观察者模式,或有更好的方法(续)

2008-05-06 02:00 by 横刀天笑, 2918 阅读, 收藏, 编辑
摘要: 这是一个Web Application,有很多客户端向服务器端提交数据(客户端是C++的,以http-post方式向服务器端提交二进制数据,服务器端解析这个二进制包,数据提交很频繁),管理员可以进入监视页面浏览这些数据,数据要即时的,客户端发来一条,管理员屏幕上要马上可以看到,允许多个管理员同时监视即时数据,所有管理员看到的数据都是一样的(目前是这样的,也许以后对管理员要分角色,各角色管理员看到的信息将不同)。 由于数据提交非常频繁,客户要求不允许频繁的数据库操作,所以我将数据保存在一个IList的缓存里面,当这个IList的大小超过了我在配置文件里定义的大小的时候就将数据批量插入到数据库。 阅读全文

在asp.net中实现观察者模式,或有更好的办法?

2008-05-02 14:30 by 横刀天笑, 3156 阅读, 收藏, 编辑
摘要: 继上次设计模式初学者系列后好长时间没有更新了,好不容易休息几天,如是搬来一块砖,放在首页,希望能够引来一些玉。 设计模式理论上是不管部署环境的,我觉得她是一个代码设计层面上的东西,但是在WinForm里实现的很好的模式,移植到Web环境往往有各种各样的局限性, 今天我们要讨论的就是在asp.net中如何去实现一个观察者模式。 阅读全文

设计模式初学者系列之代理模式

2008-02-18 15:48 by 横刀天笑, 3407 阅读, 收藏, 编辑
摘要: 看到代理(Proxy),首先映入大脑中的肯定是网络上为数众多的代理服务器。我们的客户机由于各种原因,不能直接连接到真正的服务器、直接访问速度慢,有的应用中甚至在代理服务器上作权限的访问控制。大部分代理服务器都有一个缓存功能,当客户机访问某内容的时候,代理服务器首先查找本地缓存里是否有这个内容,如果有则直接将其返回,否则代理服务器将向真正的服务器发送请求,将真正的服务器的响应内容发送给客户端而且将这个内容也在本地缓存中保留一份,以备后用。 其实今天我们要谈的代理模式也是和这个类似。 阅读全文

设计模式初学者系列之状态模式

2008-01-18 09:23 by 横刀天笑, 5765 阅读, 收藏, 编辑
摘要: 在我们的开发中会经常碰到这样的情况:根据对象的状态执行相应的操作,比如数据库连接的状态 打开,还是关闭?TCP连接的状态(Gof DP),设备运行的状态,等等。一般我们会怎么做?首先向对象询问当前状态,然后根据状态做出相应的操作。OK,按照这个思路我们就来完成下面这个项目吧。 阅读全文

设计模式初学者系列-策略模式 -------为什么总是继承

2008-01-14 14:38 by 横刀天笑, 3854 阅读, 收藏, 编辑
摘要: 由于出差,又接近年关,最近一段时间一直没有更新这个设计模式初学者系列,一定要坚持下去,坚持就是胜利。 策略模式有三种参与者: 一、 Context 这个类保存了对策略的引用,并且调用实际的策略实现,有可能还提供一个接口,让策略可以访问它内部的数据,在这里就是我们的“高校”类。 二、 Strategy 策略接口,给算法族定义一个通用的接口,让客户以一种一致的方法去访问。(I教务处报到,I缴费) 三、 ConcreteStrategy 这就是具体的策略实现了,实现策略接口(各报到步骤的实现)。 阅读全文

设计模式初学者系列-观察者模式

2007-11-01 15:37 by 横刀天笑, 4732 阅读, 收藏, 编辑
摘要: 观察者模式定义了对象之间一对多的依赖,当这个对象的状态发生改变的时候,多个对象会接受到通知,有机会做出反馈。在运行的时刻可以动态的添加和删除观察者。 在今天的设计模式系列中我给大家带来了观察者模式,首先我会以一个生动的故事引入观察者模式的应用的场景,然后描述这个场景中出现的问题,最后我们提出观察者模式的解决方案,并给出C#语言实现的代码,最后以.net里的委托-事件方式的观察者模式作为结尾。 阅读全文

设计模式初学者系列-工厂方法

2007-10-12 10:39 by 横刀天笑, 3747 阅读, 收藏, 编辑
摘要: 闲谈工厂方法 设计模式系列到了第四篇了,如果还不谈谈工厂方法设计模式就太对不起GoF了,为什么有如此一说?实际上工厂方法模式是好些模式的基石,她们或多或少的使用了工厂方法模式或以工厂方法为模型。 工厂方法模式是一种类创建型模式,她为创建一个对象提供了一个稳定的接口,而将对象创建的真正工作推迟到其子类实现,工厂方法允许将类的初始化工作延迟到子类,让子类决定实例化哪个具体的类。实际上很多时候对象的创建工作往往会发生变化,直接的去用new实例化对象会导致紧耦合,当需求发生变化的时候依赖项也会跟着发生变化。按照我们解决这类问题的一般原则:首先寻找变化点――对象创建,然后封装变化――用子类来封装,父类给客户程序提供稳定的接口,不稳定的地方给封装了,客户可见的只有稳定的父类接口,这也是我们面向对象开发人员一直所追求的目标。 阅读全文

设计模式初学者系列-模板方法

2007-10-09 09:04 by 横刀天笑, 4735 阅读, 收藏, 编辑
摘要: 模板方法属于行为型设计模式,行为型设计模式主要关注对象之间职责分配和算法的问题。类行为型模式使用继承来分配类之间的职责,模板方法就是个类行为型模式。对象行为型模式使用组合来分配职责。在我们构建软件的过程中大部分时候我们都是在思考实体之间的职责,怎样的职责分配最合理,不至于过重,又不至于过轻,而且又不越权。 模板方法Gof的定义是:在一个方法里定义算法的骨架,将一些步骤延迟到其子类。模板方法使得子类有机会重新定义算法的某些步骤而不改变算法的结构。模板方法实际上是利用多态这种晚绑定机制来将一些执行系列延迟到子类(运行时)。如下图: 阅读全文

设计模式初学者系列-单件模式

2007-10-07 12:04 by 横刀天笑, 8264 阅读, 收藏, 编辑
摘要: 在一个系统中,往往有一些服务只需要它们在整个系统中存在一个实例,并且在系统的任何角落都可以访问它。这样,单件模式出现了。比如在上一篇抽象工厂模式中,在一个系统中往往只有一个工厂,这样我们可以引入单件模式来解决这个问题。 对于单件模式的定义是:只允许系统中有一个实例存在,并且为该实例提供一个全局的访问点 阅读全文

设计模式初学者系列-开篇以及抽象工厂模式

2007-10-06 10:35 by 横刀天笑, 6632 阅读, 收藏, 编辑
摘要: 抽象工厂模式的使用场景 今天要谈的抽象工厂模式属于对象创建型模式。 创建型模式抽象了对象实例化的过程,它帮助系统不依赖于对象如何创建,如何实现,何时创建。个类创建型模式使用继承使对象创建多样化,一个对象创建模式将对象的创建代理到其他类。 那抽象工厂模式是为了解决什么问题的呢?给了我们怎样的设计思路?在软件开发中我们经常会碰到一系列相关的对象需要创建,如果按照常规做法我们就要为不同的对象创建编写不同的代码,复用性和可维护性都降低了。而且这些相关对象创建的方式也许不同,那么客户代码创建的时候就要针对不同的对象编码,对象创建的方式还是一个容易改变的地方。基于这样的情况提出了抽象工厂模式,抽象工厂模式为创建一系列相关对象提供了统一的接口,客户只要调用这个接口即可,封装了变化,隔离了变化,让客户代码稳定起来。 阅读全文

设计模式初学者系列-引子

2007-10-06 10:34 by 横刀天笑, 5582 阅读, 收藏, 编辑
摘要: 园子里有很多经典的设计模式系列的文章,本也不需要我这多余的一个系列,不过也许不多我这多余的系列吧。 在工作学习之余做了一些设计模式的笔记,无奈都是我一个人看,一直也不敢拿出来献丑,但想了想,知识只有在争论中才会更进步,思想也只有在争论中冒出火花。 常常有感于在群里和大家讨论的时候,一个又一个知识火花冒出,所以今天厚着脸皮将我的一些笔记放出来,而且是冒死放在首页,呵呵,真的希望大家能对我的文章大卸... 阅读全文