生成器模式

生成器模式封装一个产品的构造过程,并允许按照步骤构造

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 设计模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值