java - 构建器模式与配置对象

标签 java oop configuration builder-pattern

构建器模式在创建不可变对象(immutable对象)方面很流行,但创建构建器需要一些编程开销。所以我想知道为什么不简单地使用配置对象。

构建器的用法如下所示:

Product p = Product.Builder.name("Vodka").alcohol(0.38).size(0.7).price(17.99).build();

很明显这是非常可读和简洁的,但是你必须实现builder:

public class Product {

    public final String name;
    public final float alcohol;
    public final float size;
    public final float price;

    private Product(Builder builder) {
        this.name = builder.name;
        this.alcohol = builder.alcohol;
        this.size = builder.size;
        this.price = builder.price;
    }

    public static class Builder {

        private String name;
        private float alcohol;
        private float size;
        private float price;

        // mandatory
        public static Builder name(String name) {
            Builder b = new Builder();
            b.name = name;
            return b;
        }

        public Builder alcohol(float alcohol) {
            this.alcohol = alcohol;
            return.this;
        }

        public Builder size(float size) {
            this.size = size;
            return.this;
        }

        public Builder price(float price) {
            this.price = price;
            return.this;
        }

        public Product build() {
            return new Product(this);
        }

    }

}

我的想法是,通过使用这样的简单配置对象来减少代码:

class ProductConfig {

        public String name;
        public float alcohol;
        public float size;
        public float price;

        // name is still mandatory
        public ProductConfig(String name) {
            this.name = name;
        }

}

public class Product {

    public final String name;
    public final float alcohol;
    public final float size;
    public final float price;

    public Product(ProductConfig config) {
        this.name = config.name;
        this.alcohol = config.alcohol;
        this.size = config.size;
        this.price = config.price;
    }

}

用法:

ProductConfig config = new ProductConfig("Vodka");
config.alcohol = 0.38;
config.size = 0.7;
config.price = 17.99;
Product p = new Product(config);

这种用法需要多几行,但也非常易读,但实现要简单得多,对于不熟悉构建器模式的人来说可能更容易理解。顺便问一下:这种模式有名字吗?

我忽略的配置方法有什么缺点吗?

最佳答案

构建器模式改进了解耦 - 您的产品可以是一个接口(interface),而唯一知道实现(或在某些情况下是实现)的类是构建器。如果构建器还实现了一个接口(interface),那么您可以将其注入(inject)到您的代码中以进一步增加解耦。

这种解耦意味着您的代码更易于维护和测试。

关于java - 构建器模式与配置对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3394853/

相关文章:

java - (AES加密)代码缺陷,应该注意什么? [提供代码][Java]

c# - 在高负载系统 C# 中映射 POCO 的成本

java - Kotlin:Java 无法解析 Kotlin Symbol?

java - 无法执行目标 org.apache.maven.plugins :maven-compiler-plugin:3. 8.1:编译

javascript - 了解 JavaScript 中的原型(prototype)继承

javascript - 了解 javascript 高级语法和对象表示法

configuration - 如何从 OpenSSL 生成动态库和静态库?

configuration - 如何使用 weblogic 10.3.x 在 web.xml 中动态传递参数?

configuration - OpenERP7,拥有完整权限的新用户无法创建新合作伙伴

java - SimpleJdbcCall异常: Required input parameter is missing