建造者模式 Idea

528 次浏览次阅读
没有评论

建造者模式 Builder

指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示 (表示好特么抽象,看不懂)

使用场景

当一个类的构造函数参数个数超过 4 个,而且这些参数有些是可选的参数,考虑使用构造者模式(解决的问题,知道什么时候使用)

以房间为例

房间类

package com.learn.Builder;

public class Room {
    private final String bed;// 床 必须
    private final String desk;// 梳妆台 必须
    private final String wardrobe;// 衣柜 必须
    private final String cup;// 杯子
    private final String book;// 书

    private Room(Builder builder){
        this.bed = builder.bed;
        this.desk = builder.desk;
        this.wardrobe = builder.wardrobe;
        this.cup = builder.cup;
        this.book = builder.book;
    }
    public static class Builder{
        private String bed;// 床 必须
        private String desk;// 梳妆台 必须
        private String wardrobe;// 衣柜 必须
        private String cup;// 杯子 可选
        private String book;// 书 可选

        public Builder(String bed,String desk, String wardrobe){
            this.bed = bed;
            this.desk = desk;
            this.wardrobe = wardrobe;
        }

        public Builder setCup(String cup) {
            this.cup = cup;
            return this;
        }

        public Builder setBook(String book) {
            this.book = book;
            return this;
        }

        public Room build(){return new Room(this);
        }
    }
}

客户端

package com.learn.Builder;

public class Client {public static void main(String[] args) {Room room = new Room.Builder(" 双人床 ", " 书窗台 ", " 大衣柜 ")
                .setCup(" 马克杯 ")
                .setBook(" 活着 ")
                .build();}
}
  • 在 Room 类中创建一个静态内部类 Builder, 然后将 Room 中的参数都复制到 Builder 类中
  • 在 Room 中创建一个 private 的构造函数,参数为 Builder 类型
  • 在 Builder 中创建一个 public 的构造函数,参数为 Room 类中必填的那些参数,bed、desk、wardrobe
  • 在 Builder 中创建设置函数,对 Room 中那些可选参数进行赋值,返回值为 Builder 类型的实例
  • 在 Builder 中创建一个 build() 方法,在其中构建 Computer 的实例并返回
正文完
 0
评论(没有评论)