概念:
需要将一个复杂的对象的构建和他的表示分离,使得同样的构建过程有不同的表示意图
建造者模式结构图
结构图说明:
builder为创建一个Product对象的各个部件指定的抽象接口:
ConcreteBuilder:具体的建造者实现Builder接口,构造和装配各个部件
Protect:具体的产品
DIrector:构建一个使用Builder接口的对象;
举例
namespace WindowsFormsApp19
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
Pen p = new Pen(Color.Yellow);
PersonThinBuilder ptd = new PersonThinBuilder(pictureBox1.CreateGraphics(), p);
PersonDirector pdthin = new PersonDirector(ptd);
pdthin.CreatePerson();
//pictureBox1.Show();
}
}
//建造者
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 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();
}
}
//具体的建造对象
class PersonThinBuilder : PersonBuilder
{
public PersonThinBuilder(Graphics g, Pen p) : base(g, p)
{
}
public override void BuildHead()
{
g.DrawEllipse(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);
}
}
}在这里插入代码片
优点
:建造者模式可以将一个产品的内部表象和产品的生成过程分割,从而可以使一个建造过程生成具有不同的额内部表象的产品。如果使用了建造者模式,那么用户就只需建造的类型就可以的到他们,而具体建造的过程和细节就不必知道了。