同一对象的多个实例的Factory设计模式的相关性?

时间:2019-02-06 10:49:18

标签: java design-patterns

我有一个程序,将要素字符串参数作为输入并相应地输出对象。

我正在寻找设计此代码的最佳方法。

目前,我有四个可能的功能。它们中的三个共享相同的属性和相同的方法。一个共享一些属性和一些方法。但是也许将来会有更多功能。

我首先考虑使用Factory Design Pattern。两个类将实现一个接口,而三个相似的功能将从一个抽象类扩展。

public interface Feature{
    String getFeatureName();
}

public abstract class GroupA implements Feature{
    String featureName;
    String attrGroupA1;
    String attrGroupA2;
    String getFeatureName();

public class Feature1 extends GroupA{
    String featureName;
    String attrGroupA1;
    String attrGroupA2;

    Feature1(){
            this.featureName = "Feature1";
            this.attrGroupA1 = "feature1Attr1";
            this.attrGroupA2 = "feature1Attr2;
    }

    String getFeatureName(){
            return this.featureName;
    }
}

Feature2,Feature3看起来与Feature1相同,但构造函数中有一些属性更改。

public class Feature4 implements Feature{
    String featureName;
    String attr1;

    Feature4(){
            this.featureName = "Feature4";
            this.attr1 = "feature4Attr";
    }

    String getFeatureName(){
            return this.featureName;
    }

    void otherMethod(){};

}

public class FeatureFactory {
    public Feature getFeature(String featureName) {
        if(featureName == "Feature1") {
            return new Feature1();
        }
    // etc
    }
}

存在的问题是Feature1,Feature2和Feature3类的复制代码。

我的第二个解决方案是简单地使用构造函数实例化同一GroupA对象(这次是非抽象的),该构造函数具有用于前三个特征的参数。

public class FeatureFactory {
    public Feature getFeature(String featureName) {
        if(featureName == "Feature1") {
            return new GroupA("Feature1","feature1Attr1", "feature1Attr2");
        }
    // etc
    }
}

但是,它并没有像第一个那样干净,因为我的属性比这还多。

0 个答案:

没有答案