建造者模式是一种创建型设计模式,它的主要目的是将一个复杂对象的构建过程与其表示相分离,从而可以创建具有不同表示形式的对象。 抽象工厂模式和建造者模式都是创建型设计模式,但是它们的目的和实现方式不同。抽象工厂模式主要用于生产一系列相关或依赖对象,而建造者模式则主要用于构造一个复杂对象。
在编程领域,设计模式是一种被广泛应用的解决问题的方法,它们可以帮助我们更好地理解和组织代码,提高代码的可读性和可维护性,我们将重点讨论一种常用的设计模式——建造者模式(Builder Pattern)。
建造者模式是一种创建型设计模式,它将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示,这种模式的主要目的是为了将一个大型对象的构建与其表示相分离,从而使得客户端代码不需要关心复杂的构建过程,只需要关注简单的接口即可。
下面我们通过一个简单的例子来说明建造者模式的使用,假设我们需要创建一个表示电脑的类,这个类包含CPU、内存和硬盘等属性,我们可以使用建造者模式来实现这个类的创建过程。
我们定义一个表示电脑的抽象类Computer:
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、内存和硬盘:
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:
public interface Builder { void buildCpu(String cpu); void buildMemory(int memory); void buildHardDisk(String hardDisk); }
我们在Computer类中添加一个静态方法create,用于创建Computer对象:
public static Computer create(Builder builder) throws Exception { builder.buildCpu("Intel Core i7"); builder.buildMemory(16); builder.buildHardDisk("1TB SSD"); return builder.getResult(); }
我们可以通过以下方式使用建造者模式来创建一个电脑对象:
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硬盘的电脑对象。