Android设计模式——建造者模式

private final OnConfirmClickListener onConfirmClickListener;//确认的点击事件



public interface OnConfirmClickListener{

    void onClick(View view);

}

public interface OnCancleClickListener{

    void onClick(View view);

}



//构造方法,其实这儿可以直接传一个builder过来的,就像OKHttp的构造方法一样

private CommonAlertDialog(@NonNull Context context, String TITLE, String MESSAGE, String CONFIRMTEXT, String CANCLETEXT,

                         OnCancleClickListener onCancleClickListener, OnConfirmClickListener onConfirmClickListener) {

    super(context,R.style.AlertDialogUtil);

    this.TITLE = TITLE;

    this.MESSAGE = MESSAGE;

    this.CONFIRMTEXT = CONFIRMTEXT;

    this.CANCLETEXT = CANCLETEXT;

    this.onCancleClickListener = onCancleClickListener;

    this.onConfirmClickListener = onConfirmClickListener;

}



@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.view_common_dialog);

    initView();

}

public static Builder Builder(Context context){

    return new Builder(context);

}

private void initView() {

    Button btnConfirm = findViewById(R.id.btn_confirm);

    Button btnCancel = findViewById(R.id.btn_cancel);

    TextView tvTitle = findViewById(R.id.tv_title);

    TextView tvMessage = findViewById(R.id.tv_message);



    if (!TextUtils.isEmpty(TITLE)) {

        tvTitle.setText(TITLE);

    }

    if (!TextUtils.isEmpty(MESSAGE)) {

        tvMessage.setText(MESSAGE);

    }

    if (!TextUtils.isEmpty(CONFIRMTEXT)) {

        btnConfirm.setText(CONFIRMTEXT);

    }

    if (!TextUtils.isEmpty(CANCLETEXT)) {

        btnCancel.setText(CANCLETEXT);

    }

    btnConfirm.setOnClickListener(v -> {

        if(null != onConfirmClickListener){

            onConfirmClickListener.onClick(v);

        }

        dismiss();

    });

    btnCancel.setOnClickListener(v -> {

        if(null != onCancleClickListener){

            onCancleClickListener.onClick(v);

        }

        dismiss();

    });

}

public CommonAlertDialog shown(){

    show();

    return this;

}

//创建Builder类

public static class Builder{

    private String mTitle;

    private String mMessage;

    private String mConfirmText;

    private String mCancelText;

    private OnConfirmClickListener mOnConfirmClickListener;

    private OnCancleClickListener mOnCancleClickListener;

    private Context mContext;



    private Builder(Context mContext) {

        this.mContext = mContext;

    }



    public Builder setTitle(String title){

        this.mTitle = title;

        return this;

    }

    public Builder setMessage(String message){

        this.mMessage = message;

        return this;

    }



    public Builder setConfirmText(String mConfirmText) {

        this.mConfirmText = mConfirmText;

        return this;

    }



    public Builder setCancelText(String mCancelText) {

        this.mCancelText = mCancelText;

        return this;

    }



    public Builder setOnConfirmClickListener(OnConfirmClickListener mOnConfirmClickListener) {

        this.mOnConfirmClickListener = mOnConfirmClickListener;

        return this;

    }



    public Builder setOnCancleClickListener(OnCancleClickListener mOnCancelClickListener) {

        this.mOnCancleClickListener = mOnCancelClickListener;

        return this;

    }

    //build时返回dialog对象,就是从这儿创建的对象

    public CommonAlertDialog build(){

        return new CommonAlertDialog(mContext,mTitle,mMessage,mConfirmText,mCancelText,

                mOnCancleClickListener,mOnConfirmClickListener);

    }

}

}





#### 《设计思想解读开源框架》

![](https://img-blog.csdnimg.cn/img_convert/a83c344c4686991374daa3788e5abe31.webp?x-oss-process=image/format,png)

**第一章、 热修复设计**

* **第一节、 AOT/JIT & dexopt 与 dex2oat**

* **第二节、 热修复设计之 CLASS_ISPREVERIFIED 问题**

* **第三节、热修复设计之热修复原理**

* **第四节、Tinker 的集成与使用(自动补丁包生成)**

  ![](https://img-blog.csdnimg.cn/img_convert/9974eedc2074b44978242ae3ca108d2d.webp?x-oss-process=image/format,png)

  **第二章、 插件化框架设计**

* **第一节、 Class 文件与 Dex 文件的结构解读**

* **第二节、 Android 资源加载机制详解**

* **第三节、 四大组件调用原理**

* **第四节、 so 文件加载机制**

* **第五节、 Android 系统服务实现原理**

  ![](https://img-blog.csdnimg.cn/img_convert/8e547204f008702b0ea76f41520adc64.webp?x-oss-process=image/format,png)

  **第三章、 组件化框架设计**

* **第一节、阿里巴巴开源路由框——ARouter 原理分析**

* **第二节、APT 编译时期自动生成代码&动态类加载**

* **第三节、 Java SPI 机制**

* **第四节、 AOP&IOC**

* **第五节、 手写组件化架构**

  ![](https://img-blog.csdnimg.cn/img_convert/c14ac055103dcf81adfdec8e2eee50e9.webp?x-oss-process=image/format,png)

  **第四章、图片加载框架**

* **第一节、图片加载框架选型**

* **第二节、Glide 原理分析**

* **第三节、手写图片加载框架实战**

  ![](https://img-blog.csdnimg.cn/img_convert/f811bf7efc67d9f8afff221b00dfc34b.webp?x-oss-process=image/format,png)

  **第五章、网络访问框架设计**

* **第一节、网络通信必备基础**

* **第二节、OkHttp 源码解读**

* **第三节、Retrofit 源码解析**

  ![](https://img-blog.csdnimg.cn/img_convert/c3396a7d659f019c14d99713804e5774.webp?x-oss-process=image/format,png)

  **第六章、 RXJava 响应式编程框架设计**

* **第一节、链式调用**

* **第二节、 扩展的观察者模式**

* **第三节、事件变换设计**

* **第四节、Scheduler 线程控制**

  ![](https://img-blog.csdnimg.cn/img_convert/297894c408d4165dc6b43d1156663f8b.webp?x-oss-process=image/format,png)

  **第七章、 IOC 架构设计**

* **第一节、 依赖注入与控制反转**

* **第二节、ButterKnife 原理上篇、中篇、下篇**

* **第三节、Dagger 架构设计核心解密**

  ![](https://img-blog.csdnimg.cn/img_convert/64408d0f0192a40b481320dfb5dc0409.webp?x-oss-process=image/format,png)

  **第八章、 Android 架构组件 Jetpack**

* **第一节、 LiveData 原理**

* **第二节、 Navigation 如何解决 tabLayout 问题**

* **第三节、 ViewModel 如何感知 View 生命周期及内核原理**

* **第四节、 Room 架构方式方法**

* **第五节、 dataBinding 为什么能够支持 MVVM**

* **第六节、 WorkManager 内核揭秘**

* **第七节、 Lifecycles 生命周期**

  ![](https://img-blog.csdnimg.cn/img_convert/8d9f76a4839b9569c284838899a001a5.webp?x-oss-process=image/format,png)
  **本文包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…**
  ![](https://img-blog.csdnimg.cn/img_convert/2fd7026a4b254ed620b5c2c7edce72d7.webp?x-oss-process=image/format,png)



**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

56523)]
  **本文包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…**
  [外链图片转存中...(img-0mzMNX99-1714457256523)]



**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值