適用於某個對象的構建過程複雜的情況,分離了對象子組件的單獨構造(由Builder來負責)和裝配(由Director負責)。
實現了構建和裝配的解耦。不同的構建器,相同的裝配,也可以做出不同的對象;相同的構建器,不同的裝配順序也可以做出不同的對象。也就是實現了構建算法、裝配算法的解耦,實現了更好的複用。
足球俱樂部類FootBallTeam
public class FootBallTeam {
private Player player;
private Money money;
private Place place;
public Player getPlayer() {
return player;
}
public void setPlayer(Player player) {
this.player = player;
}
public Money getMoney() {
return money;
}
public void setMoney(Money money) {
this.money = money;
}
public Place getPlace() {
return place;
}
public void setPlace(Place place) {
this.place = place;
}
@Override
public String toString() {
return "FootBallTeam [player=" + player + ", money=" + money
+ ", place=" + place + "]";
}
}
裏面涉及的球員類Player:
public class Player{
private String playerName;
public String getPlayerName() {
return playerName;
}
public void setPlayerName(String playerName) {
this.playerName = playerName;
}
@Override
public String toString() {
return "Player [playerName=" + playerName + "]";
}
public Player(String playerName) {
super();
this.playerName = playerName;
}
}
涉及的資金類Money:
public class Money{
private int Money;
public int getMoney() {
return Money;
}
public void setMoney(int money) {
Money = money;
}
public Money(int money) {
super();
Money = money;
}
@Override
public String toString() {
return "Money [Money=" + Money + "]";
}
}
涉及的場地類Place:
public class Place{
private String haveLand;
public String getHaveLand() {
return haveLand;
}
public void setHaveLand(String haveLand) {
this.haveLand = haveLand;
}
public Place(String haveLand) {
super();
this.haveLand = haveLand;
}
@Override
public String toString() {
return "Place [haveLand=" + haveLand + "]";
}
}
構建類FootBallTeamBulider:
public interface FootBallTeamBulider {
Player builderPlayer();
Money builderMoney();
Place builderPlace();
}
構建器實現類:
public class FootBallTeamBuliderImpl implements FootBallTeamBulider {
@Override
public Player builderPlayer() {
return new Player("偉大的球員");
}
@Override
public Money builderMoney() {
return new Money(88888888);
}
@Override
public Place builderPlace() {
return new Place("優質草皮");
}
}
裝配器:
public interface FootBallTeamDirector {
FootBallTeam directorFootBallTeam();
}
裝配器實現類:
public class FootBallTeamDirectorImpl implements FootBallTeamDirector {
private FootBallTeamBulider bulider;
public FootBallTeamDirectorImpl(FootBallTeamBulider bulider) {
this.bulider = bulider;
}
@Override
public FootBallTeam directorFootBallTeam() {
Player player= bulider.builderPlayer();
Money money = bulider.builderMoney();
Place place = bulider.builderPlace();
//裝配
FootBallTeam team = new FootBallTeam();
team.setPlayer(player);
team.setMoney(money);
team.setPlace(place);
return team;
}
}
測試類:
public class ClientTest {
public static void main(String[] args) {
FootBallTeamDirector director = new FootBallTeamDirectorImpl(new FootBallTeamBuliderImpl());
FootBallTeam footBallTeam = director.directorFootBallTeam();
System.out.println(footBallTeam);
}
}
控制檯輸出結果:
FootBallTeam [player=Player [playerName=偉大的球員], money=Money [Money=88888888], place=Place [haveLand=優質草皮]]