自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 收藏
  • 关注

原创 《GOF设计模式》—外观(FACADE)—Delphi源码示例:基于外观模式的编译子系统

示例:基于外观的编译子系统<br />实现:<br />让我们仔细观察一下如何在一个编译子系统中使用Facade。<br />编译子系统定义了一个BytecodeStream类,它实现了一个Bytecode对象流(stream)。Bytecode对象封装一个字节码,这个字节码可用于指定机器指令。该子系统中还定义了一个Token类,它封装了编程语言中的标识符。<br />Scanner类接收字符流并产生一个标识符流,一次产生一个标识符(token)。<br />Parser类获取Scanner生成的标识符,然

2010-08-27 18:42:00 608

原创 《GOF设计模式》—创建型模式—Delphi源码示例:基于创建型模式的迷宫

示例:基于创建型模式的迷宫<br />实现:<br />考虑到MazeGame的成员函数CreatMaze所做的仅是创建一个有两个房间的迷宫,它是相当复杂的。显然有办法使它变得更简单。例如,Room的构造器可以提前用墙壁来初始化房间的每一面。但这仅仅是将代码移到了其他地方。这个成员函数真正的问题不在于它的大小而在于它不灵活。它对迷宫的布局进行硬编码。改变布局意味着改变这个成员函数,或是重定义它—这意味着重新实现整个过程—或是对它的部分进行改变—这容易产生错误并且不利于重用。<br />创建型模式显示如何使得

2010-08-27 18:37:00 535

原创 《GOF设计模式》—创建型模式—Delphi源码示例:未基于模式的迷宫

<br />示例:简单的迷宫<br />实现:<br />我们将举一个通用的例子—为一个电脑游戏创建一个迷宫—来说明它们的实现。这个迷宫和游戏将随着各种模式不同而略有区别。有时这个游戏将仅仅是找到一个迷宫的出口;在这种情况下,游戏者可能仅能见到该迷宫的局部。有时迷宫包括一些要解决的问题和要战胜的危险,并且这些游戏可能会提供已经被探索过的那部分迷宫地图。<br />我们将忽略许多迷宫中的细节以及一个迷宫游戏中有一个还是多个游戏者。我们仅关注迷宫是怎样被创建的。我们将一个迷宫定义为一系列房间,一个房间知道它的邻

2010-08-27 18:35:00 472

原创 《GOF设计模式》—生成器(Builder)—Delphi源码示例:ClassBuilder

示例:ClassBuilder<br />实现:<br />ClassBuilder是一个生成器,Class使用它为自己创建子类。在这个例子中,一个Class既是Director也是Product。<br />代码:<br /> <br /> <br />unit uClassBuilder;<br /> <br />interface<br /> <br />uses<br />    SysUtils;<br /> <br />type<br />    TClassBuilder = class;<b

2010-08-27 18:28:00 432

原创 《GOF设计模式》—生成器(Builder)—Delphi源码示例:编译子系统中的Parser类

示例:编译子系统中的Parser类<br />实现:<br />编译子系统中的Parser类是一个Director,它以一个ProgramNodeBuilder对象作为参数。每当Parser对象识别出一个语法结构时,它就通知它的ProgramNodeBuilder对象。当这个语法分析器做完时,它向该生成器请求它生成的语法分析树并将语法分析树返回给客户。<br />代码:<br />参考“外观模式”中“基于外观模式的编译子系统”中Parser类的实现

2010-08-27 18:27:00 375

原创 《GOF设计模式》—生成器(Builder)—Delphi源码示例:编译子系统中的ByteCodeStream

示例:编译子系统中的ByteCodeStream<br />实现:<br />ByteCodeStream是一个生成器,它将一个被编译了的方法创建为字节数组。Bytecode对象封装一个字节码,这个字节码可用于指定机器指令。ByteCodeStream不是Builder模式的标准使用,因为它生成的复杂对象被编码为一个字节数组,而不是正常的Smalltalk对象。但ByteCodeStream的接口是一个典型的生成器,而且将很容易用一个将程序表示为复合对象的不同的类来替换ByteCodeStream。<br

2010-08-27 18:27:00 356

原创 《GOF设计模式》—生成器(Builder)—Delphi源码示例:RTF阅读器

示例:RTF阅读器<br />特点:<br />通常情况下,由具体生成器生成的产品,它们的表示相差是如此之大以至于给不同的产品以公共父类没有太大意思。因为客户通常用合适的具体生成器来配置导向者,客户处于的位置使它知道Builder的哪一个具体子类被使用,以及能处理具体Builder生成的产品。<br />实现:<br />一个RTF(RichTextFormat)文档交换格式的阅读器应能将RTF转换为多种正文格式,如该阅读器可以将RTF文档转换成普通ASCII文本。但问题在于“格式转换”的数目可能是无限的。

