软件工程
文章平均质量分 77
wangtaosuccess
这个作者很懒,什么都没留下…
展开
-
大卫的Design Patterns学习笔记05:Singleton
一、概述在很多情况下,我们的系统只允许某个类有一个或指定个数的实例,如一般的应用系统往往有且仅有一个log文件操作类实例,或者,整个系统仅有一个等待事务队列等(注意:Singleton不是用来解决整个应用程序仅有一个实例这样的问题的),在这些情况下可以考虑使用Singleton模式。Singleton(单件)模式用于保证一个类仅有一个实例,并提供一个访问该实例的全局访问点。(GoF: Ensure转载 2005-08-09 11:31:00 · 558 阅读 · 0 评论 -
大卫的Design Patterns学习笔记08:Composite
一、概述我们往往总是希望用一致的方式访问不同类型的对象,不论这个对象是同一类系中类型A的对象,还是类型B的对象,OO的多态性为我们提供了这种支持。Composite模式将这种观点更进一步,当一个复杂对象由多个同一类系中的对象组成的时候,我们仍然希望用与访问单个对象一致的方式来访问该复杂对象(这其实仍是多态性在发挥作用,但在这个多态方法的内部处理使得我们可以做到“用一致的方法访问”这一点,见示例)。转载 2005-08-10 22:09:00 · 530 阅读 · 0 评论 -
大卫的Design Patterns学习笔记02:Factory
一、概述Factory(工厂)模式用于封装对象的创建过程,将对象的创建独立成单独的程序模块,从而提高整个应用系统的Flexibility。二、结构主要有以下三种Factory模式:1、Simple Factory模式:专门定义一个类来负责创建其它类的实例,被创建的实例通常都具有共同的父类。 图1:Simple Factory的类图2、Factory Method模式:将对象的创建交由父类中定义的一转载 2005-08-09 11:24:00 · 580 阅读 · 0 评论 -
大卫的Design Patterns学习笔记12:Proxy
一、概述大家都用过代理服务器,代理服务器是从出发点到目的地之间的中间层。而Proxy模式中的Proxy功能上与此类似,是对象的访问者与对象之间的中间层。Proxy(代理)模式可用于解决在直接访问对象不方便或不符合要求时,为这个对象提供一种代理,以控制对该对象的访问。二、结构Proxy模式的类图结构如下图所示: 图1:Proxy模式类图示意在上面的类图中,Proxy类是Subject类的子类,但个人转载 2005-08-10 22:21:00 · 644 阅读 · 0 评论 -
大卫的Design Patterns学习笔记11:Decorator
一、概述继承是对类进行扩展,以提供更多特性的一种基本方法,但是有时候,简单的继承可能不能满足我们的需求。如我们的系统需要提供多种类型的产品:类型A、类型B、...同时,这些产品需要支持多种特性:特性a、特性b、...以下是两种可能的实现:1、继承,分别实现类型Aa、类型Ab、类型Ba、类型Bb、...这种实现方式在类型的数目和所支持特性的数目众多时会造成“类爆炸”,即会引入太多的类型,并且,这种实转载 2005-08-10 22:19:00 · 591 阅读 · 0 评论 -
大卫的Design Patterns学习笔记07:Bridge
一、概述Bridge(桥接)模式将抽象部分与它的实现部分分离,使它们都可以独立地变化。二、结构Bridge模式的结构如下: 图1:Bridge模式类图示意由于Bridge实现抽象-实现的特性,它与Builder模式存在一定的相似性,但二者的区别也是十分显著的,后者更专注于复杂对象的创建,可以认为是Bridge模式的在对象创建方面的一个应用。Bridge模式与Object Adapter模式及后面即转载 2005-08-09 11:39:00 · 575 阅读 · 0 评论 -
大卫的Design Patterns学习笔记14:Command
一、概述Command(命令)模式可用于将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,即允许用户指定对何种对象执行何种操作;或者,对请求排队或记录请求日志,以及支持可撤消的操作。二、结构Command模式的结构如下图所示: 图1、Command模式类图示意上图中包括如下角色:客户(Client)角色:创建了一个具体命令(ConcreteCommand)对象并确定其接收者。命令(转载 2005-08-10 22:26:00 · 695 阅读 · 0 评论 -
大卫的Design Patterns学习笔记06:Adapter
一、概述Adapter(适配器)模式又称Wrapper模式,主要用于将一个类的接口转换成客户希望的另外一个接口,解决两个已有接口之间不匹配的问题。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。因此,Adapter模式经常被描述成第三方函数库或旧的程序库与现有系统接口/需求不一致时的救星,也正是由于Adapter模式的这种特性,有人也将Adapter模式比喻成变压器,变转载 2005-08-09 11:32:00 · 622 阅读 · 0 评论 -
大卫的Design Patterns学习笔记04:Prototype
一、概述Prototype(原型)模式用于动态抽取当前对象运行时的状态,从自身构造出一个新的对象,即自身的拷贝(往往是深拷贝),如果你愿意,你可以叫它Clone模式。二、结构Prototype模式的结构如下图所示: 图1:Prototype模式三、应用Prototype模式在需要拷贝的产品的类型需动态指定时经常被用到。对于类似绘图软件这样的以对象管理为主要目的的应用系统中,各元素往往需要支持动态拷转载 2005-08-09 11:30:00 · 564 阅读 · 0 评论 -
大卫的Design Patterns学习笔记03:Builder
一、概述Builder(生成器)模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。跟Factory Pattern一样,Builder Pattern的目的也在于构建对象,并且与Abstract Factory相似,往往也包含多个Factory Method,但与Abstract Factory不同的是,Builder Pattern通过组装多个Part,最终构成一个独转载 2005-08-09 11:28:00 · 566 阅读 · 0 评论 -
大卫的Design Patterns学习笔记01:前言
一、概述A pattern is a proven solution to a recurring problem within a given context.Design Patterns(设计模式,以下简称DP),源自Christopher Alexander的《建筑的永恒之道》,这个原本与软件设计不相关的概念经GoF(Gang of Four,指经典书籍《设计模式》的四位作者)引入软件设计转载 2005-08-09 11:19:00 · 614 阅读 · 0 评论 -
大卫的Design Patterns学习笔记15:Interpreter
一、概述Interpreter(解释器)模式描述了如何为简单的语言定义一个文法,如何在该语言中表示一个句子,以及如何解释这些句子。在这里使用语言这个词似乎将Interpreter模式的应用范围限制到了一个过于狭小的范围,毕竟,我们不是自然语言或者编程语言设计者,需要注意的是,这里所讨论的语言并非指复杂的自然语言或者编程语言,而是一种语义标记,Interpreter模式负责实现这种标记的定义以及将其转载 2005-08-10 22:28:00 · 678 阅读 · 0 评论 -
大卫的Design Patterns学习笔记13:Chain of Responsibility
一、概述Chain of Responsibility(职责链,以下简称CoR)模式通过将多个对象串接成一条链(Chain),并沿着这条链传递上层应用传来的请求,直到有一个对象处理它为止,使得多个对象都有机会处理上层应用传来的请求,从而避免请求的发送者和接收者之间的耦合关系。对于Chain中的各个对象,可以采用类似单向链表或双向链表的结构,保存各自后继或者前接元素的引用/指针来实现链接(紧密链接)转载 2005-08-10 22:24:00 · 638 阅读 · 0 评论 -
大卫的Design Patterns学习笔记10:Flyweight
一、概述当类的部分属性在整个系统中的多个对象间重复出现时,一个通常的作法是将重复出现的属性从类定义中分离出来,并在多个对象间通过共享来节约系统开销,这种情况在界面相关的应用中尤其常见。如用于浏览目录内容的树,每个节点前面有一个Icon用于表示该节点的类型,如果将该Icon保存在每个节点的数据结构中,无疑是一种巨大的浪费,这时候通过共享(每个节点只需要保存一个所使用Icon的标识即可,在C++中,可转载 2005-08-10 22:14:00 · 603 阅读 · 0 评论 -
大卫的Design Patterns学习笔记09:Facade
一、概述Facade(外观)模式为子系统中的各类(或结构与方法)提供一个简明一致的界面,隐藏子系统的复杂性,使子系统更加容易使用。实际应用中,我们在对付一些老旧的code(尤其是将C的代码转成C++代码)或者即便不是老旧code,但涉及多个子系统时,除了重写全部代码(对于老旧code而言),我们还可能采用这样一种策略:重新进行类的设计,将原来分散在源码中的类/结构及方法重新组合,形成新的、统一的接转载 2005-08-10 22:11:00 · 604 阅读 · 0 评论