• 创建型模式-建造者模式


    1. package per.mjn.pattern.builder;
    2. // 产品对象
    3. public class Bike {
    4. // 车架
    5. private String frame;
    6. // 车座
    7. private String seat;
    8. public String getFrame() {
    9. return frame;
    10. }
    11. public void setFrame(String frame) {
    12. this.frame = frame;
    13. }
    14. public String getSeat() {
    15. return seat;
    16. }
    17. public void setSeat(String seat) {
    18. this.seat = seat;
    19. }
    20. @Override
    21. public String toString() {
    22. return "Bike{" +
    23. "frame='" + frame + '\'' +
    24. ", seat='" + seat + '\'' +
    25. '}';
    26. }
    27. }
    1. package per.mjn.pattern.builder;
    2. public abstract class Builder {
    3. // 声明Bike类型的变量,并进行赋值
    4. protected Bike bike = new Bike();
    5. // 构建车架
    6. public abstract void buildFrame();
    7. // 构建车座
    8. public abstract void buildSeat();
    9. // 构建自行车的方法
    10. public abstract Bike createBike();
    11. }
    1. package per.mjn.pattern.builder;
    2. // 具体的构建者,用来构建摩拜单车对象
    3. public class MobileBuilder extends Builder {
    4. @Override
    5. public void buildFrame() {
    6. bike.setFrame("碳纤维车架");
    7. }
    8. @Override
    9. public void buildSeat() {
    10. bike.setSeat("真皮车座");
    11. }
    12. @Override
    13. public Bike createBike() {
    14. return bike;
    15. }
    16. }
    1. package per.mjn.pattern.builder;
    2. // ofo单车构建者,用来构建ofo单车
    3. public class OfoBuilder extends Builder {
    4. @Override
    5. public void buildFrame() {
    6. bike.setFrame("铝合金车架");
    7. }
    8. @Override
    9. public void buildSeat() {
    10. bike.setSeat("橡胶车座");
    11. }
    12. @Override
    13. public Bike createBike() {
    14. return bike;
    15. }
    16. }
    1. package per.mjn.pattern.builder;
    2. // 指挥者类
    3. public class Director {
    4. // 声明builder类型的变量
    5. private Builder builder;
    6. public Director(Builder builder) {
    7. this.builder = builder;
    8. }
    9. // 组装自行车的功能
    10. public Bike construct() {
    11. builder.buildFrame();
    12. builder.buildSeat();
    13. return builder.createBike();
    14. }
    15. }
    1. package per.mjn.pattern.builder;
    2. public class Client {
    3. public static void main(String[] args) {
    4. // 创建指挥者对象
    5. Director director = new Director(new MobileBuilder());
    6. // 让指挥者指挥装配自行车
    7. Bike bike = director.construct();
    8. System.out.println(bike);
    9. }
    10. }

    实际开发中常使用建造者模式进行对象的创建

    (以链式编程的方式创建对象,实质上是静态内部类在起作用,静态内部类中的方法返回的是本身的类型)

    1. package per.mjn.pattern.builder.demo2;
    2. public class Phone {
    3. private String cpu;
    4. private String screen;
    5. private String memory;
    6. private String mainboard;
    7. // 私有构造方法
    8. private Phone(Builder builder) {
    9. this.cpu = builder.cpu;
    10. this.screen = builder.screen;
    11. this.memory = builder.memory;
    12. this.mainboard = builder.mainboard;
    13. }
    14. @Override
    15. public String toString() {
    16. return "Phone{" +
    17. "cpu='" + cpu + '\'' +
    18. ", screen='" + screen + '\'' +
    19. ", memory='" + memory + '\'' +
    20. ", mainboard='" + mainboard + '\'' +
    21. '}';
    22. }
    23. public static final class Builder {
    24. private String cpu;
    25. private String screen;
    26. private String memory;
    27. private String mainboard;
    28. public Builder cpu(String cpu) {
    29. this.cpu = cpu;
    30. return this;
    31. }
    32. public Builder screen(String screen) {
    33. this.screen = screen;
    34. return this;
    35. }
    36. public Builder memory(String memory) {
    37. this.memory = memory;
    38. return this;
    39. }
    40. public Builder mainboard(String mainboard) {
    41. this.mainboard = mainboard;
    42. return this;
    43. }
    44. // 使用构建者创建Phone对象
    45. public Phone build() {
    46. return new Phone(this);
    47. }
    48. }
    49. }
    1. package per.mjn.pattern.builder.demo2;
    2. public class Client {
    3. public static void main(String[] args) {
    4. // 通过构建者对象获取手机对象
    5. Phone phone = new Phone.Builder()
    6. .cpu("intel")
    7. .screen("三星")
    8. .memory("金士顿")
    9. .mainboard("华硕")
    10. .build();
    11. System.out.println(phone);
    12. }
    13. }

  • 相关阅读:
    HTTP 原理与CND原理
    Eclipse ADT常用快捷键
    【炫丽】从0开始做一个WPF+Blazor对话小程序
    Ubuntu 创建用户
    【软考 系统架构设计师】软件架构设计⑦ 构件与中间件技术
    Java 内存模型
    CSS3 新特性
    SpringBoot中对Spring AOP的实现
    linux内核分析:进程与调度
    Stable Diffusion绘画
  • 原文地址:https://blog.csdn.net/weixin_43844521/article/details/128173266