河北网络推广/大连seo外包平台
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在建造者模式中具有很重要的作用,它用于指导具体构建者如何构建产品,控制调用先后次序,并向调用者返回完整的产品类,但是有些情况下需要简化系统结构,可以把指挥者类和抽象建造者进行结合(把指挥者类的功能集成到抽象建造者类,然后删去指挥者类)
说明: