建造者模式
定义
将一个复杂对象的构建和他的表示分离,使得同样的构建过程可以创建不同的表示。
主要用于创建一些复杂的对象,这些对象内部构件间的建造顺序是稳定的,但对象内部的构建通常面临着复杂的变化。
如果使用建造者模式,用户就只需指定需要建造的类型就可以得到它们,而建造的过程和细节被隐藏了。
UML图
用例
抽象的建造人类
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 extends PersonBuilder{
@Override
public void buildHead(){
g.DrawEllipse(p, 50, 20, 30, 30);
}
@Override
public void buildBody(){
g.DrawRectangle(p, 60, 50, 10, 50);
}
@Override
public void buildArmLeft(){
g.DrawLine(p, 60, 50, 40, 100);
}
@Override
public void buildArmRight(){
g.DrawLine(p, 70, 50, 90, 100);
}
@Override
public void buildLegLeft(){
g.DrawLine(p, 60, 100, 45, 150);
}
@Override
public 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();
}
}
客户端
Pen p = new Pen(Color.Yellow);
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();