1. 建造者模式
1.1 引入
1.2 定义
1.3 结构
1.3.1 典型的复杂对象类代码
1.3.2 典型的抽象建造者类代码
1.3.3 典型的具体建造者类代码
1.3.4 典型的指挥者类代码
1.4 实例: 创建共享单车
创建共享单车:
1.4.1 Bike 自行车类:产品类
package com.tian.pattern.builder.demo1;
/**
* 自行车类:产品类
*/
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;
}
}
1.4.2 Builder 建造者类:抽象建造者类
package com.tian.pattern.builder.demo1;
/**
* 建造者类:抽象建造者类
*/
public abstract class Builder {
//声明Bike类型的变量,并进行赋值
protected Bike bike = new Bike();
public abstract void buildFrame();
public abstract void buildSeat();
//构建自行车的方法
public abstract Bike createBike();
}
1.4.3 MobileBuilder 摩拜单车建造者类:具体建造者类
package com.tian.pattern.builder.demo1;
/**
* MobileBuilder 摩拜单车建造者类:具体建造者类
*/
public class MobileBuilder extends Builder {
public void buildFrame() {
bike.setFrame("碳纤维车架");
}
public void buildSeat() {
bike.setSeat("真皮车座");
}
public Bike createBike() {
return bike;
}
}
1.4.4 OfoBuilder ofo单车建造者类:具体建造者类
package com.tian.pattern.builder.demo1;
/**
* OfoBuilder ofo单车建造者类:具体建造者类
*/
public class OfoBuilder extends Builder {
public void buildFrame() {
bike.setFrame("铝合金车架");
}
public void buildSeat() {
bike.setSeat("橡胶车座");
}
public Bike createBike() {
return bike;
}
}
1.4.5 Director 指挥者类
package com.tian.pattern.builder.demo1;
/**
* 指挥者类
*/
public class Director {
//声明builder类型的变量
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
//组装自行车的功能
public Bike construct() {
builder.buildFrame();
builder.buildSeat();
return builder.createBike();
}
}
1.4.6 Client 客户端类(测试类)
package com.tian.pattern.builder.demo1;
/**
* 客户端类(测试类)
*/
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());
}
}
1.4.7 运行结果
1.5 可以简化系统结构,可以把指挥者类和抽象建造者进行结合
上面示例是 Builder模式的常规用法,指挥者类 Director在建造者模式中具有很重要的作用,它用于指导具体构建者如何构建产品,控制调用先后次序,并向调用者返回完整的产品类,但是有些情况下需要简化系统结构,可以把指挥者类和抽象建造者进行结合(把指挥者类的功能集成到抽象建造者类,然后删去指挥者类)
说明: