比方说,我有一个构建器类,它是构建一个属于其他包的Item对象。建筑工人应该如何暴露?
package mypackage;
import otherpackage.Item;
public class ItemBuilder {
private Material material;
private boolean unbreakable;
public ItemBuilder setMaterial(Material material) {
this.material = material;
return this;
}
public ItemBuilder setUnbreakable(boolean unbreakable) {
this.unbreakable = unbreakable;
return this;
}
public Item build() {
Item item = new Item();
item.material = material;
item.unbreakable = unbreakable; // Just example, the actual process is much complex than this one
return item;
}
}
我也有另外一个实用工具类,物品,这是这样的:
package mypackage;
import otherpackage.Item;
public final class Items {
private Items() {
}
public static boolean checkOwner(Item item, String owner) { // Again, just example
return item.owner.equals(owner);
}
}
我的包是一个工具包到其他包。因此,我想让提供的实用程序(如ItemBuilder)尽可能地易于开发人员访问。
现在我有两种方法来公开类,一种是,只要就可以让开发者实例化它。
new ItemBuilder().setMaterial(...).setUnbreakable(...).build();
与StringBuilder相同。
另一种是使ItemBuilder构造包本地,并编辑项目类:
package mypackage;
import otherpackage.Item;
public final class Items {
private Items() {
}
public static boolean checkOwner(Item item, String owner) { // Again, just example
return item.owner.equals(owner);
}
public static ItemBuilder builder() {
return new ItemBuilder();
}
}
这是常见的番石榴使用,如ImmutableSet.builder()。
对于我的情况(实用程序包),哪种方法暴露的建设者更好?
创建一个工厂,解析DI容器中的构建器。 – sturcotte06 2015-04-03 11:44:15