建造者模式 Idea

作者: 太阳上的雨天 分类: Java,Java,设计模式 发布时间: 2022-02-08 16:22

建造者模式 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的实例并返回

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注