我有一个程序,将要素字符串参数作为输入并相应地输出对象。
我正在寻找设计此代码的最佳方法。
目前,我有四个可能的功能。它们中的三个共享相同的属性和相同的方法。一个共享一些属性和一些方法。但是也许将来会有更多功能。
我首先考虑使用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
}
}
但是,它并没有像第一个那样干净,因为我的属性比这还多。