(Builder Pattern)
使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
建造者模式的本质是使组装过程(用指挥者类进行封装,从而达到解耦的目的)和创建具体产品解耦,使我们不用去关心每个组件是如何组装的。
1、建造者独立,易扩展。
2、便于控制细节风险。
1、产品必须有共同点,范围有限制。
2、如内部变化复杂,会有很多的建造类。
1、建造者(Builder):创建和提供实例
2、指挥者(Director):控制建造过程,隔离用户与建造过程的关联,管理建造出来的实例的依赖关系。
1、需要生成的对象具有复杂的内部结构。
2、需要生成的对象内部属性本身相互依赖。
一步一步画小人,首先是头,依次是身体、左手、右手、左脚、右脚。
首先,定义定义一个抽象的造人类:
abstract class PersonBuilder
{
protected Graphics g;
protected Pen p;
public PersonBuilder (Graphics g,Pen p)
{
this.g = g;
this.p = p;
}
public abstract void BuildHead();
public abstract void BuildBody();
public abstract void BuildArmLeft();
public abstract void BuildArmRight();
public abstract void BuildLegLeft();
public abstract void BuildLegRight();
}
画人过程,我们制造一个瘦子,那么就让这个瘦子类去继承这个抽象类
class PersonThinBuilder : PersonBuilder
{
public PersonThinBuilder(Graphics g,Pen p):base(g, p)
{ }
public override void BuildHead()
{
g.DrawRectangle(p, 50,20, 30, 30);
}
public override void BuildBody()
{
g.DrawRectangle(p, 60, 50, 10, 50);
}
public override void BuildArmLeft()
{
g.DrawLine(p, 60, 50, 40, 100);
}
public override void BuildArmRight()
{
g.DrawLine(p, 70, 50, 90, 100);
}
public override void BuildLegLeft()
{
g.DrawLine(p, 60, 100, 45, 150);
}
public override void BuildLegRight()
{
g.DrawLine(p, 70, 100, 85, 150);
}
}
指挥者类,控制建造的过程
class PersonDirector
{
private PersonBuilder pb;
public PersonDirector (PersonBuilder pb)//用户告诉指挥者制作什么样的
{
this.pb = pb;
}
public void CreatePerson()
{
//根据用户选择制造小人
pb.BuildHead();
pb.BuildBody();
pb.BuildArmLeft();
pb.BuildArmRight();
pb.BuildLegLeft();
pb.BuildLegRight();
}
}
客户端
private void button1_Click(object sender, EventArgs e)
{
Pen p = new Pen (Color.White );
PersonThinBuilder ptb = new PersonThinBuilder(pictureBox1.CreateGraphics(), p);
PersonDirector pdThin = new PersonDirector(ptb);
pdThin.CreatePerson();
PersonFatBuilder pfb = new PersonFatBuilder(pictureBox2.CreateGraphics(), p);
PersonDirector pdFat = new PersonDirector(pfb);
pdFat.CreatePerson();
}
显示结果