您的位置:首页 > 编程语言 > Java开发

生成器模式

2017-06-09 15:09 113 查看
生成器模式封装一个产品的构造过程,并允许按照步骤构造

java类图



java代码

// 计划类
public class Planner {

private Date date;
private String hotelName;
private String roomName;
private String eventName;
private String ticketName;

public Date getDate() {
return date;
}

public void setDate(Date date) {
this.date = date;
}

public String getHotelName() {
return hotelName;
}

public void setHotelName(String hotelName) {
this.hotelName = hotelName;
}

public String getRoomName() {
return roomName;
}

public void setRoomName(String roomName) {
this.roomName = roomName;
}

public String getEventName() {
return eventName;
}

public void setEventName(String eventName) {
this.eventName = eventName;
}

public String getTicketName() {
return ticketName;
}

public void setTicketName(String ticketName) {
this.ticketName = ticketName;
}

@Override
public String toString() {
return "Planner{" +
"date=" + date +
", hotelName='" + hotelName + '\'' +
", roomName='" + roomName + '\'' +
", eventName='" + eventName + '\'' +
", ticketName='" + ticketName + '\'' +
'}';
}
}

// 生成器接口
public interface Builder {

void buildDay(Date date);

void addHotel(String hotelName);

void addReservation(String roomName);

void addSpecialEvent(String eventName);

void addTicket(String ticketName);

Planner getPlanner();
}

// 假期生成器
public class VacationBuilder implements Builder {

private Planner planner = new Planner();

@Override
public void buildDay(Date date) {
planner.setDate(date);
}

@Override
public void addHotel(String hotelName) {
planner.setHotelName(hotelName);
}

@Override
public void addReservation(String roomName) {
planner.setRoomName(roomName);
}

@Override
public void addSpecialEvent(String eventName) {
planner.setEventName(eventName);
}

@Override
public void addTicket(String ticketName) {
planner.setTicketName(ticketName);
}

public Planner getPlanner() {
return planner;
}
}

// 客户类
public class Client {

public Planner constructPlanner() {
Builder builder = new VacationBuilder();
builder.buildDay(new Date());
builder.addHotel("room 101");
builder.addReservation("as home");
builder.addSpecialEvent("big bao");
builder.addTicket("one day");
return builder.getPlanner();
}
}

// 测试类
public class Test {
public static void main(String[] args) {
new Test().test();
}

private void test() {
Client client = new Client();
Planner planner = client.constructPlanner();
System.out.println(planner.toString());
}
}


注:

生成器模式与工厂模式相比,采用生成器创建对象的客户,需要具备更多的邻域知识。

经常被用来创建组合模式.

j将一个复杂对象的创建过程封装起来。

允许对象通过多个步骤来创建,并且可以改变过程(这和只有一个过程的工厂不同)。

向客户隐藏产品的内部表现。

产品的实现可以被替换,因为客户只看到一个抽象的接口。

参考文章

Head First 设计模式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息