这个模式适用于:某个对象的构建过程复杂的情况。
自行车类
package com.example.demo.designPatterns.builder;
/**
* @version v1.0
* @ClassName: Bike
* @Description: 产品对象
* @Author: 黑马程序员
*/
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;
}
}
建造者接口
package com.example.demo.designPatterns.builder;
/**
* @version v1.0
* @ClassName: Builder
* @Description: TODO(一句话描述该类的功能)
* @Author: 黑马程序员
*/
public interface Builder {
public void buildFrame();
public void buildSeat();
//构建自行车的方法
public Bike createBike();
}
摩拜建造者
package com.example.demo.designPatterns.builder;
/**
* @version v1.0
* @ClassName: MobileBuilder
* @Description: 具体的构建者,用来构建摩拜单车对象
* @Author: 黑马程序员
*/
public class MobileBuilder implements Builder {
Bike bike = new Bike();
public void buildFrame() {
bike.setFrame("碳纤维车架");
}
public void buildSeat() {
bike.setSeat("真皮车座");
}
public Bike createBike() {
return bike;
}
}
ofo建造者
package com.example.demo.designPatterns.builder;
/**
* @version v1.0
* @ClassName: OfoBuilder
* @Description: ofo单车构建者,用来构建ofo单车
* @Author: 黑马程序员
*/
public class OfoBuilder implements Builder {
Bike bike = new Bike();
public void buildFrame() {
bike.setFrame("铝合金车架");
}
public void buildSeat() {
bike.setSeat("橡胶车座");
}
public Bike createBike() {
return bike;
}
}
指挥者
package com.example.demo.designPatterns.builder;
/**
* @version v1.0
* @ClassName: Director
* @Description: 指挥者类
* @Author: 黑马程序员
*/
public class Director {
//声明builder类型的变量
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
//组装自行车的功能
public Bike construct() {
builder.buildFrame();
builder.buildSeat();
return builder.createBike();
}
}
客户端
package com.example.demo.designPatterns.builder;
/**
* @version v1.0
* @ClassName: Client
* @Description: TODO(一句话描述该类的功能)
* @Author: 黑马程序员
*/
public class Client {
public static void main(String[] args) {
//创建指挥者对象
Director director = new Director(new MobileBuilder());
//让指挥者只会组装自行车
Bike bike = director.construct();
System.out.println(bike.getFrame());
System.out.println(bike.getSeat());
}
}