
- package per.mjn.pattern.builder;
-
- // 产品对象
- 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;
- }
-
- @Override
- public String toString() {
- return "Bike{" +
- "frame='" + frame + '\'' +
- ", seat='" + seat + '\'' +
- '}';
- }
- }
- package per.mjn.pattern.builder;
-
- public abstract class Builder {
-
- // 声明Bike类型的变量,并进行赋值
- protected Bike bike = new Bike();
-
- // 构建车架
- public abstract void buildFrame();
-
- // 构建车座
- public abstract void buildSeat();
-
- // 构建自行车的方法
- public abstract Bike createBike();
- }
- package per.mjn.pattern.builder;
-
- // 具体的构建者,用来构建摩拜单车对象
- public class MobileBuilder extends Builder {
-
- @Override
- public void buildFrame() {
- bike.setFrame("碳纤维车架");
- }
-
- @Override
- public void buildSeat() {
- bike.setSeat("真皮车座");
- }
-
- @Override
- public Bike createBike() {
- return bike;
- }
- }
- package per.mjn.pattern.builder;
-
- // ofo单车构建者,用来构建ofo单车
- public class OfoBuilder extends Builder {
-
- @Override
- public void buildFrame() {
- bike.setFrame("铝合金车架");
- }
-
- @Override
- public void buildSeat() {
- bike.setSeat("橡胶车座");
- }
-
- @Override
- public Bike createBike() {
- return bike;
- }
- }
- package per.mjn.pattern.builder;
-
- // 指挥者类
- 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 per.mjn.pattern.builder;
-
- public class Client {
-
- public static void main(String[] args) {
- // 创建指挥者对象
- Director director = new Director(new MobileBuilder());
-
- // 让指挥者指挥装配自行车
- Bike bike = director.construct();
-
- System.out.println(bike);
- }
- }

实际开发中常使用建造者模式进行对象的创建
(以链式编程的方式创建对象,实质上是静态内部类在起作用,静态内部类中的方法返回的是本身的类型)
- package per.mjn.pattern.builder.demo2;
-
- public class Phone {
- private String cpu;
- private String screen;
- private String memory;
- private String mainboard;
-
- // 私有构造方法
- private Phone(Builder 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 Builder {
- private String cpu;
- private String screen;
- private String memory;
- private String mainboard;
-
- 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 Builder mainboard(String mainboard) {
- this.mainboard = mainboard;
- return this;
- }
-
- // 使用构建者创建Phone对象
- public Phone build() {
- return new Phone(this);
- }
- }
- }
- package per.mjn.pattern.builder.demo2;
-
- public class Client {
-
- public static void main(String[] args) {
- // 通过构建者对象获取手机对象
- Phone phone = new Phone.Builder()
- .cpu("intel")
- .screen("三星")
- .memory("金士顿")
- .mainboard("华硕")
- .build();
-
- System.out.println(phone);
- }
- }
