在计算机科学中,设计模式是一种被广泛接受的可重用解决方案,它为特定问题提供了一种模板,这些模式可以帮助我们编写更简洁、更易于理解和维护的代码,我们将重点讨论一个非常有用的设计模式——建造者模式。
建造者模式(Builder Pattern)是一种创建型设计模式,它可以让你在不改变对象结构的情况下构建复杂对象,这种模式的主要思想是将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。
我们来了解一下建造者模式的基本概念:
1、产品(Product):这是一个抽象类,定义了一个产品的接口,产品类中的属性和方法都是抽象的,具体的实现由子类完成。
2、抽象建造者(AbstractBuilder):这是一个抽象类,定义了建造者的基本接口,抽象建造者中的方法都是抽象的,具体的实现由子类完成。
3、具体建造者(ConcreteBuilder):这是一个实现了抽象建造者接口的具体类,具体建造者中的方法都是具体的,用于实现产品类的属性和方法。
4、指挥者(Director):这是一个负责管理建造过程的角色,指挥者知道产品的要求,并调用相应的建造方法将部件组合成一个完整的产品。
下面我们通过一个简单的例子来说明如何使用建造者模式:
假设我们需要创建一个表示电脑的类,它有以下属性:处理器(CPU)、内存(Memory)、硬盘(HardDisk)和显示器(Monitor),我们可以使用建造者模式来实现这个类的创建过程。
我们定义一个表示电脑的产品类:
public class Computer { private String processor; private int memory; private int hardDisk; private String monitor; // 省略构造方法和getter、setter方法 }
我们定义一个抽象建造者类:
public abstract class Builder { protected abstract void buildProcessor(); protected abstract void buildMemory(); protected abstract void buildHardDisk(); protected abstract void buildMonitor(); }
我们实现具体的建造者类:
public class ConcreteBuilder extends Builder { private Computer computer = new Computer(); @Override protected void buildProcessor() { computer.setProcessor("Intel Core i7"); } @Override protected void buildMemory() { computer.setMemory(16); } @Override protected void buildHardDisk() { computer.setHardDisk(1TB); } @Override protected void buildMonitor() { computer.setMonitor("Dell P2419H"); } }
我们定义一个指挥者类:
public class Director { public Computer construct(Builder builder) { builder.buildProcessor(); builder.buildMemory(); builder.buildHardDisk(); builder.buildMonitor(); return builder.getResult(); } }
我们可以通过指挥者类来创建一个电脑对象:
public static void main(String[] args) { Builder builder = new ConcreteBuilder(); // 首先创建一个具体建造者对象 Director director = new Director(); // 然后创建一个指挥者对象,并传入具体建造者对象作为参数 Computer computer = director.construct(builder); // 最后调用指挥者的construct方法来创建电脑对象 }