生成器模式的结构
生成器(Builder):提供构建产品各部分的方法,一般是一步一步构建复杂对象的各个部分。
具体生成器(Concrete Builder):实现生成器接口,构建和装配具体的产品部件。
产品(Product):最终生成的复杂对象。
指挥者(Director):负责安排构建步骤,控制生成器构建对象的过程(可选)。
客户端(Client):通过生成器创建对象。
生成器模式的代码示例
假设我们需要创建一个 Computer 对象,该对象包含一些可选的属性,如 CPU、RAM、Storage 等。使用生成器模式,可以让客户端方便地创建带有不同属性的 Computer 实例。
示例:
java
复制代码
// 产品类:Computer
class Computer {
// 必选参数
private String CPU;
private String RAM;
// 可选参数
private int storage;
private boolean hasGraphicsCard;
private String operatingSystem;
// 私有构造函数,防止直接实例化
private Computer(ComputerBuilder builder) {
this.CPU = builder.CPU;
this.RAM = builder.RAM;
this.storage = builder.storage;
this.hasGraphicsCard = builder.hasGraphicsCard;
this.operatingSystem = builder.operatingSystem;
}
// 产品的展示方法
public String toString() {
return "Computer [CPU=" + CPU + ", RAM=" + RAM + ", Storage=" + storage +
"GB, GraphicsCard=" + (hasGraphicsCard ? "Yes" : "No") +
", OS=" + operatingSystem + "]";
}
// 静态内部类:ComputerBuilder
public static class ComputerBuilder {
// 必选参数
private String CPU;
private String RAM;
// 可选参数
private int storage = 256; // 默认256GB
private boolean hasGraphicsCard = false; // 默认无显卡
private String operatingSystem = "Linux"; // 默认操作系统为Linux
// 构造函数:必须传入必选参数
public ComputerBuilder(String CPU, String RAM) {
this.CPU = CPU;
this.RAM = RAM;
}
// 可选参数的设置方法
public ComputerBuilder setStorage(int storage) {
this.storage = storage;
return this;
}
public ComputerBuilder setGraphicsCard(boolean hasGraphicsCard) {
this.hasGraphicsCard = hasGraphicsCard;
return this;
}
public ComputerBuilder setOperatingSystem(String operatingSystem) {
this.operatingSystem = operatingSystem;
return this;
}
// 构建方法:返回最终产品
public Computer build() {
return new Computer(this);
}
}
}
// 测试类
public class Main {
public static void main(String[] args) {
// 使用生成器模式构建不同的Computer对象
Computer computer1 = new Computer.ComputerBuilder("Intel i7", "16GB")
.setStorage(512)
.setGraphicsCard(true)
.setOperatingSystem("Windows 10")
.build();
Computer computer2 = new Computer.ComputerBuilder("AMD Ryzen 5", "8GB")
.setStorage(256)
.build();
System.out.println(computer1); // 输出 Computer [CPU=Intel i7, RAM=16GB, Storage=512GB, GraphicsCard=Yes, OS=Windows 10]
System.out.println(computer2); // 输出 Computer [CPU=AMD Ryzen 5, RAM=8GB, Storage=256GB, GraphicsCard=No, OS=Linux]
}
}
生成器模式的特点
灵活的对象创建:通过链式调用,生成器模式允许根据需要设置对象的部分属性,而不是每次都传入所有参数。
不可变性:生成的 Computer 对象是不可变的,因为它的构造函数是 private,只能通过生成器创建,且不提供修改其属性的方法。
分步骤构建对象:可以按顺序调用不同的生成器方法,逐步构建对象的属性。
生成器模式与其他设计模式的对比
与工厂模式的区别:工厂模式用于一次性创建对象,适合简单的对象构建;生成器模式适用于复杂对象的分步骤创建
标签:String,软件设计,RAM,生成器,模式,Computer,private,CPU
From: https://www.cnblogs.com/torrentgz/p/18411113