适用于某个对象的构建过程复杂的情况,分离了对象子组件的单独构造(由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=优质草皮]]