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

回头看自己写的东西,在关于Android自定义控件时,写的代码适用性比较高,但是看上去没有什么技术含量,所以在学习设计模式的时候,想想有些东西是否能够改进,比如说:

自定义Dialog是Android应用必须的,系统的控件实在是太难看了;

在构建中,,完全是,new完对象之后,需要什么构建什么,这样写没有问题,可读性也还行,就是看上去不咋的。

以下是小部分代码片段:

package com.example.demo.Builder;/** * * @author qubian * @data 2015年6月10日 * @email naibbian@163.com * */public class BuilderDialog extends Dialog implements View.OnClickListener {private Context mContext;private View view;private View lineView;private TextView titleTv;private TextView contentTv;private Button sureBtn;private Button cancelBtn;private String sureTitle;private String cancelTitle;private String title;private String content;private boolean sureVisible = true;private boolean cancelVisible = true;private View.OnClickListener sureListener;private View.OnClickListener cancelListener;public BuilderDialog(Context context, String title, String content) {super(context, R.style.base_dialog_style);this.mContext = context;this.title = title;this.content = content;view = LayoutInflater.from(mContext).inflate(R.layout.dialog_normal,null);addContentView(view, Utils.getDialogLayoutParams(mContext));}public void setSureTitle(String title) {sureTitle = title;}public void setCancelTitle(String title) {cancelTitle = title;}public void setCancelVisible(boolean visible) {cancelVisible = visible;}public void setSureListener(View.OnClickListener listener) {if (listener != null) {sureListener = listener;}}public void setCancelListener(View.OnClickListener listener) {}/** * 是否可以返回 * * @param canBack */public void setCanBack(boolean canBack) {}//初始化private void initView() {lineView = view.findViewById(R.id.line_view);titleTv = (TextView) view.findViewById(R.id.title_tv);contentTv = (TextView) view.findViewById(R.id.content_tv);contentTv.setText((content.replace("\\r","\r").replace("\\n", "\n")));sureBtn = (Button) view.findViewById(R.id.sure_btn);cancelBtn = (Button) view.findViewById(R.id.cancel_btn);}@Overridepublic void show() {initView();titleTv.setText(title);if (sureVisible) {if (sureListener == null) {sureBtn.setOnClickListener(this);} else {sureBtn.setOnClickListener(sureListener);}if (sureTitle != null) {sureBtn.setText(sureTitle);}} else {sureBtn.setVisibility(View.GONE);}if (cancelVisible) {} else {}super.show();}@Overridepublic void onClick(View v) {if (v.getId() == sureBtn.getId()) {this.cancel();} else if (v.getId() == cancelBtn.getId()) {this.cancel();}}}使用,和适用都没问题,并且逻辑也比较简单,那么如何优化呢?

言归正传:

建造者模式

1、定义:

将一个复杂的构建与其表示分离,使得相同的构建有了不同的表示。

2、目的:

建造者模式是讲复杂的内部构建封装在内部,对于其他外部成员来说,只需要传递构建者和构建工具,便可以得到所需,不需要关心如何构建,以及内部构建过程。

3、使用:

3.1、在构建的过程中,允许不同的构建过程,产生不同表示的构建对象;

3.2、在复杂的对象时,其复杂的构建算法应当独立于对象的组成部分,或者是独立于装配方式时;

4、一个简单的demo:

核心:抽象建造者,具体建造者,实体类

package com.example.demo.Builder;import android.util.Log;/** * 建造者模式 * @author qubian * @data 2015年6月10日 * @email naibbian@163.com * */public class Product {Builder mBuilder ;public Builder getBuilder(){if (mBuilder==null) {mBuilder = new ProductBuilder();}return mBuilder;}/** * 抽象建造者 * @author qubian * @data 2015年6月10日 * @email naibbian@163.com * */public interface Builder{public Builder buildPart1();public Builder buildPart2();public Product getProduct();}/** * 具体的建造者 * @author qubian * @data 2015年6月10日 * @email naibbian@163.com * */public class ProductBuilder implements Builder{private static final String TAG= "ProductBuilder";Product mProduct = new Product();@Overridepublic Builder buildPart1() {Log.i(TAG, "buildPart1");return this;}@Overridepublic Builder buildPart2() {Log.i(TAG, "buildPart2");return this;}@Overridepublic Product getProduct() {return mProduct;}}}使用:package com.example.demo.Builder;/** * 使用 * @author qubian * @data 2015年6月10日 * @email naibbian@163.com * */public class UseProduct {public void use(){Product p = new Product().getBuilder().buildPart1().buildPart2().getProduct();}}5、在Android的源码中,建造者模式,肯定是必不可少的;

其中最为代表的就是AlertDialog,在其构建过程中,便是构建与表示分离。其内部的Builder便是他的构建者。

从起点,到尽头,也许快乐,或有时孤独,

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

相关文章:

你感兴趣的文章:

标签云: