设计模式(七)建造者模式

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


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