程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

如何创建可以构建多种 Java 对象的构建器?

发布于2021-09-08 17:10     阅读(1341)     评论(0)     点赞(8)     收藏(2)


我正在尝试创建一种Multi Strategy Builder. 我的意思是这个构建器应该是通用的,并且应该有不同的方法取决于实体类型。让我解释一下。

取决于实体,我们需要有不同的方法。例子:

Builder<User> userBuilder;
userBuilder.withName(«Bob»);
userBuilder.withAge(17);

而这个builder一定没有其他方法!

Builder<Account> accountBuilder;
accountBuilder.withCounry(«Fr»);
accountBuilder.withNumber(2846218354);
accountBuilder.withCode(«X34»);

我应该使用什么模式?以及如何组织我的设计?


解决方案


泛型接口不可能根据传递给 Java 中的类而具有不同的方法。这意味着Builder接口可以具有:

  • withNamewithAge方法
  • withCountry,withNumberwithCode方法
  • 他们都

没有任何设计模式可以克服 Java 语言的限制。我建议使用通用构建器界面,例如:

public interface Builder<T> {
    T build();
}

然后为每个实体类型创建单独的子类:

public class UserBuilder implements Builder<User> {

     public void withName(String name) {
         // ...
     }

     public void withAge(int age) {
         // ...
     }

     public User build() {
         User user = new User();
         user.setName(...);
         user.setAge(...);
         return user;
     }

}

public class AccountBuilder implements Builder<Account> {

    public void setCountry(String country) {
         // ...
    }

    public void setNumber(String number) {
         // ...
    }

    public void setCode(String code) {
         // ...
    }

    public Account build() {
         Account account = new Account();
         account.setCountry(...);
         account.setNumber(...);
         account.setCode(...);
         return account;
    }
}

然后像这样使用它

UserBuilder userBuilder = new UserBuilder();
userBuilder.setName("John");
userBuilder.setAge(20);
User user = userBuilder.build();

AccountBuilder accountBuilder = new AccountBuilder();
accountBuilder.setCountry("UA");
accountBuilder.setNumber("333-22-1");
accountBuilder.setCode("123");

就是这样。这可以通过使用Fluent Interface模式稍微改进,但无论如何在 Java 中不可能实现它完全像你的问题一样工作。

希望这可以帮助...



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:http://www.javaheidong.com/blog/article/282188/905eb5c9a0c7cdcefe80/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

8 0
收藏该文
已收藏

评论内容:(最多支持255个字符)