建造者模式和抽象工厂模式都是面向对象设计中的创建型模式,但它们解决的问题和应用场景有所不同。建造者模式旨在解决复杂对象的创建问题,特别是当对象的构造过程非常复杂时,可以将对象的构建过程与其表示相分离,可以创建不同的表示。而抽象工厂模式则提供了一种创建一系列相关或相互依赖对象的接口,而无需指定具体类。
在软件工程中,设计模式是一种被广泛接受的、可重用的解决方案,用于解决特定问题,我们将重点讨论一种被称为“建造者模式”的设计模式,这种模式主要用于创建对象,它将对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示,这使得同样的构建过程可以创建不同的表示,从而使得程序更易于扩展和维护。
我们需要了解什么是建造者模式,建造者模式是一种创建型设计模式,它提供了一种顺序一致的构造函数,可以将一个复杂对象的构建与其表示分离开来,这种模式通常用于创建具有多个组成部分的对象,例如汽车、电脑等。
我们将详细解析建造者模式的工作原理。
1、抽象建造者(Builder)
抽象建造者是一个接口,它定义了创建产品的方法,但没有实现这些方法,抽象建造者的主要目的是将具体的建造者与表示关联起来。
public interface Builder { Product build(); }
2、具体建造者(ConcreteBuilder)
具体建造者是实现抽象建造者接口的具体类,它实现了抽象建造者中定义的build()方法,用于创建具体的产品对象。
public class ConcreteBuilder implements Builder { private Product product = new Product(); public void constructPartA() { product.setPartA(); } public void constructPartB() { product.setPartB(); } public void constructPartC() { product.setPartC(); } @Override public Product build() { return product; } }
3、指挥者(Director)
指挥者负责协调具体建造者的工作,它知道如何组合各个部分以创建最终的产品,在建造者模式中,指挥者通常也是一个抽象类,它定义了一个公共的静态方法construct(),用于接收具体建造者的实例,并调用其相应的方法来构建产品。
public abstract class Director { protected Builder builder; public Director(Builder builder) { this.builder = builder; } public void construct() { builder.constructPartA(); builder.constructPartB(); builder.constructPartC(); } }
4、具体指挥者(ConcreteDirector)
具体指挥者是指挥者的实现类,它继承自抽象指挥者类,并实现了其construct()方法,在实际应用中,具体指挥者可以根据需要对指挥者的实现进行定制。
public class ConcreteDirector extends Director { public ConcreteDirector(Builder builder) { super(builder); } @Override public void construct() { builder.constructPartA(); builder.constructPartB(); builder.constructPartC(); } }
5、产品(Product)
产品是一个简单的类,它包含了三个部分(partA、partB、partC),以及一个用于设置这些部分的方法,在实际应用中,产品类可以根据需要进行扩展和修改。
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; } }