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