描述
角色
- 产品角色(Product):Phone
- 抽象建造者(Builder):AbstracPhoneBuilder
- 具体建造者(Concrete Builder):PhoneBuilder
- 创建的东西细节复杂,还必须暴露给使用者。屏蔽过程而不屏蔽细节
代码实现
@Datapublic class Phone {private String name;private String cpu;private String price;}
public abstract class PhoneBuilder {Phone phone;private String name;private String cpu;private String price;abstract PhoneBuilder price(String price);abstract PhoneBuilder name(String name);abstract PhoneBuilder cpu(String cpu);abstract Phone createPhone();abstract PhoneBuilder builder();}
public class XiaoMiPhoneBuilder extends PhoneBuilder {@OverridePhoneBuilder price(String price) {this.phone.setPrice(price);return this;}@OverridePhoneBuilder name(String name) {this.phone.setName(name);return this;}@OverridePhoneBuilder cpu(String cpu) {this.phone.setCpu(cpu);return this;}@OverridePhone createPhone() {return phone;}@OverridePhoneBuilder builder() {this.phone = new Phone();return this;}}
测试
public class PhoneTest {public static void main(String[] args) {XiaoMiPhoneBuilder xiaoMiPhoneBuilder = new XiaoMiPhoneBuilder();Phone phone = xiaoMiPhoneBuilder.builder().price("1").name("2").cpu("3").createPhone();System.out.println(phone);}}//输出结果 Phone(name=2, cpu=3, price=1)
应用场景
什么场景用到?
- StringBuilder:append(); 给谁append呢?
- Swagger-ApiBuilder:
- 快速实现。Lombok-Builder模式 ……
编写代码的时候使用到了设计模式。类+模式
- xxxFactory
xxxTemplate - xxxBuilder
- xxxFacede
- ……
