自行车
抽象类构造器和内部类构造器,内部类更加灵活
目录
抽象类构造器
类、建造器、摩托车建造器继承建造器、共享单车建造器继承建造器
自行车类
/**
* @author Dsmash
*/
public class Bike {
private String seat;
private String frame;
public String getSeat() {
return seat;
}
public void setSeat(String seat) {
this.seat = seat;
}
public String getFrame() {
return frame;
}
public void setFrame(String frame) {
this.frame = frame;
}
}
建造器
/**
* @author Dsmash
*/
public abstract class Builder {
//建造自行车
protected Bike bike=new Bike();
public abstract void buildFrame();
public abstract void buildSeat();
public abstract Bike createBike();
}
建造操作类
/**
* @author Dsmash
*/
public class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
public Bike construct() {
builder.buildFrame();
builder.buildSeat();
return builder.createBike();
}
}
自行车建造
/**
* @author Dsmash
*/
public class MobileBuilder extends Builder{
@Override
public void buildFrame() {
bike.setFrame("碳纤维车架");
}
@Override
public void buildSeat() {
bike.setSeat("真皮车座");
}
@Override
public Bike createBike() {
return bike;
}
}
共享单车建造
/**
* @author Dsmash
*/
public class OfoBuilder extends Builder{
@Override
public void buildFrame() {
bike.setFrame("铝合金车架");
}
@Override
public void buildSeat() {
bike.setSeat("塑胶车座");
}
@Override
public Bike createBike() {
return bike;
}
}
构造器测试类
@Test
public void testBuilder1(){
Builder builder=new OfoBuilder();
Director director=new Director(builder);
Bike construct = director.construct();
System.out.println(construct.getFrame());
System.out.println(construct.getSeat());
}
内部类构造器
建造一部手机组件有 cpu 、screen、 memory
手机类嵌套建造器内部类
public class Phone {
private String cpu;
private String screen;
private String memory;
private Phone(Builder builder){
this.cpu= builder.cpu;
this.memory= builder.memory;
this.screen= builder.screen;
}
public static final class Builder{
private String cpu;
private String screen;
private String memory;
public Builder cpu(String cpu) {
this.cpu = cpu;
return this;
}
public Builder screen(String screen) {
this.screen = screen;
return this;
}
public Builder memory(String memory) {
this.memory = memory;
return this;
}
public Phone build(){
return new Phone(this);
}
}
@Override
public String toString() {
return "Phone{" +
"cpu='" + cpu + '\'' +
", screen='" + screen + '\'' +
", memory='" + memory + '\'' +
'}';
}
}
内部类构造器测试
@Test
public void testPhone(){
Phone build = new Phone.Builder()
.cpu("天机")
.memory("金士顿内存")
.screen("三星屏幕")
.build();
System.out.println(build);
}