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