🍭建造者模式(Builder Pattern)
🍎定义
创建的东西细节复杂,还必须暴露给使用者。屏蔽过程而不屏蔽细节。
产品角色(Product):Phone
抽想建造者(Builder):AbstractPhoneBuilder
具体建造者(ConcreateBuilder):PhoneBuilder
🍔代码实现
public class Phone {
protected String cpu;
protected String mem;
protected String disk;
protected String cam;
// 只保留get方法
public String getCpu() {
return cpu;
}
public String getMem() {
return mem;
}
public String getDisk() {
return disk;
}
public String getCam() {
return cam;
}
@Override
public String toString() {
return "Phone{" +
"cpu='" + cpu + '\'' +
", mem='" + mem + '\'' +
", disk='" + disk + '\'' +
", cam='" + cam + '\'' +
'}';
}
}
/**
* 抽象建造者
*/
public abstract class AbstractBuilder {
Phone phone;
abstract AbstractBuilder customCpu(String cpu);
abstract AbstractBuilder customMem(String mem);
abstract AbstractBuilder customDisk(String disk);
abstract AbstractBuilder customCam(String cam);
Phone getProduct() {
return phone;
}
}
public class XiaoMiBuilder extends AbstractBuilder {
public XiaoMiBuilder() {
phone = new Phone();
}
@Override
AbstractBuilder customCpu(String cpu) {
phone.cpu = cpu;
return this;
}
@Override
AbstractBuilder customMem(String mem) {
phone.mem = mem;
return this;
}
@Override
AbstractBuilder customDisk(String disk) {
phone.disk = disk;
return this;
}
@Override
AbstractBuilder customCam(String cam) {
phone.cam = cam;
return this;
}
}
public class MainTest {
public static void main(String[] args) {
AbstractBuilder builder = new XiaoMiBuilder();
builder.customCam("2亿").customMem("8G").customDisk("512G").customCpu("888");
Phone product = builder.getProduct();
System.out.println(product);
}
}
Phone{cpu='888', mem='8G', disk='512G', cam='2亿'}
🍕应用场景
- 什么场景用到?
- StringBuilder
- Swagger-ApiBuilder
- 快速实现。Lombok-Builder模式