本文共 1931 字,大约阅读时间需要 6 分钟。
当我们谈论软件设计模式时,建造者模式(Builder Pattern)无疑是一个非常重要且常用的模式。它的核心思想是将一个对象的构造过程与其表示分离开来,使得可以通过不同的建造者,为同一个类创建不同的表示形式。这种方法特别适用于需要复杂构造过程且产品组成部分相对稳定的场景。
建造者模式的优点在于可以实现高内聚低耦合。通过将构造逻辑封装在建造者对象中,我们可以在不影响产品的部分实现构造过程的不同之处进行变更和扩展。这种设计方式可以降低代码的复杂度,使得系统更易于维护。
然而,建造者模式也有其缺点。维护成本较高,因为不仅需要管理多个建造者类,还需要确保产物的一致性和完整性。同时,这种模式对于简单对象的构造可能显得有些过度,有时候直接使用简单的工厂模式可能会更为高效。
这种设计模式特别适用于需要多种构造方式或复杂构造过程,但产品本身组成部分不变的场景。例如,当我们需要构建一个包含多个组件的复杂对象时,建造者模式可以帮助我们将每个组件的构建过程独立出来,使得系统结构更清晰,灵活性更高。
在建造者模式的应用中,主要涉及以下几个角色:
例如,假设我们需要构建一个汽车,汽车的构造通常包括发动机、轮胎等部件。我们可以通过定义不同的建造者为每个部件提供具体的构造实现,而产品类则负责管理这些部件的组合。这样一来,我们可以轻松地通过延伸建造者类来支持新的车辆类型或部件组合。
以下是一个简单的汽车构造例子:
public class Car { private String engine; private String wheel; public String info() { return engine + wheel; }}
抽象建造者:
public abstract class Manufacturer { protected Car car = new Car(); public abstract void setEngine(); public abstract void setWheel(); public Car carOne() { return car; }}
具体建造者:
public class HzManufacturer extends Manufacturer { @Override public void setEngine() { car.setEngine("宝马发动机"); } @Override public void setWheel() { car.setWheel("宝马轮胎"); }}
指挥者:
@Data@AllArgsConstructorpublic class CarAgentFactory { private Manufacturer manufacturer; public Car carOne() { manufacturer.setEngine(); manufacturer.setWheel(); return manufacturer.carOne(); }}
测试类:
public class BuilderTest { public static void main(String[] args) { CarAgentFactory carAgentFactory = new CarAgentFactory(new HzManufacturer()); Car car = carAgentFactory.carOne(); System.out.println(car.info()); }}
通过以上代码,我们可以看到建造者模式的核心思想:将复杂对象的构造过程分解为多个步骤,并通过不同建造者实现不同的构造逻辑,从而使系统具有更高的灵活性和可扩展性。
转载地址:http://cvviz.baihongyu.com/