用数据填充对象的设计模式



是否有一种设计模式涵盖了用数据填充对象?

更具体地说,我正在考虑一个可以包含许多不同数据字段的对象。当我从方法请求这样的对象时,我希望能够指定填充的数据量,例如。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来填充您需要的字段。

而且,由于工厂返回的是一个接口,你可以根据最终返回的实现类型使用不同的构建器。

相关内容

  • 没有找到相关文章

最新更新