java builder_带继承的Java Builder模式

我想实现一个带有静态内部类的构建器模式,比如说类A带有字段(a1,a2,a3),B带有字段(b1,b2),C带有字段(c1),而所有共享字段(s1,s2) )来自超级SuperClass:

public class A extends SuperClass {

private final String a1;

...

private A(ABuilder builder) {

super(builder);

this.a1 = builder.a1;

...

}

public static class ABuilder extends SuperClassBuilder implements ABuilderInterface {

private String a1;

...

@Override

public ABuilder withA1(String a1) {

this.a1 = a1;

return this;

}

...

@Override

public SuperClass build() {

return new A(this);

}

}

}

因此,对于B和C,构建器只是不同,它们有自己的字段并实现它们自己的接口(BBuilderInterface和CBuilderInterface),而这些接口只定义要实现的方法:

public interface ABuilderInterface extends SuperClassBuilderInterface {

ABuilderInterface withA1(String a1);

...

}

...

public interface SuperClassBuilderInterface {

SuperClassBuilderInterface withS1(String s1);

...

SuperClass build();

}

// Usage of the builders:

public SuperClass foo() {

return new A.ABuilder()

.withA1(...) // returns ABuilderInterface

...

.withS1(...) // returns SuperClassBuilderInterface

...

.build();

}

public abstract class SuperClass {

private final String s1;

...

protected SuperClass(SuperClassBuilder builder) {

this.s1 = builder.s1;

...

}

protected static abstract class SuperClassBuilder implements SuperClassBuilderInterface {

private String s1;

...

@Override

public SuperClassBuilder withS1(String s1) {

this.s1 = s1;

return this;

}

...

@Override

public abstract SuperClass build();

}

}

现在你可以发现当我使用构建器时我必须注意首先调用与子类相关的with …方法,然后将它们链接到超类,这不是一个大问题,但仍然不确定是否良好的做法.

另一方面,我可以将子类的with …方法一起添加到超类接口,然后限制消失,但后来我有一个混合了…的不同子类的方法.

你更喜欢/建议哪一个?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值