【IT168技术文档】
概要
1.1意图
将复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。需要注意如下几点。
(1)构建与表示分离:表明生成器模式的结构,构建过程被封装在导航器中,生成器则负责实现具体的表示。
(2)同样的构建过程:生成器模式关注的是构建过程,即构建过程是相同的。
(3)不同的表示:生成器模式并不在意产生对象的结果,其构造的产品不一定有相同的类型。
1.2使用场合
创建复杂对象的算法应该独立于该对象的组成部分及其装配方式,以及构造过程必须允许被构造的对象有不同表示情况下使用生成器模式。
1.3实现示例
先用一个一个简单的例子来说明生成器模式的代码实现。编写一个画脸谱程序,将画脸谱的过程分解为画脸、画眼睛、画鼻子、画耳朵和画嘴巴。首先创建一个抽象的生成器,命名为FaceBuilder:
using System;
Namespace FaceBuildernamespace FaceBuilder
{
public abstract Class FaceBuilderclass FaceBuilder()
{}
public abstract void BuildFace();
public abstract void BuildEyes();
public abstract void BuildNose();
public abstract void BuildEars();
public abstract void BuildMouth();
}
然后创建一个具体的生成器,使用GUI+绘制脸谱:
using System;
using System.Drawing;
Namespace FaceBuildernamespace FaceBuilder
{
public Class GUIFaceBuilderclass GUIFaceBuilder:FaceBuilder
{
private Graphics grap;
private Pen p;
public GUIFaceBuilder(Graphics g)
{
grap = p;
p = new Pen (Color.Blue);
}
public override void BuildFace ()
{
grap.DrawEllipse (p,100,100,200,300);
}
public override void BuildEyes ()
{
grap.DrawEllipse (p,125,220,50,30);
grap.DrawEllipse (p,225,220,50,30);
}
public override void BuildEars ()
{
grap.DrawEllipse (p,80,250,20,40);
grap.DrawEllipse (p,300,250,20,40);
}
public override void BuildNose ()
{
grap.DrawEllipse (p,190,250,20,50);
}
public override void BuildNose ()
{
grap.DrawEllipse (p,190,350,20,1);
}
}
}
接着创建绘制导航:
using System;
Namespace FaceBuildernamespace FaceBuilder
{
public Class FaceDirectorclass FaceDirector
{
private Class FaceBuilderclass FaceBuilder b;
public FaceDirector (FaceBuilder b)
{
this.b = b;
}
public void CreateFace ()
{
b. BuildFace ();
b. BuildEyes ();
b. BuildEars ();
b. BuildNose ();
b. BuildNose ();
}
}
}