建造者模式是一种创建型设计模式,它的主要目的是将一个复杂对象的构建过程与其表示相分离,从而可以创建具有不同表示形式的对象。 抽象工厂模式和建造者模式都是创建型设计模式,但是它们的目的和实现方式不同。抽象工厂模式主要用于生产一系列相关或依赖对象,而建造者模式则主要用于构造一个复杂对象。
在编程领域,设计模式是一种被广泛应用的解决问题的方法,它们可以帮助我们更好地理解和组织代码,提高代码的可读性和可维护性,我们将重点讨论一种常用的设计模式——建造者模式(Builder Pattern)。
建造者模式是一种创建型设计模式,它将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示,这种模式的主要目的是为了将一个大型对象的构建与其表示相分离,从而使得客户端代码不需要关心复杂的构建过程,只需要关注简单的接口即可。
下面我们通过一个简单的例子来说明建造者模式的使用,假设我们需要创建一个表示电脑的类,这个类包含CPU、内存和硬盘等属性,我们可以使用建造者模式来实现这个类的创建过程。
我们定义一个表示电脑的抽象类Computer:
Java
public abstract class Computer {
private String cpu;
private int memory;
private String hardDisk;
public abstract void setCpu(String cpu);
public abstract void setMemory(int memory);
public abstract void setHardDisk(String hardDisk);
public String getCpu() {
return cpu;
}
public int getMemory() {
return memory;
}
public String getHardDisk() {
return hardDisk;
}
}
我们创建三个具体的建造者类,分别用于构建CPU、内存和硬盘:
Java
public class CpuBuilder extends Builder {
private Computer computer = new Computer();
@Override
public void buildCpu(String cpu) {
computer.setCpu(cpu);
}
}
public class MemoryBuilder extends Builder {
private Computer computer = new Computer();
@Override
public void buildMemory(int memory) {
computer.setMemory(memory);
}
}
public class HardDiskBuilder extends Builder {
private Computer computer = new Computer();
@Override
public void buildHardDisk(String hardDisk) {
computer.setHardDisk(hardDisk);
}
}
我们创建一个抽象的建造者接口Builder:
Java
public interface Builder {
void buildCpu(String cpu);
void buildMemory(int memory);
void buildHardDisk(String hardDisk);
}
我们在Computer类中添加一个静态方法create,用于创建Computer对象:
Java
public static Computer create(Builder builder) throws Exception {
builder.buildCpu("Intel Core i7");
builder.buildMemory(16);
builder.buildHardDisk("1TB SSD");
return builder.getResult();
}
我们可以通过以下方式使用建造者模式来创建一个电脑对象:
Java
public static void main(String[] args) throws Exception {
ConstructorBuilder constructorBuilder = new ConcreteCpuBuilder(); // CPU构造器实例化对象为ConcreteCpuBuilder类型的对象,这里以构造器的方式实例化对象为例,如果有多个构造器需要按顺序调用的话,也可以使用new操作符进行实例化,new ConcreteCpuBuilder().buildCpu("Intel Core i7").buildMemory(16).buildHardDisk("1TB SSD");//按照顺序依次调用各个建造者的build方法,这样就能够完成对电脑的构建过程了,最终得到的结果就是一台配置为Intel Core i7处理器、16GB内存、1TB硬盘的电脑对象。