生成器模式
来源:互联网 发布:淘宝产品被管控下架 编辑:程序博客网 时间:2024/05/17 08:49
生成器模式封装一个产品的构造过程,并允许按照步骤构造
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 设计模式
阅读全文
0 0
- 生成器模式
- 生成器模式
- 生成器模式
- 生成器模式
- 生成器模式
- 生成器模式
- 生成器模式
- 生成器模式
- 生成器模式
- 生成器模式
- 生成器模式
- 生成器模式
- 生成器模式
- 生成器模式
- 生成器模式
- 生成器模式
- 生成器模式
- 创建模式-生成器模式
- jquery实现鼠标滑过炫酷效果
- js中的同步和异步的个人理解
- VS2013 只生成DLL,未生成LIB解决办法
- Linux--RH254---unit 10 firewalld
- spring mvc 使用 @ControllerAdvice 捕获404异常
- 生成器模式
- Kotlin学习之-4.3.4 返回和中止循环
- 6、7、8
- 从高考到程序员
- Latex texstudio+ctex中文解决方案
- 屏幕后处理
- web项目一般结构
- myBatis的mapper映射文件之批量处理
- PHP spvoice