Java设计模式——生成器模式

Java设计模式之生成器模式

生成器模式(建造者模式):封装一个产品的构造过程,并允许按步骤构造。

使用:

场景:去旅游时先创建好旅游方案,时间项目车票酒店预订等信息,这些都要根据客户需求来创建,所以我们把创建过程封装在对象中,客户调用其生成器构造想要的旅游方案。(类似迭代器思想)

代码:

  • AbstractBuilder 抽象生成者
public abstract class AbstractBuilder {
    public abstract void buildDay(String day);
    public abstract void addHotel(String hotel);
    public abstract void addReservation(String reservation);
    public abstract void addSpecialEvent(String specialEvent);
    public abstract void addTickets(String ticket);
    public abstract Planner getVacationPlanner();
}
  • VacationBuilder 具体生成者
public class VacationBuilder extends AbstractBuilder {
    private String hotel;
    private String day;
    private String ticket;
    private String reservation;
    private String specialEvent;
    public void buildDay(String day) {
        this.day = day;
    }
    public void addHotel(String hotel) {
        this.hotel = hotel;
    }
    public void addReservation(String reservation) {
        this.reservation = reservation;
    }
    public void addSpecialEvent(String specialEvent) {
        this.specialEvent = specialEvent;
    }
    public void addTickets(String ticket) {
        this.ticket = ticket;
    }
    public Planner getVacationPlanner() {
        return new Planner(hotel,day,ticket,reservation,specialEvent);
    }
}
  • Planner 计划方案

    关于lombok注解@AllArgsConstructor将自动创建一个包含所有成员属性的构造函数
    @Data将为你提供getter、setter、construct、toString方法,需要可重写

@AllArgsConstructor
@Data
public class Planner {
    private String hotel;
    private String day;
    private String ticket;
    private String reservation;
    private String specialEvent;
    @Override
    public String toString() {
        return "Planner:\n" +
                "hotel:" + hotel + '\n' +
                "day:" + day + '\n' +
                "ticket:" + ticket + '\n' +
                "reservation:" + reservation + '\n' +
                "specialEvent:" + specialEvent + '\n';
    }
}
  • 测试
public class BuilderTest {
    public static void main(String[] args) {
        AbstractBuilder vacationBuilder = new VacationBuilder();
        vacationBuilder.addHotel("名宿");
        vacationBuilder.addReservation("预定两天");
        vacationBuilder.addSpecialEvent("逛游乐园,游玩海底世界,蹦极");
        vacationBuilder.addTickets("两天后回昆明的票");
        vacationBuilder.buildDay("明天上午10点到");
        Planner plan = vacationBuilder.getVacationPlanner();
        System.out.println(plan);
    }
}

输出:
Planner:
hotel:名宿
day:明天上午10点到
ticket:两天后回昆明的票
reservation:预定两天
specialEvent:逛游乐园,游玩海底世界,蹦极

生成者模式优点:

  • 将一个复杂对象的创建封装,允许有多个步骤
  • 向客户隐藏创建过程
  • 产品创建实现可更改,因为创建只需要一个抽象接口

代码地址:Github生成器模式


Java设计模式|策略模式

Java设计模式|观察者模式

Java设计模式|装饰者模式

Java设计模式|工厂模式

Java设计模式|命令模式

Java设计模式|适配器模式和外观模式

Java设计模式|模板方法模式

Java设计模式|迭代器模式和组合模式

Java设计模式|状态模式

Java设计模式|代理模式

Java设计模式|单例模式

Java设计模式|备忘录模式

Java设计模式|访问者模式

Java设计模式|复合模式

Java设计模式|桥接模式

Java设计模式|生成器模式

Java设计模式|享元模式/蝇量模式

Java设计模式|原型模式

Java设计模式|责任链模式

Java设计模式|中介者模式

  • 本文作者: dzou | 微信:17856530567
  • 本文链接: http://www.dzou.top/post/43e936df.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
  • 并保留本声明和上方二维码。感谢您的阅读和支持!