Builder模式及其在Android中的使用
2018-02-24 16:20
330 查看
Builder模式及其在Android中的使用
本篇blog主要介绍builder模式的概念、demo 以及在Android中的运用等等:概念
实验demo
Android运用
总结
Builder概念
作为一个开发人员,不论你是初入职场的菜鸟,还是这个领域的专家,在面对复杂多变的组织结构和频繁修改需求时,一个好的设计就显得尤为重要。如果一个类反复修改,我们使用传统的方式,会写很多的构造参数,如果修改的话,涉及到的都要修改,此时会很麻烦,不利于维护和扩展。此时,我们需要一种灵活多变的模式来应对多变的需求,builder模式就是其中一种。builder是对于我们的需求来说,主要架构和脉络不变,只是会改变它的细节(增加或减少),让开发者快速维护的一种模式。那么写个demo吧。
思路 (模型测试):
写类 :目的就是数据传入,并能分别获取。
传统写法:
Bean:
public class DesignBean implements Serializable { private static final long serialVersionUID = 2035522819932441426L; //三个参数 三个方法方便DesignBean获取各个参数 private String builder_name; private String builder_age; private String builder_score; public String getBuilder_name() { return builder_name; } public String getBuilder_age() { return builder_age; } public String getBuilder_score() { return builder_score; } //传参函数 public DesignBean(String builder_name, String builder_age, String builder_score) { this.builder_name = builder_name; this.builder_age = builder_age; this.builder_score = builder_score; } //检验数据是否显示正确toString() public String toString() { return "姓名: " + builder_name + ",年龄: " + builder_age + ",成绩: " + builder_score; } }
测试类:
public class MainActivity extends AppCompatActivity { TextView show; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); show = findViewById(R.id.show); show.setText(new DesignBean("zhangsan","18","80").toString()); } }
传参看上去有点乱,我们不知参数含义,不够明确。我们把传参这块交给Builder去管理。
改进:
Bean:
/** * 功能:测试Bean */ public class DesignBean implements Serializable { private static final long serialVersionUID = 2035522819932441426L; //三个参数 三个方法方便DesignBean获取各个参数 private String builder_name; private String builder_age; private String builder_score; public String getBuilder_name() { return builder_name; } public String getBuilder_age() { return builder_age; } public String getBuilder_score() { return builder_score; } //给Builder提供数据传递的方法 public DesignBean(String builder_name, String builder_age, String builder_score) { this.builder_name = builder_name; this.builder_age = builder_age; this.builder_score = builder_score; } public static class Builder { private String builder_name; private String builder_age; private String builder_score; //链式结构,开放三个参数 三个方法归Builder调用 public Builder addName(String name) { this.builder_name = name; return this; } public Builder addAge(String age) { this.builder_age = age; return this; } public Builder addScore(String score) { this.builder_score = score; return this; } //把Builder获取的数据返给DesignBean,达到目的 public DesignBean create() { return new DesignBean(builder_name, builder_age, builder_score); } } //检验数据是否显示正确toString() public String toString() { return "姓名: " + builder_name + ",年龄: " + builder_age + ",成绩: " + builder_score; } }
测试:
public class MainActivity extends AppCompatActivity { TextView show; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); show = findViewById(R.id.show); DesignBean designBean = new DesignBean.Builder().addName("zhangsan").addAge("18").addScore("80").create(); show.setText("一条数据展示>>>\n"+designBean.toString()+"\n--------------------\n详细展示>>>\n姓名:"+designBean.getBuilder_name()+"\n年龄:"+designBean.getBuilder_age()+"\n成绩:"+designBean.getBuilder_score()); } }
结果:
这种方式下,我们可以清楚每个参数含义。
Android 中可以用来写dialog:
public class BarOrderDialog extends Dialog { public BarOrderDialog(Context context) { super(context, R.style.commondialogstyle); } public static class Builder { private Context context; private OnChangeListener onChangeListener; private TextView orderbyname01, orderbyname02; private String name01,name02; public interface OnChangeListener { void orderbyname01(); void orderbyname02(); } public Builder setActionName01(String name01){ this.name01 = name01; return this; } public Builder setActionName02(String name02){ this.name02 = name02; return this; } public Builder(Context context) { this.context = context; } public Builder setOnClickListener(OnChangeListener onChangeListener) { this.onChangeListener = onChangeListener; return this; } public BarOrderDialog create() { final BarOrderDialog tiebaDialog = new BarOrderDialog(context); View view = LayoutInflater.from(context).inflate(R.layout.dialog_bar_order, null); orderbyname01 = (TextView) view.findViewById(R.id.orderbyname01); orderbyname02 = (TextView) view.findViewById(R.id.orderbyname02); orderbyname01.setText(name01); orderbyname02.setText(name02); orderbyname01.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onChangeListener.orderbyname01(); } }); orderbyname02.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onChangeListener.orderbyname02(); } }); Window win = tiebaDialog.getWindow(); win.getDecorView().setPadding(0, 0, 0, 0); WindowManager.LayoutParams lp = win.getAttributes(); //宽度可从开屏页获取 DisplayMetrics d = context.getResources().getDisplayMetrics(); // 获取屏幕宽、高用 lp.width = (int) (d.widthPixels * 0.7); //0.8*宽 lp.height = WindowManager.LayoutParams.WRAP_CONTENT; win.setAttributes(lp); win.setGravity(Gravity.CENTER); tiebaDialog.setContentView(view); tiebaDialog.setCanceledOnTouchOutside(true); return tiebaDialog; } } }
使用时:
if (barOrderDialog == null) { barOrderDialog = new BarOrderDialog.Builder(TieBaActivity.this).setActionName01("查看方式01").setActionName02("查看方式02").setOnClickListener(new BarOrderDialog.Builder.OnChangeListener() { @Override public void orderbyname01() { // order_text.setText("查看方式01"); // order_text_float.setText("查看方式01"); barOrderDialog.dismiss(); } @Override public void orderbyname02() { // order_text.setText("查看方式02"); // order_text_float.setText("查看方式02"); barOrderDialog.dismiss(); } }).create(); }
相关文章推荐
- android使用Java设计模式建造者模式(Builder模式)的写法:
- android学习日记27--Dialog使用及其设计模式
- Android : Builder模式 详解及学习使用
- Android使用Builder模式自定义Dialog
- android 使用Builder模式 构建自定义title
- android 使用Builder设计模式,设计ToolBar
- Android中使用软件设计模式之观察者模式、Builder模式、单例模式、简单工厂模式
- 设计模式的Builder模式[结合使用Android中的MediaRecorder来浅析]
- Android设计模式——Builder模式之源码使用场景(二)
- .Net Framework中使用的模式-Builder模式
- Android系统Recovery工作原理之使用update.zip升级过程分析(三)---Android系统的三种启动模式
- Android RenderScript 使用 Struct 及其下标的赋值 推荐
- Android系统Recovery工作原理之使用update.zip升级过程分析(三)---Android系统的三种启动模式
- Android系统Recovery工作原理之使用update.zip升级过程分析(四)---Android系统Recovery模式的工作原理
- Android系统Recovery工作原理之使用update.zip升级过程分析(三)---Android系统的三种启动模式
- Android系统Recovery工作原理之使用update.zip升级过程分析(四)---Android系统Recovery模式的工作原理
- android.mk 中GUN makefile的宏函数及其使用
- Android学习-使用单例模式实现一键退出APP
- Java 之 Builder模式使用
- Android设计模式之Builder