如何使用构建器模式?

时间:2019-05-01 08:28:22

标签: android design-patterns builder

我现在正在创建一个包含10个参数的视图,将其放置到FrameLayout中。

我正在考虑使用Builder模式,类似于AlertDialog的工作方式。但是,我不确定要实现此目标的最佳方法是什么,或者甚至不是个好主意。

这是我在想的一个例子,但是还有更多的变数。

有问题。

我想在adDetailModel中使用变量dataLoader中的变量initbuilder

public class DialogContentList extends FrameLayout {

public static DataLoader dataLoader;
static SwipeRefreshRelativeLayout contentList;
public static AdDetailModel adDetailModel;

public DialogContentList(@NonNull Context context) {
    super(context);

    init(context, null, 0);
}

public DialogContentList(@NonNull Context context, @Nullable AttributeSet attrs) {
    super(context, attrs);

    init(context, attrs, 0);
}

public DialogContentList(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);

    init(context, attrs, defStyleAttr);
}

public static class Builder {

    private AdDetailModel adDetailModel;
    private DataLoader dataLoader;

    public Builder() {

    }


    public Builder setModel(AdDetailModel adDetailModel) {
        this.adDetailModel = adDetailModel;
        return this;
    }

    public Builder setDataloder(DataLoader dataLoader) {
        this.dataLoader = dataLoader;
        return this;
    }


    public DialogContentList build(final Context context) {
        DialogContentList dialogContentList = new DialogContentList(context);

        return dialogContentList;
    }
}

private void init( Context context, AttributeSet attrs, int defStyleAttr) {

    LayoutInflater.from(context).inflate(R.layout.dialog_content_list, this, true);
    contentList = (SwipeRefreshRelativeLayout) findViewById(R.id.ContentList);
  //
  //        contentList.build(new viewWrapper() {
  //            @Override
 //            public BaseWidget getView() {
 //                return new AdSample(context1, adDetailModel);
//            }
//        }, dataLoader);

 }

}

1 个答案:

答案 0 :(得分:0)

尽管我认为Builder应该传递给Builder的构造函数,但是您对Context模式的实现基本上是正确的。

但是,就我个人而言,我不会在DataLoader层中添加逻辑(即AdViewModelView)。另外,类顶部的变量都不应该是static,当然不能是SwipeRefreshRelativeLayout,这会导致内存泄漏。

在可能的情况下,完全用XML定义View,然后使用Model-View-Presenter模式将UI与逻辑分离。您最终将获得更加灵活的体系结构。