建造者模式是一种创建型设计模式,用于构建复杂对象。该模式的主要目标是将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。
通常情况下,一个对象的构建过程涉及多个步骤,而且这些步骤的实现可能因需求的不同而变化。建造者模式通过将构建过程拆分成多个步骤,并提供一个指导者(Director)来协调这些步骤的顺序,从而实现了构建过程的灵活性和可复用性。
建造者模式的主要参与者包括:
以生产电脑为例来演示建造者模式的实现。在下面例子中,我们将电脑抽象为一个复杂对象,它包含了处理器、内存、存储等组件。
首先,定义产品(Computer):
public class Computer {
private String processor;
private String memory;
private String storage;
public void setProcessor(String processor) {
this.processor = processor;
}
public void setMemory(String memory) {
this.memory = memory;
}
public void setStorage(String storage) {
this.storage = storage;
}
@Override
public String toString() {
return "Computer{" +
"processor='" + processor + '\'' +
", memory='" + memory + '\'' +
", storage='" + storage + '\'' +
'}';
}
}
接下来,定义抽象建造者接口(ComputerBuilder):
public interface ComputerBuilder {
void buildProcessor();
void buildMemory();
void buildStorage();
Computer getResult();
}
然后,创建具体建造者实现类(DesktopComputerBuilder、LaptopComputerBuilder):
public class DesktopComputerBuilder implements ComputerBuilder {
private Computer computer = new Computer();
@Override
public void buildProcessor() {
computer.setProcessor("Desktop Processor");
}
@Override
public void buildMemory() {
computer.setMemory("Desktop Memory");
}
@Override
public void buildStorage() {
computer.setStorage("Desktop Storage");
}
@Override
public Computer getResult() {
return computer;
}
}
public class LaptopComputerBuilder implements ComputerBuilder {
private Computer computer = new Computer();
@Override
public void buildProcessor() {
computer.setProcessor("Laptop Processor");
}
@Override
public void buildMemory() {
computer.setMemory("Laptop Memory");
}
@Override
public void buildStorage() {
computer.setStorage("Laptop Storage");
}
@Override
public Computer getResult() {
return computer;
}
}
最后,定义指导者(ComputerDirector):
public class ComputerDirector {
private ComputerBuilder computerBuilder;
public ComputerDirector(ComputerBuilder computerBuilder) {
this.computerBuilder = computerBuilder;
}
public void constructComputer() {
computerBuilder.buildProcessor();
computerBuilder.buildMemory();
computerBuilder.buildStorage();
}
public Computer getComputer() {
return computerBuilder.getResult();
}
}
现在,客户端可以使用建造者模式来构建不同类型的电脑:
public class Client {
public static void main(String[] args) {
ComputerBuilder desktopBuilder = new DesktopComputerBuilder();
ComputerBuilder laptopBuilder = new LaptopComputerBuilder();
ComputerDirector director1 = new ComputerDirector(desktopBuilder);
director1.constructComputer();
Computer desktop = director1.getComputer();
System.out.println("Desktop Computer: " + desktop);
ComputerDirector director2 = new ComputerDirector(laptopBuilder);
director2.constructComputer();
Computer laptop = director2.getComputer();
System.out.println("Laptop Computer: " + laptop);
}
}
这个例子中,通过建造者模式,我们可以根据需要构建不同类型的电脑,而且构建的过程可以在不同的指导者下灵活变化。
在上面的案例中,我们通过建造者模式构建了两种不同类型的电脑:Desktop Computer和Laptop Computer。下面详细说明了构建过程:
总的来说,通过建造者模式,我们能够通过不同的具体建造者实现类来构建不同类型的电脑,而且在构建过程中,可以通过指导者来控制构建的步骤和顺序,实现了构建过程的灵活性和可复用性。这种模式使得客户端代码与具体产品的构建过程解耦,使得系统更易维护和扩展。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。