您的位置:首页 > 其它

大话设计模式之建造者模式(生成器模式) 建造队与指挥者的纠缠

2015-12-30 11:41 615 查看
建造者模式,相信很多人都听说过,或者使用过,也叫做生成器模式。例如我们都知道人由头部、身体、双手和双脚组成,我们使用建造者模式来实现一下这个功能。

第一步:创建一个人对象类,有四个属性,分别代表头部、手、脚、身体,同时也有一个行为,就是显示自己。

public class Person {

private String head;
private String boby;
private String hand;
private String foot;

public void show() {
System.out.println(this.head + "," + this.boby + "," + this.hand + "," + this.foot);
}

public String getHead() {
return head;
}
public void setHead(String head) {
this.head = head;
}
public String getBoby() {
return boby;
}
public void setBoby(String boby) {
this.boby = boby;
}
public String getHand() {
return hand;
}
public void setHand(String hand) {
this.hand = hand;
}
public String getFoot() {
return foot;
}
public void setFoot(String foot) {
this.foot = foot;
}
}
第二步:抽象一个人的建造类,建造步骤有四个,分别为建造头部、建造双手、建造双脚和建造身体,具体的实现由子类来实现,最后有一个提供成品的方法,抽象类约束了子类的行为,子类必须实现这个五个方法,避免了子类遗漏某个建造步骤的可能性。

//建造一个人对象
public abstract class PersonBuilder {

public abstract void head();
public abstract void boby();
public abstract void hand();
public abstract void foot();
public abstract Person getPerson();
}
第三步:创建一个瘦人建造队和一个胖人建造队飞,分别创建瘦人和胖子。

//建造瘦人
public class ThinPersonBuilder extends PersonBuilder {

private Person thinPerson = new Person();

@Override
public void boby() {
thinPerson.setBoby("偏瘦性身体");
}

@Override
public void foot() {
thinPerson.setFoot("双脚");
}

@Override
public void hand() {
thinPerson.setHand("双手");
}

@Override
public void head() {
thinPerson.setHead("头");
}

@Override
public Person getPerson() {
return thinPerson;
}

}
//建造胖人
public class FatPersonBuilder extends PersonBuilder {

private Person thinPerson = new Person();

@Override
public void boby() {
thinPerson.setBoby("偏胖性身体");
}

@Override
public void foot() {
thinPerson.setFoot("双脚");
}

@Override
public void hand() {
thinPerson.setHand("双手");
}

@Override
public void head() {
thinPerson.setHead("头");
}

@Override
public Person getPerson() {
return thinPerson;
}

}
第四步:我们都知道建造队都有指挥者,那么我们就创建一个指挥者类,指挥建造队如何建造,指挥者负责指挥建造对进行工作。

//指挥者
public class Director {

//创建一个人对象,具体是瘦人还是胖人由参数决定
public void buildPerson(PersonBuilder personBuilder) {
//指挥建造过程
personBuilder.head();
personBuilder.boby();
personBuilder.hand();
personBuilder.foot();
}
}
第五步:我们来测试一下。我们首先创建一个指挥者,接着创建一个瘦人建造队,然后让指挥者指挥建造队进行建造人,最后向建造队取得建造完成的成品,即我们需要的人对象,然后显示一下。

//测试类
public class Test {

public static void main(String[] args) {
Director director = new Director(); //指挥者

ThinPersonBuilder thinPersonBuilder = new ThinPersonBuilder();
director.buildPerson(thinPersonBuilder); //指挥瘦人建造队
Person thinPerson = thinPersonBuilder.getPerson(); //瘦人建造
thinPerson.show();

FatPersonBuilder fatPersonBuilder = new FatPersonBuilder();
director.buildPerson(fatPersonBuilder);//指挥胖人建造队
Person fatPerson = fatPersonBuilder.getPerson(); //胖人建造
fatPerson.show();

}
}
总结:建造者模式是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。从而可以使得可拓展,可维护。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: