建造者模式结构图
指挥者:是构造一个使用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());
}
}