【设计模式】生成器模式

版权声明:转载请注明出处: https://blog.csdn.net/qq_21687635/article/details/85048128

模式定义

生成器模式将一个复杂对象的构建与它的表示分离,封装了一个产品的构造过程,并允许按步骤构造。

下图是该模式的类图:
生成器模式类图

一个生动的例子

Product类:
public class Vacation {
	private int day;
	private String hotel;
	private String ticket;
	private String specialEvent;

	public int getDay() {
		return day;
	}

	public void setDay(int day) {
		this.day = day;
	}

	public String getHotel() {
		return hotel;
	}

	public void setHotel(String hotel) {
		this.hotel = hotel;
	}

	public String getTicket() {
		return ticket;
	}

	public void setTickets(String ticket) {
		this.ticket = ticket;
	}

	public String getSpecialEvent() {
		return specialEvent;
	}

	public void setSpecialEvent(String specialEvent) {
		this.specialEvent = specialEvent;
	}

	@Override
	public String toString() {
		return "Vacation [day=" + day + ", hotel=" + hotel + ", ticket=" + ticket + ", specialEvent=" + specialEvent
				+ "]";
	}

}
Builder抽象类:
public abstract class AbstractBuilder {
	protected Vacation vacation;

	public Vacation getVocationPlanner() {
		return vacation;
	}

	public AbstractBuilder() {
		vacation = new Vacation();
	}

	public abstract void buildDay(int day);

	public abstract void addHotel(String hotel);

	public abstract void addTicket(String ticket);

	public abstract void addSpecialEvent(String specialEvent);

}

Builder实现类:
class VacationBuilder extends AbstractBuilder {

	@Override
	public void buildDay(int day) {
		vacation.setDay(day);
	}

	@Override
	public void addHotel(String hotel) {
		vacation.setHotel(hotel);
	}

	@Override
	public void addTicket(String ticket) {
		vacation.setTickets(ticket);
	}

	@Override
	public void addSpecialEvent(String specialEvent) {
		vacation.setSpecialEvent(specialEvent);
	}
}
客户端类:
public class BuilderTest {
	public static void main(String[] args) {
		AbstractBuilder vacationBuilder = new VacationBuilder();
		vacationBuilder.buildDay(3);
		vacationBuilder.addHotel("hotel");
		vacationBuilder.addSpecialEvent("specialEvent");
		vacationBuilder.addTicket("ticket");
		Vacation vocationPlanner = vacationBuilder.getVocationPlanner();
		System.out.println(vocationPlanner);
	}
}

参考

  1. Head First 设计模式[书籍]
  2. 百度百科之建造者模式
  3. 简书之生成器模式

猜你喜欢

转载自blog.csdn.net/qq_21687635/article/details/85048128