软件建造者模式

  • 建造者模式
    • 意图:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
    • 例子 :构建一个复杂的Order对象,包含客户信息、商品列表、送货地址等,一步步清晰构造。

以下是一个建造者模式(Builder Pattern)的 Java 实现示例,模拟构建一个复杂的 Order 对象(包含客户信息、商品列表、送货地址等):

java 复制代码
import java.util.ArrayList;
import java.util.List;

// 1. 定义最终要构建的复杂对象:Order
class Order {
    private String customerName;
    private String customerPhone;
    private List<String> items;
    private String shippingAddress;

    // 私有构造方法,只能通过 Builder 构建
    private Order(Builder builder) {
        this.customerName = builder.customerName;
        this.customerPhone = builder.customerPhone;
        this.items = builder.items;
        this.shippingAddress = builder.shippingAddress;
    }

    // 提供访问方法
    public String getCustomerName() {
        return customerName;
    }

    public String getCustomerPhone() {
        return customerPhone;
    }

    public List<String> getItems() {
        return items;
    }

    public String getShippingAddress() {
        return shippingAddress;
    }

    @Override
    public String toString() {
        return "Order{" +
                "customerName='" + customerName + '\'' +
                ", customerPhone='" + customerPhone + '\'' +
                ", items=" + items +
                ", shippingAddress='" + shippingAddress + '\'' +
                '}';
    }

    // 2. 定义建造者类(Builder)
    public static class Builder {
        private String customerName;
        private String customerPhone;
        private List<String> items = new ArrayList<>();
        private String shippingAddress;

        // 设置客户信息
        public Builder withCustomer(String name, String phone) {
            this.customerName = name;
            this.customerPhone = phone;
            return this;
        }

        // 添加商品
        public Builder addItem(String item) {
            this.items.add(item);
            return this;
        }

        // 设置送货地址
        public Builder withShippingAddress(String address) {
            this.shippingAddress = address;
            return this;
        }

        // 构建 Order 对象
        public Order build() {
            // 可以在此处添加校验逻辑
            if (customerName == null || customerPhone == null) {
                throw new IllegalStateException("客户信息不完整");
            }
            if (items.isEmpty()) {
                throw new IllegalStateException("商品列表不能为空");
            }
            return new Order(this);
        }
    }
}

// 3. 客户端代码
public class BuilderPatternDemo {
    public static void main(String[] args) {
        // 使用建造者逐步构建 Order 对象
        Order order = new Order.Builder()
                .withCustomer("张三", "13800138000")
                .addItem("商品A")
                .addItem("商品B")
                .withShippingAddress("北京市海淀区")
                .build();

        // 输出订单信息
        System.out.println(order);
    }
}
相关推荐
yaaakaaang10 天前
四、建造者模式
java·建造者模式
Yupureki11 天前
《Linux系统编程》20.常见程序设计模式
linux·服务器·c语言·c++·单例模式·建造者模式·责任链模式
无籽西瓜a12 天前
【西瓜带你学设计模式 | 第五期 - 建造者模式】建造者模式 —— 产品构建实现、优缺点与适用场景及模式区别
java·后端·设计模式·软件工程·建造者模式
吃一根烤肠13 天前
Trae Builder模式实战:10分钟生成可部署的Flask电商项目
python·flask·建造者模式
君主黑暗18 天前
设计模式-建造者模式
设计模式·建造者模式
bmseven18 天前
23种设计模式 - 建造者模式(Builder)
设计模式·建造者模式
砍光二叉树23 天前
【设计模式】创建型-建造者模式
设计模式·建造者模式
夕珩1 个月前
单例模式、原型模式、工厂方法模式、抽象工厂模式、建造者模式、解释器模式、命令模式
单例模式·解释器模式·建造者模式·工厂方法模式·抽象工厂模式·命令模式·原型模式
geovindu1 个月前
python: Builder Pattern
python·设计模式·建造者模式
逆境不可逃2 个月前
【从零入门23种设计模式03】创建型之建造者模式(简易版与导演版)
java·后端·学习·设计模式·职场和发展·建造者模式