建造者模式是一种创建型设计模式,它将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示(依赖倒转)。建造者模式的优点有:封装性好,创建和使用分离;扩展性好,建造类之间相互独立,在一定程度上解耦。缺点有:增加类数量,产生多余的 Builder 对象;内部修改困难,如果产品内部发生变化,建造者也要相应修改 。
在计算机科学中,设计模式是一种被广泛使用的解决方案,用于解决特定问题,它们提供了一种可重用的代码模板,可以帮助开发人员更有效地编写代码,我们将重点讨论一种名为“建造者模式”的设计模式。
建造者模式(Builder Pattern)是一种创建型设计模式,它提供了一种将一个复杂对象的构建与其表示分离的方法,这种模式的主要思想是将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示,这有助于提高代码的可读性和可维护性。
建造者模式的主要角色有以下几个:
1、产品(Product):这是一个抽象类,定义了一个产品的接口,产品类包含一个抽象方法build()
,用于生成产品的具体实现,具体的产品类需要继承自产品类,并实现build()
方法。
2、抽象建造者(AbstractBuilder):这是一个抽象类,定义了一个建造者的基本接口,抽象建造者类包含一个抽象方法build()
,用于生成产品的具体实现,具体的建造者类需要继承自抽象建造者类,并实现build()
方法,抽象建造者类还需要提供一个构造函数,用于接收产品对象和可选的建造者列表。
3、具体建造者(ConcreteBuilder):这是一个具体类,实现了抽象建造者类的基本接口,具体建造者类需要继承自抽象建造者类,并实现build()
方法,具体建造者类还需要提供一个构造函数,用于接收产品对象和可选的建造者列表。
4、指挥者(Director):这是一个接口,定义了一个指挥者的通用行为,指挥者类包含一个方法construct()
,用于接收具体建造者对象,并调用其build()
方法来生成产品对象,指挥者类不需要实现任何方法。
下面是一个简单的建造者模式示例:
// 产品接口 interface Product { void show(); } // 具体产品A class ConcreteProductA implements Product { @Override public void show() { System.out.println("生产产品A"); } } // 具体产品B class ConcreteProductB implements Product { @Override public void show() { System.out.println("生产产品B"); } } // 抽象建造者A abstract class AbstractBuilder { protected Product product; public AbstractBuilder(Product product) { this.product = product; } public abstract void buildPartA(); public abstract void buildPartB(); public abstract Product getResult(); } // 具体建造者A1 class ConcreteBuilderA1 extends AbstractBuilder { public ConcreteBuilderA1(Product product) { super(product); } @Override public void buildPartA() { System.out.println("构建部件A1"); } @Override public void buildPartB() { System.out.println("构建部件B1"); } @Override public Product getResult() { return product; // 这里省略了对product的修改操作,实际情况下应该对product进行修改操作后再返回结果 } } // 具体建造者A2 extends ConcreteBuilderA1,同样省略了对product的修改操作,实际情况下应该对product进行修改操作后再返回结果,同理,也可以为产品B创建类似的具体建造者类。