黑马程序员Java设计模式详解,全网最全23种Java设计模式(图解+框架源码分析+实战)_哔哩哔哩_bilibili
建造者抽象类
public abstract class Builder {
protected Bike bike = new Bike();
public abstract void buildFrame();
public abstract void buildSeat();
public abstract Bike createBike();
public Bike construct(){
this.buildFrame();
this.buildSeat();
return this.createBike();
}
}
具体的建造者类
public class MobileBuilder extends Builder{
public void buildFrame() {
bike.setFrame("碳纤维车架");
}
public void buildSeat() {
bike.setSeat("真皮车座");
}
public Bike createBike() {
return bike;
}
}
public class OfoBuilder extends Builder{
public void buildFrame() {
bike.setFrame("铝合金车架");
}
public void buildSeat() {
bike.setSeat("橡胶车座");
}
public Bike createBike() {
return bike;
}
}
产品类
public class Bike {
private String frame;
private String seat;
public String getFrame() {
return frame;
}
public void setFrame(String frame) {
this.frame = frame;
}
public String getSeat() {
return seat;
}
public void setSeat(String seat) {
this.seat = seat;
}
}
客户类(测试类)
public class Cilent {
@Test
public void test(){
Builder builder = new MobileBuilder();
Bike bike = builder.construct();
System.out.println(bike.getFrame());
System.out.println(bike.getSeat());
}
}
使用构造者模式构造复杂对象
public class Phone {
private String cpu;
private String screen;
private String memory;
private String mainboard;
private Phone(PhoneBuilder builder){
this.cpu = builder.cpu;
this.screen = builder.screen;
this.memory = builder.memory;
this.mainboard = builder.mainboard;
}
@Override
public String toString() {
return "Phone{" +
"cpu='" + cpu + '\'' +
", screen='" + screen + '\'' +
", memory='" + memory + '\'' +
", mainboard='" + mainboard + '\'' +
'}';
}
public static final class PhoneBuilder{
private String cpu;
private String screen;
private String memory;
private String mainboard;
public PhoneBuilder cpu(String cpu){
this.cpu = cpu;
return this;
}
public PhoneBuilder screen(String screen){
this.screen = screen;
return this;
}
public PhoneBuilder memory(String memory){
this.memory = memory;
return this;
}
public PhoneBuilder mainboard(String mainboard){
this.mainboard = mainboard;
return this;
}
public Phone build(){
return new Phone(this);
}
}
}
public class Cilent {
@Test
public void testPhone(){
Phone phone = new Phone.PhoneBuilder().
cpu("Intel").
screen("京东方").
memory("金士顿").
mainboard("微星").build();
System.out.println(phone);
}
}