加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 对不同参数的类使用工厂模式

发布时间:2020-12-14 05:23:46 所属栏目:Java 来源:网络整理
导读:我有一个非常简单的工厂,它将枚举作为其参数之一来确定应该创建的对象的类型,以及所有正在创建的对象通用的另一个参数. 当我为工厂添加更多的类型来创建我的对象构造函数的参数开始不同,例如: public class someFactory { public someFactory() { } public
我有一个非常简单的工厂,它将枚举作为其参数之一来确定应该创建的对象的类型,以及所有正在创建的对象通用的另一个参数.

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

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编码约定,例如大写类型名称)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读