建造者模式(Builder)
建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
UML图
1、首先我们创建一个抽象类Builder,该类主要是为创建一个Product对象的各个部件指定的抽象接口。
abstract class PersonBuilder
{
protected Graphics _g;
protected Pen _p;
public PersonBuilder(Graphics g, Pen p)
{
this._g = g;
this._p = p;
}
//虚方法 对象的构建方法
public abstract void BuilderHead();
public abstract void BuilderBody();
public abstract void BuilderArmRight();
public abstract void BuilderArmLeft();
public abstract void BuilderLegRight();
public abstract void BuilderLegLeft();
}
2、具体创建者类,继承于基类PersonBuilder,实现PersonBuilder接口,构造函数和装配各个部件。
class PersonThinBuilder:PersonBuilder
{
public PersonThinBuilder(Graphics g, Pen p)
: base(g, p)
{
}
public override void BuilderHead()
{
_g.DrawEllipse(_p, 50, 20, 30, 30);
}
public override void BuilderBody()
{
_g.DrawRectangle(_p, 60, 50, 10, 50);
}
public override void BuilderArmLeft()
{
_g.DrawLine(_p, 60, 50, 40, 100);
}
public override void BuilderArmRight()
{
_g.DrawLine(_p, 70, 50, 90, 100);
}
public override void BuilderLegLeft()
{
_g.DrawLine(_p, 60, 100, 45, 150);
}
public override void BuilderLegRight()
{
_g.DrawLine(_p, 70, 100, 85, 150);
}
}
class PersonFatBuilder:PersonBuilder
{
………
}
3、PersonDirector类为指挥类,该类指挥具体使用哪一个PersonBuilder接口实例化的得到的创建者对象。
//指挥类(Director),该类主要用来控制建造过程,
//指示要建造哪个具体的建造对象,也用它来隔离用户与建造过程的关联
class PersonDirector
{
private PersonBuilder _pb;
public PersonDirector(PersonBuilder pb)
{
this._pb = pb;
}
//根据用户的选择建造对应的建造者对象
public void CreatePerson()
{
_pb.BuilderHead();
_pb.BuilderBody();
_pb.BuilderArmLeft();
_pb.BuilderArmRight();
_pb.BuilderLegLeft();
_pb.BuilderLegRight();
}
}
4、客户端代码实现:
try
{
Graphics g = pictureBox1.CreateGraphics();//创建了一个画布
Pen p = new Pen(Color.Red);
//实例化了一个小人建造者对象
PersonThinBuilder thinPerson = new PersonThinBuilder(g, p);
//传入一个小人建造者对象给建造者对象控制器
PersonDirector perDirector = new PersonDirector(thinPerson);
//直接调用了产生对象的具体实例方法
perDirector.CreatePerson();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
MessageBox.Show("小人产生成功");
}