建造者模式
建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。
文章目录
带指挥者的建造者模式
产品类
//产品类
public class Car {
private String wheel;//轮子
private String engine;//引擎
private String frame;//车架
public String getWheel() { return wheel; }
public void setWheel(String wheel) { this.wheel = wheel; }
public String getEngine() { return engine; }
public void setEngine(String engine) { this.engine = engine; }
public String getFrame() { return frame; }
public void setFrame(String frame) { this.frame = frame; }
@Override
public String toString() {
return "Car{" +
"wheel='" + wheel + '\'' +
", engine='" + engine + '\'' +
", frame='" + frame + '\'' +
'}';
}
}
建造者类
//建造者接口
public interface CarBuilder {
void setWheel();
void setEngine();
void setFrame();
Car build();
}
//建造者实现类
public class AudiCarBuilder implements CarBuilder {
private Car car=new Car();
@Override
public void setWheel() {
car.setWheel("奥迪轮子");
}
@Override
public void setEngine() {
car.setEngine("奥迪轮子");
}
@Override
public void setFrame() {
car.setFrame("奥迪车架");
}
@Override
public Car build() {
return car;
}
}
指挥者类
//指挥者
public class Director {
private CarBuilder builder=null;
public Director(CarBuilder builder) {
this.builder = builder;
}
public Car build(){
builder.setWheel();
builder.setEngine();
builder.setFrame();
return builder.build();
}
}
测试类
//测试类
class Test {
public static void main(String[] args) {
CarBuilder builder=new AudiCarBuilder();
Director director=new Director(builder);
Car car=director.build();
System.out.println(car);
}
}
内部类建造者模式
将建造者类放在产品类中作为静态内部类,并且设定方法返回自身使得建造过程为链式便于使用。
产品类及其内部建造者类
public class Bike {
private String wheel;//轮子
private String frame;//车架
public String getWheel() { return wheel; }
public void setWheel(String wheel) { this.wheel = wheel; }
public String getFrame() { return frame; }
public void setFrame(String frame) { this.frame = frame; }
@Override
public String toString() {
return "Bike{" +"wheel='" + wheel + '\''
+", frame='" + frame + '\'' +'}';
}
public static class BikeBuilder{
private String wheel;//轮子
private String frame;//车架
BikeBuilder setWheel(String wheel){
this.wheel=wheel;
return this;
}
BikeBuilder setFrame(String frame){
this.frame=frame;
return this;
}
Bike build(){
Bike bike=new Bike();
bike.setFrame(frame);
bike.setWheel(wheel);
return bike;
}
}
}
测试类
class Test {
public static void main(String[] args) {
Bike bike= new Bike.BikeBuilder().setFrame("自行车车架A")
.setWheel("山地胎")
.build();
}
}