建造者模式結構圖
指揮者:是構造一個使用Builder接口的對象。
Builder:builder是爲創建一個對象(比如一個product)各個部件的抽象接口,定義方法。
具體建造者:實現builder接口,重寫他的方法,構造成自己想要的配件,給指揮者。
建造模式的優點:易擴展,如果想要建造同一個產品,其他部件不同,則重寫builder,自定義自己的實現即可。
與工廠模式相比,建造者只是生產產品零部件,具體建造過程交由指揮者。而工廠模式是全部創建過程封裝在類中。
使用建造模式代碼:
//人對象
public class Human {
private String head;
private String body;
private String hand;
private String foot;
public String getHead() {
return head;
}
public void setHead(String head) {
this.head = head;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
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;
}
}
//builder接口
public interface IBuildHuman {
public void buildHead();
public void buildBody();
public void buildHand();
public void buildFoot();
public Human createHuman();
}
//具體建造者
public class SmartManBuilder implements IBuildHuman {
Human human;
public SmartManBuilder(){
human = new Human();
}
@Override
public void buildHead() {
human.setHead("智商180的頭腦");
}
@Override
public void buildBody() {
human.setBody("新的身體");
}
@Override
public void buildHand() {
human.setHand("新的手");
}
@Override
public void buildFoot() {
human.setFoot("新的腳");
}
@Override
public Human createHuman() {
return human;
}
}
//指揮者
public class Director {
public Human createHumanByDirecotr(IBuildHuman bh){
bh.buildBody();
bh.buildFoot();
bh.buildHand();
bh.buildHead();
return bh.createHuman();
}
}
//使用
public class BuilderTest {
public static void main(String[] args){
Director director = new Director();
Human human = director.createHumanByDirecotr(new SmartManBuilder());
System.out.println(human.getHead());
System.out.println(human.getBody());
System.out.println(human.getHand());
System.out.println(human.getFoot());
}
}