? ? ? ?建造者模式(Builder Pattern)是一种创建型设计模式,它提供了一种将复杂对象的构建过程与它的表示分离的方式。在该模式中,一个复杂的对象被拆分成多个可配置的部分,每个部分可以通过一系列独立的步骤来构造,最后再组合成完整的对象。这种分离使得用户可以灵活地控制构建过程,并且可以使用相同的构造流程来创建不同形式的产品。
buildPartA()
,?buildPartB()
),并包含一个返回最终产品的方法(如?getResult()
)。? 用创造者模式实现计算机高低端配置示例:
package com.jxwifi.kyc.api;
/**
* @author hua
* 产品角色:计算机
*/
public class Computer {
private String cpu;
private int ram;
private int hardDisk;
// 构造器私有化,不允许直接实例化
private Computer(Builder builder) {
this.cpu = builder.cpu;
this.ram = builder.ram;
this.hardDisk = builder.hardDisk;
}
// 获取计算机配置-CPU信息
public String getCpu() {
return cpu;
}
// 获取计算机配置-内存信息
public int getRam() {
return ram;
}
// 获取计算机配置-磁盘信息
public int getHardDisk() {
return hardDisk;
}
/**
* 抽象建造者角色
*/
public static abstract class Builder {
protected String cpu; // CPU型号
protected int ram; // 内存大小
protected int hardDisk; // 硬盘容量
// 设置基本配置的方法
public Builder setCpu(String cpu) {
this.cpu = cpu;
return this;
}
public Builder setRam(int ram) {
this.ram = ram;
return this;
}
public Builder setHardDisk(int hardDisk) {
this.hardDisk = hardDisk;
return this;
}
// 抽象方法,用于创建最终的产品对象
public abstract Computer build();
}
/**
* 具体建造者角色:高端电脑建造者
*/
public static class HighEndComputerBuilder extends Builder {
@Override
public Computer build() {
return new Computer(this);
}
}
/**
* 具体建造者角色:基础办公电脑建造者
*/
public static class BasicOfficeComputerBuilder extends Builder {
@Override
public Computer build() {
// 可以在这里添加额外的基础配置逻辑
return new Computer(this);
}
}
// 使用示例
public static void main(String[] args) {
// 创建一个高端电脑建造者
Builder highBuilder = new HighEndComputerBuilder()
.setCpu("Intel i9")
.setRam(32)
.setHardDisk(1024);
// 使用建造者创建一台高端电脑
Computer highEndComputer = highBuilder.build();
// 输出高端电脑配置
System.out.println("High Computer Configuration:");
System.out.println("CPU: " + highEndComputer.getCpu());
System.out.println("RAM: " + highEndComputer.getRam() + " GB");
System.out.println("Hard Disk: " + highEndComputer.getHardDisk() + " GB");
// 创建一个基础办公电脑建造者并构造电脑
Builder basicBuilder = new BasicOfficeComputerBuilder()
.setCpu("Intel i3")
.setRam(8)
.setHardDisk(500);
Computer basicComputer = basicBuilder.build();
// 输出基础办公电脑配置
System.out.println("Basic Office Computer Configuration:");
System.out.println("CPU: " + basicComputer.getCpu());
System.out.println("RAM: " + basicComputer.getRam() + " GB");
System.out.println("Hard Disk: " + basicComputer.getHardDisk() + " GB");
}
}