java - 对具有不同参数的类使用工厂模式

标签 java design-patterns factory factory-pattern

我有一个非常简单的工厂,它将一个枚举作为其参数之一来确定应该创建的对象的类型,以及一个对所有正在创建的对象通用的另一个参数。

随着我为工厂添加更多类型来创建我的对象构造函数的参数开始不同,例如:

public class someFactory {
    public someFactory() {
    }

    public SomeObject newObject(Type type, Object data) {
        return this.newObject(type, data, "");
    }

    public SomeObject newObject(Type type, Object data, Object stringOrObject) {
        SomeObject someObject = null;

        if (type != null) {
             switch(type) {
                 case CREATE:
                     someObject = new CreateObject(data);
                     break;
                 case DELETE:
                     someObject = new DeleteObject(data, (String)stringOrObject);
                     break;
                 case EDIT:
                     someObject = new EditObject(data, (Object)stringOrObject);
                     break;
                 default:
                     break;
             }
        }

        return someObject;
    }
}

我不应该使用工厂而只是用正确的参数实例化不同的类型,还是可以以某种方式改进上面的内容以使其更灵活?

最佳答案

标准的 Java 做法是向枚举添加一个方法。

public enum Type {
    CREATE() {
        public SomeObject create(Object data, Object stringOrObject) {
            return new CreateObject(data);
        }
    },
    [...];
    public SomeObject create(Object data) {
        return create(data, "");
    }
    public abstract SomeObject create(Object data, Object stringOrObject);
}

正如@Stas Kurilin 指出的那样,如果您可以避免使用枚举并仅调用具有适当名称和参数的静态创建方法,那么您就可以解决许多问题。

(其他一些随机点:抛出异常通常比接受 null 或未知值更好。尝试使用强类型而不是 Object。坚持使用Java 编码约定,例如大写的类型名称。)

关于java - 对具有不同参数的类使用工厂模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4370806/

相关文章:

java - Jar 中指定的主 Java 类在哪里

design-patterns - 当观察者修改对象状态时使用观察者模式

java - PRPC中的controller是怎么写的

javascript - 在指令中使用工厂

java - apachecamel多播将文本消息转换为字节消息

java - 使用线程进行GUI编程时监听器的机制是什么?

Android 仪表板图标大小

dependency-injection - DI容器,工厂或临时性元素的新容器?

java - 如何使用类参数分解 dao

java - 如何将表示为长整数的日期值转换为有意义的日期?