我可以用构建器模式制作抽象片段 class 吗?
Can I make abstract fragment class with builder pattern?
我制作了一些片段扩展了topFragment class。但它有可变参数——自定义监听器、一些模型等。
public abstract class TopFragment extend Fragment {
public interface OnCustomListener {
void onCustomListener();
}
protected OnCustomListener onCustomListener;
protected int importantValue;
protected String importantString;
protected abstract void doSomething();
public static class Builder() {
protected OnCustomListener onCustomListener;
protected int importantValue;
protected String importantString;
public Builder(OnCustomListener onCustomListener) {
this.onCustomListener = onCustomListener;
}
public Builder setValue(int value) {
this.importantValue = value;
return this;
}
public Builder setString(String value) {
this.importantString = value;
return this;
}
}
}
这是第二个片段class
public class SecondFragment extend TopFragment {
@Override
protected void doSomething() {
// do something.
}
}
public class ThirdFragment extend TopFragment {
@Override
protected void doSomething() {
// do something.
}
}
TopFragment fragment = new SecondFragment();
有用。那么如何使用构建器创建继承片段 class 的实例?
class 的外部环境的实现绑定到 Builder
,有一个私有的 Constructor
,它接受一个 Builder
对象作为参数,例如
public class ThirdFragment extend TopFragment {
@Override
protected void doSomething() {
// do something.
}
private ThirdFragment(Builder builder) {
// use the members of builder to build your object
}
}
并且 Builder
本身有一个调用该构造函数的 build()
方法。例如
public ThirdFragment build() {
return new ThirdFragment(this);
}
现在Fragment
既不能有私有构造函数也不能有带参数的构造函数,所以你不能真正使用Builder
模式。
我制作了一些片段扩展了topFragment class。但它有可变参数——自定义监听器、一些模型等。
public abstract class TopFragment extend Fragment {
public interface OnCustomListener {
void onCustomListener();
}
protected OnCustomListener onCustomListener;
protected int importantValue;
protected String importantString;
protected abstract void doSomething();
public static class Builder() {
protected OnCustomListener onCustomListener;
protected int importantValue;
protected String importantString;
public Builder(OnCustomListener onCustomListener) {
this.onCustomListener = onCustomListener;
}
public Builder setValue(int value) {
this.importantValue = value;
return this;
}
public Builder setString(String value) {
this.importantString = value;
return this;
}
}
}
这是第二个片段class
public class SecondFragment extend TopFragment {
@Override
protected void doSomething() {
// do something.
}
}
public class ThirdFragment extend TopFragment {
@Override
protected void doSomething() {
// do something.
}
}
TopFragment fragment = new SecondFragment();
有用。那么如何使用构建器创建继承片段 class 的实例?
class 的外部环境的实现绑定到 Builder
,有一个私有的 Constructor
,它接受一个 Builder
对象作为参数,例如
public class ThirdFragment extend TopFragment {
@Override
protected void doSomething() {
// do something.
}
private ThirdFragment(Builder builder) {
// use the members of builder to build your object
}
}
并且 Builder
本身有一个调用该构造函数的 build()
方法。例如
public ThirdFragment build() {
return new ThirdFragment(this);
}
现在Fragment
既不能有私有构造函数也不能有带参数的构造函数,所以你不能真正使用Builder
模式。