2010-08-27 18:26:00 698

原创 《GOF设计模式》—生成器(Builder)—Delphi源码示例:生成器接口

示例:生成器接口<br />说明:<br />(1)、定义<br />将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。<br />(2)、结构<br /><br /> <br />生成器<br />Builder:抽象生成器,为创建一个Product对象的各个部件指定抽象接口。<br />ConcreteBuilder:具体生成器,实现Builder的接口以构造和装配该产品的各个部件。定义并明确它所创建的表示。提供一个检索产品的接口来取得Product(例如,GetASCIITex

2010-08-27 18:24:00 682 1

原创 《GOF设计模式》—抽象工厂(Abstract Factory)—Delphi源码示例:参数化的工厂

示例:参数化的工厂<br />说明:<br />AbstractFactory通常为每一种它可以生产的产品定义一个操作。产品的种类被编码在操作型构中。增加一种新的产品要求改变AbstractFactory的接口以及所有与它相关的类。一个更灵活但不太安全的设计是给创建对象的操作增加一个参数。该参数指定了将被创建的对象的种类。它可以是一个类标识符、一个整数、一个字符串,或其他任何可以标识这种产品的东西。<br />在Delphi这样的动态类型语言中。仅当所有对象都有相同的抽象基类,或者当产品对象可以被请求它们的

2010-08-27 18:13:00 360

原创 《GOF设计模式》—抽象工厂(Abstract Factory)—Delphi源码示例:基于类的工厂

示例:基于类的工厂<br />说明:<br />在将类作为第一类对象的语言中,这个基于原型的方法可能有所变化。你可以将这些语言中的一个类看成是一个退化的工厂,它仅创建一种产品。你可以将类存储在一个具体工厂中,这个具体工厂在变量中创建多个具体的产品,这很像原型。<br />这些类代替具体工厂创建了新的实例。你可以通过使用产品的类而不是子类初始化一个具体工厂的实例,来定义一个新的工厂。这一方法利用了语言的特点,而纯基于原型的方法是与语言无关的。<br />实现:<br />像基于原型的工厂一样,基于类的版本将有

2010-08-27 18:12:00 373

原创 《GOF设计模式》—抽象工厂(Abstract Factory)—Delphi源码示例:基于原型的工厂

示例:基于原型的工厂<br />说明:<br />如果有多个可能的产品系列,具体工厂也可以使用Prototype模式来实现。具体工厂使用产品系列中每一个产品的原型实例来初始化,且它通过复制它的原型来创建新的产品。在基于原型的方法中,使得不是每个新的产品系列都需要一个新的具体工厂类。<br />实现:<br />此处是Smalltalk中实现一个基于原型的工厂的方法。具体工厂在一个被称为partCatalog的字典中存储将被复制的原型,方法make检索该原型并复制它,方法addPart用来向该字典中增加部件原

2010-08-27 18:09:00 384

原创 《GOF设计模式》—抽象工厂(Abstract Factory)—Delphi源码示例:用户界面工具包

示例:用户界面工具包<br />特点:<br />当你提供一个产品类库,而只想显示它们的接口而不是实现时。<br />实现:<br />考虑一个支持多种视感(look-and-feel)标准的用户界面工具包,例如Motif和PresentationManager。不同的视感风格为诸如滚动条、窗口和按钮等用户界面“窗口组件”定义不同的外观和行为。为保证视感风格标准间的可移植性,一个应用不应该为一个特定的视感外观硬编码它的窗口组件。在整个应用中实例化特定视感风格的窗口组件类将使得以后很难改变视感风格。<br /

2010-08-27 18:08:00 444

原创 《GOF设计模式》—抽象工厂(Abstract Factory)—Delphi源码示例:抽象工厂接口

示例:抽象工厂接口<br />说明:<br />(1)、定义<br />父类提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类;子类决定创建一系列依赖的具体对象。<br />(2)、结构<br /><br /> <br />工厂<br />AbstractFactory:抽象工厂,声明一个创建抽象产品对象的操作接口。<br />ConcreteFactory:具体工厂,实现创建具体产品对象的操作。<br />产品<br />AbstractProduct:抽象产品,为一类产品对象声明一个接口

2010-08-27 18:06:00 452

原创 《GOF设计模式》—工厂方法(Factory Method)—Delphi源码示例:延迟初始化对象

示例:延迟初始化对象<br />说明:<br />在Creator的构造器中不要调用工厂方法—在ConcreteCreator中该工厂方法还不可用。构造器只是将产品初始化为0,而不是创建一个具体产品。访问者返回该产品。但首先它要检查确定该产品的存在,如果产品不存在,访问者就创建它。这种技术有时被称为lazy initialization。<br />代码:<br /> <br />unit FactoryMethodUnit2;<br /> <br />interface<br /> <br />uses<

2010-08-27 17:41:00 429

原创 《GOF设计模式》—工厂方法(Factory Method)—Delphi源码示例:参数化工厂方法

示例:参数化工厂方法<br />说明:<br />参数化工厂方法是指通过工厂方法创建多种产品,这个工厂方法采用一个参数来标识要被创建的对象的种类。所有这个工厂方法构建的对象将共享Product接口。<br />重定义一个参数化的工厂方法使你可以简单而有选择性的扩展或改变一个Creator生产的产品。你可以为新产品引入新的标识符,或可以将已有的标识符与不同的产品相关联。<br />实现:<br />Creator的CreateProduct方法是一个参数化的工厂方法,其可以根据ProductID创建不同的Pr

2010-08-27 17:40:00 992

原创 《GOF设计模式》—工厂方法(Factory Method)—Delphi源码示例:平行的类层级架构

示例:平行的类层级架构<br />说明:<br />当一个类将它的一些职责委托给一个独立的类的时候,就产生了平行类层次。<br />实现:<br />对于可以被交互操纵的图形;它们可以用鼠标进行伸展、移动,或者旋转。实现这样一些交互并不总是那么容易,它通常需要存储和更新在给定时刻记录操纵状态的信息,这个状态仅仅在操纵时需要。因此它不需要被保存在图形对象中。此外,当用户操纵图形时,不同的图形有不同的行为。例如,将直线图形拉长可能会产生一个端点被移动的效果,而伸展正文图形则可能会改变行距。<br />有了这些限

2010-08-27 17:38:00 565

原创 《GOF设计模式》—工厂方法(Factory Method)—Delphi源码示例:为子类提供挂钩(hook)

<br />示例:为子类提供挂钩(hook)<br />说明:<br />为子类提供挂钩(hook):也叫预设工厂方法。父类的工厂方法实现默认对象,工厂方法给子类一个挂钩以提供对象的扩展版本。<br />钩子是一种被声明在父类中的方法,但只有空的或者默认的实现。钩子的存在可以让子类有能力对实现的进行修改或扩充。要不要挂钩,由子类决定。<br />特点:<br />Creator是一个具体的类而且为工厂方法提供一个缺省的实现。<br />实现:<br />Application类负责管理Document并根据

2010-08-27 17:35:00 893

原创 《GOF设计模式》—工厂方法(Factory Method)—Delphi源码示例:工厂方法接口

示例:工厂方法接口示例:工厂方法接口说明:(1)、定义父类定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。(2)、结构对象:   TProduct:产品。   TContreteProduct:具体产品。工厂:   TCreator:工厂,声明工厂方法,该方法返回一个TProduct对象。   TContreteCreator:具体工厂,改写工厂方法(override)以返回一个TContreteProduc实例。特点:Creator类是一个抽

2010-08-27 17:32:00 370

原创 《GOF设计模式》—生成器(Builder)—Delphi源码示例:基于生成器的迷宫

示例:基于生成器的迷宫实现:我们将定义一个CreateMaze成员函数的变体,它以类MazeBuilder的一个生成器对象作为参数。MazeBuilder类定义的接口可以创建:1)、迷宫。2)、有一个特定房间号的房间。3)、在有号码的房间之间的门。GetMaze操作返回这个迷宫给客户。MazeBuilder的子类将重定义这些操作,返回它们所创建的迷宫。

2010-08-14 16:42:00 634

原创 《GOF设计模式》—抽象工厂(Abstract Factory)—Delphi源码示例:基于抽象工厂的迷宫

示例:基于抽象工厂的迷宫实现: 如果TMaze.Create是传递一个对象当作参数来建立rooms、walls及doors;如此你可以以不同的参数来改变rooms、walls及doors的类。请注意MazeFactory也就是工厂方法(Factory Method)的一个集合;这是最通常实现抽象工厂模式的方式。同时请注意MazeFactory不是一个抽象类(abstract class)它的行为包括抽象工厂(abstractFactory)及具体工厂(ContreteFactory);这也是

2010-08-09 17:43:00 517

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除