首页
学习
活动
专区
圈层
工具
发布

java生成器

Java 中的生成器(Builder)是一种创建复杂对象的设计模式,它允许您使用相同的构造代码来生成不同的对象,同时允许您在创建对象时设置其属性。这种模式在创建大型对象时非常有用,例如在构建复杂的 GUI 界面或配置大型系统时。

Java 生成器模式的核心思想是将对象构建分解为一系列步骤,每个步骤都可以设置一个或多个属性。这些步骤被封装在生成器类中,以使对象构建过程可重用,并且可以在不同的场景中进行扩展和定制化。最终,生成器类将返回一个构建好的对象,该对象包含所有设置的属性。

下面是一个简单的 Java 生成器模式示例,用于构建一个餐厅订单。该示例使用了链式调用(Fluent API)来设置订单中的属性。

代码语言:javascript
复制
public class RestaurantOrder {
    private String mainDish;
    private String sideDish;
    private String drink;
    private String dessert;
    private boolean hasDelivery;

    private RestaurantOrder() {}

    public String getMainDish() {
        return mainDish;
    }

    public String getSideDish() {
        return sideDish;
    }

    public String getDrink() {
        return drink;
    }

    public String getDessert() {
        return dessert;
    }

    public boolean isHasDelivery() {
        return hasDelivery;
    }

    public static class Builder {
        private String mainDish;
        private String sideDish;
        private String drink;
        private String dessert;
        private boolean hasDelivery;

        public Builder withMainDish(String mainDish) {
            this.mainDish = mainDish;
            return this;
        }

        public Builder withSideDish(String sideDish) {
            this.sideDish = sideDish;
            return this;
        }

        public Builder withDrink(String drink) {
            this.drink = drink;
            return this;
        }

        public Builder withDessert(String dessert) {
            this.dessert = dessert;
            return this;
        }

        public Builder withDelivery(boolean hasDelivery) {
            this.hasDelivery = hasDelivery;
            return this;
        }

        public RestaurantOrder build() {
            RestaurantOrder order = new RestaurantOrder();
            order.mainDish = this.mainDish;
            order.sideDish = this.sideDish;
            order.drink = this.drink;
            order.dessert = this.dessert;
            order.hasDelivery = this.hasDelivery;
            return order;
        }
    }
}

在上述代码中,我们首先定义了一个 RestaurantOrder 类,该类包含了订单中的各个属性。然后,我们定义了一个 Builder 类,该类包含了一系列方法,用于设置订单的属性。每个方法都返回 Builder 实例本身,以允许链式调用。最后,我们在 Builder 类中定义了一个 build 方法,该方法将使用 Builder 中的属性来构建一个 RestaurantOrder 对象,并返回该对象。

下面是一个使用示例:

代码语言:javascript
复制
RestaurantOrder order = new RestaurantOrder.Builder()
        .withMainDish("Spaghetti Carbonara")
        .withSideDish("Garlic Bread")
        .withDrink("Coke")
        .withDessert("Tiramisu")
        .withDelivery(true)
        .build();

System.out.println("Main Dish: " + order.getMainDish());
System.out.println("Side Dish: " + order.getSideDish());
System.out.println("Drink: " + order.getDrink());
System.out.println("Dessert: " + order.getDessert());
System.out.println("Delivery: " + order.isHasDelivery());

在上面的示例中,我们使用 Builder 类来构建一个 RestaurantOrder 对象,并设置其属性。然后,我们使用该对象的 getter 方法来获取其属性,并将其打印到控制台上。

下一篇
举报
领券