lengjingbuliaoyidian
文章15
标签7
分类7
建造者模式

建造者模式

建造者模式(Builder Pattern)

  • 概述:主要目的是将一个复杂对象的构建过程与其表示相分离,从而可以创建具有不同表示形式的对象。(使得同样的构造过程可以创建不同的表示)

结构:

建造者模式包含以下几个主要角色:

  1. 抽象建造者(Builder):规定了实现复杂对象的哪些部分的创建,并不设计具体的部件对象的创建。

  2. 具体建造者(Concrete Builder):实现抽象建造者接口,完成复杂产品的各个部件的具体创建方法。在构建过程完成之后,提供产品的实例。

  3. 产品(Product):要构建的复杂对象。产品类通常包含多个部分或属性。

  4. 指导者(Director):负责调用具体建造者的方法来构建产品,指导者并不了解具体的构建过程,只关心产品的构建顺序和方式

-Bike产品.java

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;
}
}
  • 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 {
    @Override
    public void builerFrame() {
    bike.setFrame("摩拜碳钎维车架");
    }

    @Override
    public void builerSeat() {
    bike.setSeat("摩拜真皮车座");

    }

    @Override
    public Bike createBike() {
    return bike;
    }
    }
  • 具体建造者2.java

    public class OfoBuilder extends Builder{
    @Override
    public void builerFrame() {
    bike.setFrame("Ofo铝合金车架");
    }

    @Override
    public void builerSeat() {
    bike.setSeat("Ofo橡皮车座");

    }

    @Override
    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();

    }
  • 总结:

  1. 指挥者用于指导具体构建者如何构建产品,控制调用的先后顺序,并向调用者返回完整的产品类,但是有些情况下需要简化系统结构,就可以把指挥者类和抽象建造者进行合并。
   public  abstract class Builder {
/*
Builder 构造器相当于一个构建成品的骨架蓝图
*/
//声明Bike类型的变量
protected Bike bike = new Bike();

public abstract void builerFrame();

public abstract void builerSeat();

public abstract Bike createBike();

public Bike build(){
this.builerFrame();
this.builerSeat();
return this.createBike();
}
}
  1. 这样做确实简化了系统结构,但是同时家中了抽象建造者类的职责,也不太符合单一职责原则,如果construct过于复杂,建议还是封装到Director中。

使用场景:

  • 需要生成的对象具有复杂的内部结构。
  • 需要生成的对象内部属性相互依赖。

优点

分离构建过程和表示,使得构建过程更加灵活,可以构建不同的表示。
可以更好地控制构建过程,隐藏具体构建细节。
代码复用性高,可以在不同的构建过程中重复使用相同的建造者。

缺点

如果产品的属性较少,建造者模式可能会导致代码冗余。
增加了系统的类和对象数量。

本文作者:冷静不了一点
本文链接:http://example.com/2025/08/09/Java23%E7%A7%8D%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F-%E5%BB%BA%E9%80%A0%E8%80%85%E6%A8%A1%E5%BC%8F/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可