是否有一种设计模式涵盖了用数据填充对象?
更具体地说,我正在考虑一个可以包含许多不同数据字段的对象。当我从方法请求这样的对象时,我希望能够指定填充的数据量,例如。LOW, MID, HIGH但不限于这些值,甚至可能更细粒度。这可以通过创建一个ENUM并使用该ENUM作为参数调用方法来实现。但是,是否存在一种设计模式来描述更好的解决方案呢?
这只是一个生成器,可以是这样的:
public class DogBuilder {
private final Dog dog = new Dog();
public static DogBuilder primitive() {
return new DogBuilder()
.withName("Name")
.withWeight(12.1);
}
public DogBuilder withName(String n) {
dog.setName(n);
return this;
}
public DogBuilder withWeight(double w) {
dog.setWeight(w);
return this;
}
public DogBuilder withOwner(Human h) {
dog.setOwner(h);
return this;
}
public DogBuilder withHome(Address a) {
dog.setAddress(a);
return this;
}
public Dog build() {
return dog;
}
}
用法:
Dog d = DogBuilder.primitive().withOwner(new Owner()).build();
Builder是否应该将结果对象作为字段是有争议的。可能在大多数情况下,您希望保留它的所有字段,然后将它们组合到结果对象中。尤其是当你想保持类不可变的时候。
这可以通过创建一个ENUM并以该ENUM作为参数调用方法来实现。
我猜你正在寻找一个工厂,可能与建设者相结合,正如@stanislav-bashkyrtsev建议的。
像这样:
public class StuffFactory{
public IStuff Create(StuffTypes type){
switch(type){
....
}
}
}
public enum StuffTypes{
Simple,
Complex,
EvenMoreComplex
}
您所要做的就是填充case语句,潜在地利用Builder来填充您需要的字段。
而且,由于工厂返回的是一个接口,你可以根据最终返回的实现类型使用不同的构建器。