BaseClass baseObj1 = new DerivedClass("valueofreqdfeature");
//the required feature gets added to the map in the base class
Map<String, Object> features = Collections.singletonMap("requiredFeature1Name","requiredFeatureValue");
BaseClass newBaseObj = baseObj1.createNewConcreteFeature(features);
createNewConcreteFeature
将仅从映射中获取requiredFeature值并返回一个实例。这似乎是在派生类中是静态的方法,但是客户端无法使用现有对象创建派生类实例。有没有更优雅的书写方式?还是有一些适用的模式? 最佳答案
您正在违反SOLID的单一责任原则。功能部件只能完成一项工作。其他类(例如Builder或其他类)应该做其他工作-构建功能。如果您需要基于其他功能构建功能,请使用以下方法:
builder.SetValues("valueofreqdfeature");
IFeature someFeature = builder.CreateFeature();
builder.UseFeature(someFeature);
IFeature newFeature = builder.CreateFeature();
这样一来,如果需要对数十亿个功能之间的关系进行某些更改,则无需更改这些功能中的代码。您唯一需要更改的地方是您的构建器类。并且还可以使用界面