建造者模式(Builder Pattern)
- 概述:主要目的是将一个复杂对象的构建过程与其表示相分离,从而可以创建具有不同表示形式的对象。(使得同样的构造过程可以创建不同的表示)
结构:
建造者模式包含以下几个主要角色:
抽象建造者(Builder):规定了实现复杂对象的哪些部分的创建,并不设计具体的部件对象的创建。
具体建造者(Concrete Builder):实现抽象建造者接口,完成复杂产品的各个部件的具体创建方法。在构建过程完成之后,提供产品的实例。
产品(Product):要构建的复杂对象。产品类通常包含多个部分或属性。
指导者(Director):负责调用具体建造者的方法来构建产品,指导者并不了解具体的构建过程,只关心产品的构建顺序和方式
-Bike产品.java
public class Bike{ |
Builder抽象建造者.java
public abstract class Builder{
protected Bike bike=new Bike();
public abstract void buildFrame();
public abstract void buildSeat();
//返回建造产品
public abstract Bike createBike();
}具体建造者1.java
public class MobikeBuider extends Builder {
public void builerFrame() {
bike.setFrame("摩拜碳钎维车架");
}
public void builerSeat() {
bike.setSeat("摩拜真皮车座");
}
public Bike createBike() {
return bike;
}
}具体建造者2.java
public class OfoBuilder extends Builder{
public void builerFrame() {
bike.setFrame("Ofo铝合金车架");
}
public void builerSeat() {
bike.setSeat("Ofo橡皮车座");
}
public Bike createBike() {
return bike;
}
}指导者(Director).java
private Builder builder;
public Direactor(Builder builder){
this.builder=builder;
}
public Bike construct(){
builder.buildFrame();
builder.buildSeat();
return builder.createBike();
}总结:
- 指挥者用于指导具体构建者如何构建产品,控制调用的先后顺序,并向调用者返回完整的产品类,但是有些情况下需要简化系统结构,就可以把指挥者类和抽象建造者进行合并。
public abstract class Builder { |
- 这样做确实简化了系统结构,但是同时家中了抽象建造者类的职责,也不太符合单一职责原则,如果construct过于复杂,建议还是封装到Director中。
使用场景:
- 需要生成的对象具有复杂的内部结构。
- 需要生成的对象内部属性相互依赖。
优点
分离构建过程和表示,使得构建过程更加灵活,可以构建不同的表示。
可以更好地控制构建过程,隐藏具体构建细节。
代码复用性高,可以在不同的构建过程中重复使用相同的建造者。
缺点
如果产品的属性较少,建造者模式可能会导致代码冗余。
增加了系统的类和对象数量。