加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – BuilderPattern中的逻辑

发布时间:2020-12-15 01:03:49 所属栏目:Java 来源:网络整理
导读:最近我遇到了一个引起我兴趣的建筑师模式. 所以,我有一个构建实体的EntityBuilder,但它没有返回实体.这是方法签名: public void build(); 相反,在build()方法内部,它将创建的新对象Entity传递给CacheImplementation实例以存储它. 注意:CacheImpl是在构建器

最近我遇到了一个引起我兴趣的建筑师模式.

所以,我有一个构建实体的EntityBuilder,但它没有返回实体.这是方法签名:

public void build();

相反,在build()方法内部,它将创建的新对象Entity传递给CacheImplementation实例以存储它.
注意:CacheImpl是在构建器的构造函数中注入的.

public void build(){
    //create new entity
    cacheImplementation.add(entity);
}

这听起来像是最佳做法吗?

稍后编辑0

public interface EntityBuilder {

    void setProperty0(PropertyObject propertyObject0);
    void setProperty1(PropertyObject propertyObject1);
    void setProperty2(PropertyObject propertyObject2);
    //...

    void build();
}

public class EntityBuilderImpl implements EntityBuilder {

    PropertyObject propertyObject0;
    PropertyObject propertyObject1;
    PropertyObject propertyObject2;
    //...

    // setters for all properties
    @Override
    public void build(){
        //create new entity
        cacheImplementation.add(entity);
    }
}

构建器按以下方式使用:

public class EntityProcessor{
  private EntityBuilderFactory entityBuilderFactory;//initialized in constructor

  void process(EntityDetails entityDetails){
       EntityBuilder entityBuilder = this.entityBuilderFactory.getNewEntitytBuilder();
       //..
       // entityBuilder.set all properties from entityDetails
       entityBuilder.build();
  }
}

注意:cacheImpl实例仅将实体存储在List<>中.每N秒访问一次.

最佳答案

Does this sounds like best practice?

传统的构建器模式不会将创建的对象存储在任何位置,它只是返回它.

我可以想象一种变体,其中构建器还具有实例控件的作用,以避免创建重复的对象,以及管理不可变对象的存储.

不返回实例的决定可能是明确该方法有副作用.如果该方法返回了该对象,则可能会误导它认为它是一个没有副作用的传统构建器,而在此情况并非如此.

在任何情况下,所有这些只是推测,因为我们还没有看到使用它的其余代码以及它的实现和使用方式.我们没有足够的背景来真正判断.
发明新模式没有错,但它可以做得好或坏.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读