1、模式介绍:
建造者模式(Builder Pattern)是一种创建型设计模式,它允许你创建一个复杂对象的表示,同时隐藏了创建细节。该模式将对象的构建过程和表示分离,使得相同的构建过程可以创建不同的表示。
2、应用场景:
创建复杂对象:当需要创建的对象具有复杂的内部结构或需要进行多个步骤的构建时,可以使用建造者模式。
避免构造器参数过多:如果类的构造函数参数过多,可以使用建造者模式构建不同的属性。
创建不同的表示:在不同的情况下,可以通过相同的构建过程创建不同的对象表示。
3、优点:
封装性好:客户端不需要知道产品内部的构建细节,只需关心建造者的接口和产品的组装过程。
灵活性好:可以根据需求选择构建不同的产品。
扩展性好:增加新的建造者无需修改原有代码,符合开闭原则。
4、缺点:
增加了对象的数量:引入了建造者模式后,会增加对象的数量,可能会增加系统的复杂度。
构建过程复杂:对于简单的对象,引入建造者模式可能会增加不必要的复杂性。
5、代码实现:
/**
* 产品类
*
* @author FM_南风
* @date 2024/6/23
*/
@Data
public class Product {
private String productA;
private String productB;
public void show() {
System.out.println("productA: " + productA);
System.out.println("productB: " + productB);
}
}
/**
* 抽象建造者
*
* @author FM_南风
* @date 2024/6/23
*/
public interface Builder {
void buildProductA();
void buildProductB();
Product getResult();
}
/**
* 具体建造者
*
* @author FM_南风
* @date 2024/6/23
*/
public class ConcreteBuilder implements Builder {
private Product product = new Product();
@Override
public void buildProductA() {
product.setProductA("产品A");
}
@Override
public void buildProductB() {
product.setProductB ("产品B");
}
@Override
public Product getResult() {
return product;
}
}
/**
* 指挥者
*
* @author FM_南风
* @date 2024/6/23
*/
public class Director {
public Product construct(Builder builder) {
builder.buildProductA();
builder.buildProductB();
return builder.getResult();
}
}
/**
* 应用
*
* @author FM_南风
* @date 2024/6/23
*/
public class BuilderClient {
public static void main(String[] args) {
Director director = new Director();
Builder builder = new ConcreteBuilder();
Product product = director.construct(builder);
product.show();
}
}