概念:
建造者模式(Builder Pattern)是一种创建型设计模式,用于将复杂对象的构建过程与其表示分离。它允许您逐步构造一个复杂对象,同时保持灵活性和可读性。
特点:
- 将对象的构建过程封装在指导者类中,使得客户端不必知道具体的构建细节。
- 允许通过改变指导者或具体建造者之一来改变最终生成的产品。
- 可以控制生成过程并根据需要进行定制化配置。
优点:
- 提供了更好的控制和灵活性,可以根据需求定制化地创建复杂对象。
- 将构建代码与表示代码分离,使得相同的构建过程可以创建不同表示形式的对象。
- 代码可读性高,易于理解和维护。
缺点:
- 增加了系统中类的数量,在某些情况下可能会增加开发成本。
- 如果产品结构非常简单,则使用该模式可能会显得繁琐。
适用场景:
- 当需要创建具有复杂内部结构且各个部分之间存在依赖关系的对象时,可以使用该模式。
- 当希望通过多个步骤动态地自定义一个对象时,可以使用该模式。
实现方式:
在指导者类中控制构建过程,导者类负责控制整个构建过程。它接收一个具体的建造者对象,并使用该建造者对象来逐步构建复杂对象。
实现原理
- 指导者类持有一个具体的建造者对象。
- 在指导者类中定义一系列方法,用于按照特定顺序调用具体建造者对象的方法来构建复杂对象。
- 客户端通过创建指导者对象并将具体的建造者传入,然后调用指导者的构建方法来启动整个构建过程。
实现代码:
// 产品类
class Product {
private String part1;
private String part2;
public void setPart1(String part1) {
this.part1 = part1;
}
public String getPart1(){
return this.part1;
}
public void setPart2(String part2) {
this.part2 = part2;
}
public String getPart2(){
return this.part2;
}
}
// 抽象Builder接口
interface Builder {
void buildPart1();
void buildPart2();
Product getResult();
}
// 具体Builder实现
class ConcreteBuilder implements Builder{
private Product product;
public ConcreteBuilder() {
product = new Product();
}
public void buildPart1() {
product.setPart1("part 1");
}
public void buildPart2() {
product.setPart2("part 2");
}
public Product getResult(){
return product;
}
}
// 指导者类
class Director {
服务器托管网 private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
public Product construct() {
builder.buildPart1();
builder.buildPart2();
return builder.getResult();
}
}
// 使用示例
public class Main {
public static void main服务器托管网(String[] args) {
ConcreteBuilder concreteBuilder = new ConcreteBuilder();
Director director = new Director(concreteBuilder);
Product product = director.construct();
System.out.println(product.getPart1());
System.out.println(product.getPart2());
}
}
在上述示例中,我们定义了产品类Product
作为最终构建的复杂对象。接着,我们定义了抽象的建造者接口Builder
,其中包含了构建各个部分的方法和获取最终产品的方法。
具体实现类ConcreteBuilder
实现了抽象建造者接口,并提供具体的构建逻辑。指导者类Director
持有一个具体的建造者对象,在其构造函数中传入,并通过调用它来控制整个构件过程。
在客户端代码中,我们创建一个具体生成器对象并将其传递给指导者对象。然后调用指导者对象的construct方法启动整个构件过程,并返回最终生成的产品。
存在的问题:
每次增加新类型或结构变化时都需要修改指导着和具体生成器两个角色,这可能会导致代码的脆弱性。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
相关推荐: springboot web开发静态资源的映射规则
前言 我们之间介绍过SpringBoot自动配置的原理,基本上是如下: xxxxAutoConfiguration:帮我们给容器中自动配置组件; xxxxProperties:配置类来封装配置文件的内容; web开发中都在org.springframework…