ze。BuildMaze实例化一个Maze,它将被其他操作装配并最终返回给客户(通过GetMaze)。BuildRoom操作创建一个房间并建造它周围的墙壁:为建造一扇两个房间之间的门,Sta
dardMazeBuilder查找迷宫中的这两个房间并找到它们相邻的墙:客户现在可以用CreateMaze和Sta
dardMazeBuilder来创建一个迷宫:我们本可以将所有的Sta
dardMazeBuilder操作放在Maze中并让每一个Maze创建它自身。但将Maze变得小一些使得它能更容易被理解和修改,而且Sta
dardMazeBuilder易于从Maze中分离。更重要的是,将两者分离使得你可以有多种MazeBuilder,每一种使用不同的房间、墙壁和门的类。一个更特殊的MazeBuilder是Cou
ti
gMazeBuilder。这个生成器根本不创建迷宫;它仅仅对已被创建的不同种类的构件进行计数。
f构造器初始化该计数器,而重定义了的MazeBuilder操作只是相应的增加计数。下面是一个客户可能怎样使用Cou
ti
gMazeBuilder:10已知应用RTF转换器应用来自ETWGM88。它的正文生成模块使用一个生成器处理以RTF格式存储的正文。生成器在Smalltalk80Par90中是一个通用的模式:编译子系统中的Parser类是一个Director,它以一个ProgramNodeBuilder对象作为参数。每当Parser对象识别出一个语法结构时,它就通知它的ProgramNodeBuilder对象。当这个语法分析器做完时,它向该生成器请求它生成的语法分析树并将语法分析树返回给客户。ClassBuilder是一个生成器,Class使用它为自己创建子类。在这个例子中,一个Class既是Director也是Product。ByteCodeStream是一个生成器,它将一个被编译了的方法创建为字节数组。ByteCodeStream不是Builder模式的标准使用,因为它生成的复杂对象被编码为一个字节数组,而不是正常的Smalltalk对象。但ByteCodeStream的接口是一个典型的生成器,而且将很容易用一个将程序表示为复合对象的不同的类来替换ByteCodeStream。
f自适应通讯环境(AdaptiveCommu
icatio
sE
viro
me
t)中的服务配置者(ServiceCo
figurator)框架使用生成器来构造运行时刻动态连接到服务器的网络服务构件SS94。这些构件使用一个被LALR(1)语法分析器进行语法分析的配置语言来描述。这个语法分析器的语义动作对将信息加载给服务构件的生成器进行操作。在这个例子中,语法分析器就是Director。11r