生成器模式
2017-06-09 15:09
113 查看
生成器模式封装一个产品的构造过程,并允许按照步骤构造
经常被用来创建组合模式.
j将一个复杂对象的创建过程封装起来。
允许对象通过多个步骤来创建,并且可以改变过程(这和只有一个过程的工厂不同)。
向客户隐藏产品的内部表现。
产品的实现可以被替换,因为客户只看到一个抽象的接口。
参考文章
Head First 设计模式
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 设计模式
相关文章推荐
- builder生成器(创建型模式)
- 学习设计模式之生成器(Builder Pattern)模式
- 《Java与模式》学习笔记(8)——序列键生成器与单例及多例模式
- C#面向对象设计模式纵横谈 学习笔记4 Builder 生成器(创建型模式)
- 生成器模式
- 设计模式之三--Builder(生成器)
- Builder生成器模式 (转)
- 创建型模式(二)、BUILDER(生成器)---对象创建型模式
- 设计模式---生成器(C++版) 希望大家顶一下
- 设计模式PHP5实现之----生成器(Builder)
- 设计模式之Builder生成器模式
- 设计模式----Builder(生成器)模式
- Builder生成器(创建型模式)
- 设计模式与泡mm的关系之Builder生成器模式及Builder模式的再思考
- 设计模式之生成器(Builder)----对象创建型模式
- 再次研究设计模式 第二章 生成器
- 我的设计模式之旅(4)――生成器(建造者)模式Builder
- C#面向对象设计模式纵横谈(三)--- Builder 生成器(创建型模式)
- 设计模式之抽象工厂(AbstractFactory)---用抽象工厂实现网页样式生成器
- Builder生成器(创建型设计模式)面向对象设计模式纵横谈讲座笔记之四