Java 使用生成器模式添加到集合<&燃气轮机;
我有一个类,它包含对象的Java 使用生成器模式添加到集合<&燃气轮机;,java,Java,我有一个类,它包含对象的集,我希望使该类在客户端代码完全添加到此集之前不能完全实例化。我正在考虑使用构建器模式,但不是设置集,而是考虑添加到其中,如下所示: public final class SyncManager { private ServiceManager serviceManager; private SyncManager(Builder builder) { serviceManager = new ServiceManager(builder
集
,我希望使该类在客户端代码完全添加到此集
之前不能完全实例化。我正在考虑使用构建器模式,但不是设置集,而是考虑添加到其中,如下所示:
public final class SyncManager {
private ServiceManager serviceManager;
private SyncManager(Builder builder) {
serviceManager = new ServiceManager(builder.services);
}
public static Builder newBuilder() {
return new Builder();
}
/**
* {@code SyncManager} builder static inner class.
*/
public static final class Builder {
private Set<Service> services;
private Builder() {
this.services = new HashSet<>();
}
/**
* Adds the {@code services} and returns a reference to this Builder so that the methods can be chained together
* and more services can be added.
*
* @param newService the {@code services} to set
* @return a reference to this Builder
*/
public Builder addService(Service newService) {
services.add(newService);
return this;
}
/**
* Returns a {@code SyncManager} built from the parameters previously set.
*
* @return a {@code SyncManager} built with parameters of this {@code SyncManager.Builder}
*/
public SyncManager build() {
return new SyncManager(this);
}
}
}
公共最终类同步管理器{
私人服务经理;
私人同步管理器(生成器){
serviceManager=新的serviceManager(builder.services);
}
公共静态生成器newBuilder(){
返回新的生成器();
}
/**
*{@code SyncManager}生成器静态内部类。
*/
公共静态最终类生成器{
专用集服务;
私人建筑商(){
this.services=new HashSet();
}
/**
*添加{@code services}并返回对此生成器的引用,以便将这些方法链接在一起
*并且可以添加更多的服务。
*
*@param newService要设置的{@code services}
*@返回对此生成器的引用
*/
公共生成器添加服务(服务新闻服务){
添加(新闻服务);
归还这个;
}
/**
*返回根据以前设置的参数生成的{@code SyncManager}。
*
*@return使用此{@code SyncManager.Builder}的参数生成的{@code SyncManager}
*/
公共同步管理器生成(){
返回新的SyncManager(此);
}
}
}
这没关系,对吧?我正试图想出其他方法来确保SyncManager
在需要添加到集合中的所有内容都已就绪之前不会完全实例化。是的,我知道我可以在外部创建集
,并将其传递到构造函数中的SyncManager
,但我不想公开它
如果有更好的方法来完成我正在做的事情,任何输入都会有帮助 如果要确保集合不会在构建器/对象之外发生变化,这似乎是构建对象的一种完全合理的方法
如果要确保调用方在调用后没有修改集合,则需要从外部构造集合并将其传递到构造函数中,这需要将其复制到新集合。IMO,如果只是使用addService builder模式,则不会增加太大的价值。@KDM您建议怎么做?我可以删除构建器,将Set
添加到主类中,然后重复调用addService()
方法,但这不能保证在客户端完成添加到Set
之前实例化对象。我可以想到两个选项。一种是将集合作为参数传递。另一种方法是保持addservice&同时添加一个单独的方法来启动服务。