生成器模式

来源:互联网 发布:淘宝产品被管控下架 编辑:程序博客网 时间: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());    }}

注:

  1. 生成器模式与工厂模式相比,采用生成器创建对象的客户,需要具备更多的邻域知识。
  2. 经常被用来创建组合模式.
  3. j将一个复杂对象的创建过程封装起来。
  4. 允许对象通过多个步骤来创建,并且可以改变过程(这和只有一个过程的工厂不同)。
  5. 向客户隐藏产品的内部表现。
  6. 产品的实现可以被替换,因为客户只看到一个抽象的接口。

参考文章
Head First 设计模式

原创粉丝点击