建造者模式是一种创建型的软件设计模式,用于构造相对复杂的对象。它可以将复杂对象的构建与它的表示分离,使得相同的构建过程可以得到不同的表示。如果说工厂模式和抽象工厂模式更注重产品整体,那建造者模式更注重产品的细节。建造者模式和抽象工厂模式的区别在于,抽象工厂模式中有一个抽象工厂类,而建造者模式中没有 。
在软件开发领域,设计模式是一种被广泛应用的解决方案,它们可以帮助开发人员解决常见的编程问题,我们将重点讨论一种名为“建造者模式”的设计模式,建造者模式是一种创建型设计模式,它提供了一种在不直接操作对象构造函数的情况下创建对象的方法,这种模式的主要目的是将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。
让我们来了解一下建造者模式的基本概念,建造者模式包含四个角色:抽象建造者(Builder)、具体建造者(ConcreteBuilder)、指挥者(Director)和产品(Product)。
1、抽象建造者(Builder):定义了一个创建产品的接口,但没有具体实现,它包含了一些用于创建产品的方法,这些方法需要在子类中实现。
public interface Builder { void buildPartA(); void buildPartB(); void buildPartC(); Product getResult(); }
2、具体建造者(ConcreteBuilder):实现了抽象建造者接口的具体类,负责创建产品的各个部分。
public class ConcreteBuilder implements Builder { private Product product = new Product(); @Override public void buildPartA() { product.setPartA("Part A built by ConcreteBuilder"); } @Override public void buildPartB() { product.setPartB("Part B built by ConcreteBuilder"); } @Override public void buildPartC() { product.setPartC("Part C built by ConcreteBuilder"); } @Override public Product getResult() { return product; } }
3、指挥者(Director):负责调用具体建造者的接口方法,从而构建产品,它也负责将构建好的产品传递给指挥者。
public class Director { public void construct(Builder builder) { builder.buildPartA(); builder.buildPartB(); builder.buildPartC(); } }
4、产品(Product):这是一个简单的面向对象的示例,表示要构建的复杂对象,在这个例子中,我们只有一个简单的属性和一个设置属性值的方法,在实际应用中,产品类通常会包含多个属性和方法。
public class Product { private String partA; private String partB; private String partC; public void setPartA(String partA) { this.partA = partA; } public void setPartB(String partB) { this.partB = partB; } public void setPartC(String partC) { this.partC = partC; } }
我们已经了解了建造者模式的基本概念,我们将通过一个实例来演示如何使用建造者模式,假设我们需要创建一个表示电脑的程序,它有三个部分:显示器、处理器和内存,我们可以使用建造者模式来实现这个需求,我们需要定义一个表示显示器的类,然后定义一个表示处理器的类,最后定义一个表示内存的类,这里我们只展示显示器、处理器和内存的部分代码,其他部分类似。