設計模式(七)建造者模式

適用於某個對象的構建過程複雜的情況,分離了對象子組件的單獨構造(由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=優質草皮]]


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章