将复杂的类, 拆分成简单的类,进行创建.
/**
* 建造者模式
*/
public class Builder {
public static void main(String[] args) {
HumanDirector director = new SmartHumanDirector();
Human human = director.createHuman(new SmartHuman());
System.out.println(human.toString());
}
}
interface HumanDirector {
Human createHuman(HumanBuilder builder);
}
class SmartHumanDirector implements HumanDirector {
@Override
public Human createHuman(HumanBuilder builder) {
return new Human(builder.buildHead(), builder.buildBody(), builder.buildHand(), builder.buildFoot());
}
}
interface HumanBuilder {
Head buildHead();
Body buildBody();
Hand buildHand();
Foot buildFoot();
}
class SmartHuman implements HumanBuilder {
@Override
public Head buildHead() {
return new Head("智商250");
}
@Override
public Body buildBody() {
return new Body("身高185");
}
@Override
public Hand buildHand() {
return new Hand("左手", "右手");
}
@Override
public Foot buildFoot() {
return new Foot("左脚", "右脚");
}
}
class Human {
private Head head;
private Body body;
private Hand hand;
private Foot foot;
public Human() {
}
public Human(Head head, Body body, Hand hand, Foot foot) {
this.head = head;
this.body = body;
this.hand = hand;
this.foot = foot;
}
public Head getHead() {
return head;
}
public void setHead(Head head) {
this.head = head;
}
public Body getBody() {
return body;
}
public void setBody(Body body) {
this.body = body;
}
public Hand getHand() {
return hand;
}
public void setHand(Hand hand) {
this.hand = hand;
}
public Foot getFoot() {
return foot;
}
public void setFoot(Foot foot) {
this.foot = foot;
}
@Override
public String toString() {
return "Human{" +
"head=" + head +
", body=" + body +
", hand=" + hand +
", foot=" + foot +
'}';
}
}
class Head {
private String iq;
public Head(String iq) {
this.iq = iq;
}
public String getIq() {
return iq;
}
public void setIq(String iq) {
this.iq = iq;
}
@Override
public String toString() {
return "Head{" +
"iq='" + iq + '\'' +
'}';
}
}
class Body {
private String length;//身体长......
public Body(String length) {
this.length = length;
}
public String getLength() {
return length;
}
public void setLength(String length) {
this.length = length;
}
@Override
public String toString() {
return "Body{" +
"length='" + length + '\'' +
'}';
}
}
class Hand {
private String left;
private String right;
public Hand(String left, String right) {
this.left = left;
this.right = right;
}
public String getLeft() {
return left;
}
public void setLeft(String left) {
this.left = left;
}
public String getRight() {
return right;
}
public void setRight(String right) {
this.right = right;
}
@Override
public String toString() {
return "Hand{" +
"left='" + left + '\'' +
", right='" + right + '\'' +
'}';
}
}
class Foot {
private String left;
private String right;
public Foot(String left, String right) {
this.left = left;
this.right = right;
}
public String getLeft() {
return left;
}
public void setLeft(String left) {
this.left = left;
}
@Override
public String toString() {
return "Foot{" +
"left='" + left + '\'' +
", right='" + right + '\'' +
'}';
}
}