全网最简单的Java设计模式【八】建造者模式-实战中最常用的设计模式之一

遇见即是缘分,关注🌟、点赞👍、收藏📚,让这份美好延续下去!

🌟 更多技术管理学习路径 请关注 【技术管理修行】

一、引言

建造者模式(Builder Pattern)是一种创建型设计模式,用来将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示形式。该模式特别适用于创建那些具有多个组成部分且构建步骤固定的复杂对象。在Java中,建造者模式通过定义一系列的构建步骤来逐步构造复杂对象,提高了代码的灵活性和可维护性。

二、建造者模式的核心角色

建造者模式主要包含以下几个角色:

  • 产品(Product):表示正在构建的复杂对象。它由多个部分组成,这些部分可能具有不同的特性和属性。
  • 抽象建造者(Abstract Builder):定义了构建产品所需的各个步骤的抽象接口。每个步骤都有具体的实现方法,用于构建产品的不同部分。
  • 具体建造者(Concrete Builder):实现了抽象建造者接口,负责实际构建产品的各个部分。具体建造者通常具有一个内部变量来保存当前产品的状态。
  • 指挥者(Director):负责按特定顺序调用具体建造者的方法,以完成产品的构建过程。指挥者知道构建者应该如何构建产品,但不关心具体的构建细节。

三、Java示例

以下是一个使用Java实现的建造者模式示例,该示例模拟构建一个复杂的产品—— Computer(计算机)。

1. 定义产品类(Product)

首先,我们定义一个 Computer 类,代表被构建的复杂对象。

package java_mode_08;
/**
 * 
 * @Description: 全网最简单的Java设计模式【八】建造者模式-实战中最常用的设计模式之一
 *
 * @author: C
 *
 * @date: 2024年8月9日
 *
 */
public class Computer {  
    
	private String cpu;  
    private String ram;  
    private String hardDisk;  
    
    // 省略getter和setter方法
  
    @Override  
    public String toString() {  
        return "Computer{" +  
                "cpu='" + cpu + '\'' +  
                ", ram='" + ram + '\'' +  
                ", hardDisk='" + hardDisk + '\'' +  
                '}';  
    }  
}

2. 定义抽象建造者接口(Abstract Builder)

接下来,我们定义一个抽象建造者接口,包含构建电脑各部分的抽象方法。

package java_mode_08;

public interface ComputerBuilder {  
   
	ComputerBuilder setCpu(String cpu);  
    ComputerBuilder setRam(String ram);  
    ComputerBuilder setHardDisk(String hardDisk);  
    Computer build();  
    
}

3. 实现具体建造者(Concrete Builder)

然后,我们实现具体建造者类,它实现了 ComputerBuilder 接口,并持有 Computer 实例来逐步构建电脑。

package java_mode_08;

public class DesktopBuilder implements ComputerBuilder {  
    private Computer computer = new Computer();  
  
    @Override  
    public ComputerBuilder setCpu(String cpu) {  
        computer.setCpu(cpu);  
        return this; // 支持链式调用  
    }  
  
    @Override  
    public ComputerBuilder setRam(String ram) {  
        computer.setRam(ram);  
        return this;  
    }  
  
    @Override  
    public ComputerBuilder setHardDisk(String hardDisk) {  
        computer.setHardDisk(hardDisk);  
        return this;  
    }  
  
    @Override  
    public Computer build() {  
        return computer;  
    }  
}

4. 定义指挥者类(Director)

指挥者类负责控制构建过程,它按照预定顺序调用建造者的方法。

package java_mode_08;

public class ComputerDirector {  
	
    private ComputerBuilder builder;  
  
    public ComputerDirector(ComputerBuilder builder) {  
        this.builder = builder;  
    }  
  
    public Computer construct() {  
        builder.setCpu("Intel Core i7")  
               .setRam("16GB DDR4")  
               .setHardDisk("1TB SSD");  
        return builder.build();  
    }  
}

5. 客户端代码(Client)

最后,客户端代码通过指挥者类来构建产品。

package java_mode_08;

public class Client {  
	
    public static void main(String[] args) {  
    	
        ComputerBuilder builder = new DesktopBuilder();  
        
        ComputerDirector director = new ComputerDirector(builder);  
  
        Computer computer = director.construct(); 
        
        System.out.println(computer);  
    }  
    
}

6. 代码运行结果

Computer{cpu='Intel Core i7', ram='16GB DDR4', hardDisk='1TB SSD'}

四、建造者模式分析

封装性:

Computer 示例中,ComputerBuilder 类封装了 Computer 对象的构建过程。客户端不需要知道 Computer 对象是如何一步步构建出来的,只需通过 ComputerBuilder 提供的接口来设置属性并获取最终的对象。

灵活性:

客户端可以根据需要选择不同的 ComputerBuilder 来构建不同配置的 Computer 对象。例如,可以创建一个 GamingComputerBuilder 来构建适合游戏的电脑,或者创建一个 OfficeComputerBuilder 来构建适合办公的电脑。而不需要修改 Computer 类本身。这使得系统更加易于扩展。

五、结束语

建造者模式非常适合用于创建复杂对象,特别是当对象的构建过程需要逐步细化,或者需要创建具有不同配置的同类对象时。它通过将构建过程与表示分离,提高了代码的可读性和可维护性。然而,它也有一些局限性,比如在产品内部结构变化频繁的情况下,可能会增加维护的复杂性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值