在编程领域,设计模式是一种被广泛应用的解决方案,它们可以帮助我们解决一些常见的问题,我们将重点讨论一种被称为“建造者模式”的设计模式,建造者模式是一种创建型设计模式,它提供了一种在不指定具体类的情况下创建对象的方法,这种模式通常用于需要创建具有多个属性的对象的情况,特别是当这些属性之间存在一定的依赖关系时。
让我们来了解一下建造者模式的基本概念,建造者模式包含四个角色:抽象建造者(Builder)、具体建造者(ConcreteBuilder)、指挥者(Director)和产品(Product)。
1、抽象建造者(Builder):它是建造者模式的起点,定义了所有建造者所共有的接口和一些抽象方法,这些方法包括两个主要操作:一个是设置产品的某些属性,另一个是调用指挥者的某个方法来完成构建过程。
2、具体建造者(ConcreteBuilder):它是抽象建造者的实现,实现了抽象建造者中定义的所有抽象方法,每个具体建造者对应一个产品类,负责创建该类的对象并设置其属性。
3、指挥者(Director):它是建造者模式的协调者,负责将产品的各个部分传递给具体建造者,并在构建完成后通知具体建造者,指挥者不需要知道产品的具体实现细节,只需要知道产品的接口即可。
4、产品(Product):它是被构建的对象,具有一系列的属性和方法,在建造者模式中,产品类通常是不可变的,这意味着它的属性在构建过程中不会被修改。
我们来看一个简单的建造者模式的例子,假设我们要创建一个表示电脑的程序,它有CPU、内存和硬盘三个部分,我们可以使用建造者模式来实现这个需求。
我们需要定义一个表示电脑的产品类:
public class Computer { private String cpu; private int memory; private String hardDisk; public void setCpu(String cpu) { this.cpu = cpu; } public void setMemory(int memory) { this.memory = memory; } public void setHardDisk(String hardDisk) { this.hardDisk = hardDisk; } @Override public String toString() { return "Computer [cpu=" + cpu + ", memory=" + memory + ", hardDisk=" + hardDisk + "]"; } }
我们需要定义一个表示CPU的具体建造者:
public class CPUBuilder implements Builder { private Computer computer; public CPUBuilder() { computer = new Computer(); } @Override public Builder setCpu(String cpu) { computer.setCpu(cpu); return this; } }
我们需要定义一个表示内存的具体建造者:
public class MemoryBuilder implements Builder { private Computer computer; public MemoryBuilder() { computer = new Computer(); } @Override public Builder setMemory(int memory) { computer.setMemory(memory); return this; } }
我们需要定义一个表示硬盘的具体建造者:
public class HardDiskBuilder implements Builder { private Computer computer; public HardDiskBuilder() { computer = new Computer(); } @Override public Builder setHardDisk(String hardDisk) { computer.setHardDisk(hardDisk); return this; } }
我们可以创建一个指挥者来组装电脑:
public class DirectorImpl implements Director { public Computer construct(Builder builder) throws Exception {} // 实现指挥者的构建逻辑,例如检查输入参数的有效性等,这里省略具体实现。 }