您的位置:首页 > 产品设计 > UI/UE

Android Dialog中的Builder设计模式

2015-09-12 17:42 363 查看

1.Builder设计模式的定义

Builder模式定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构建它们。用户不知道内部的具体构建细节。Builder模式是非常类似抽象工厂模式,细微的区别大概只有在反复使用中才能体会到。

2.使用Builder模式所带来的好处

简单一句话,就是对创建复杂对象的过程和复杂对象的部件进行解耦。这里可以说得有点不太明白,我们就拿现实生活中的实际例子来说明一下。比如电脑的零部件包括:cup,内存条,硬盘,显卡等等,电脑的组装过程也相对复杂,builder模式就是将这些零部件与电脑的组装过程分离开。也许这些还是不够明白,说得更加直白一点就是,我们组装电脑的时候只关注把电脑的零部件组装成成品就行了,至于电脑的cpu,内存条等零部件是怎么生产出来的,这些我们不必关注了,这些对外部来说是隐藏的,这样就大大提高了生产效率和简化了复杂度。

3.简单使用Builder设计模式

首先需要定义一个接口,该接口中定义如何创建各个部件。

public interface Builder {
 //创建部件A
 void buildPartA();
 //创建部件B
 void buildPartB();
 //创建部件C
 void buildPartC();

 Product getResult();
}

该接口就是创建各个零部件的。

然后,使用Director类来构建复杂对象,实际上就是将其零部件组装成成品的过程。
public class Director {
 private Builder builder;
 public Director( Builder builder ) {
  this.builder = builder;
 }
 public void construct() {
  builder.buildPartA();
  builder.buildPartB();
  builder.buildPartC();
 }
}


接下来就应该有Builder接口的具体实现类:
public class ConcreteBuilder implements Builder {
 Part partA, partB, partC;
 public void buildPartA() {
  //这里是具体如何构建partA的代码
 };
 public void buildPartB() {
  //这里是具体如何构建partB的代码
 };
 public void buildPartC() {
  //这里是具体如何构建partB的代码
 };
 public Product getResult() {
  //返回最后组装成品结果
 };
}


最后,就是如何使用builder模式了

ConcreteBuilder builder = new ConcreteBuilder();
Director director = new Director( builder );
director.construct();
Product product = builder.getResult();


4.Android AlertDialog中Builder的使用

在android中,最常用到的Builder模式那就是AlertDialog.Builder了,下面来看看简单看一个简单的例子。
//显示基本的AlertDialog
private void showDialog(Context context) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setIcon(R.drawable.icon);
builder.setTitle("Title");
builder.setMessage("Message");
builder.setPositiveButton("Button1",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
setTitle("点击了对话框上的Button1");
}
});
builder.setNeutralButton("Button2",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
setTitle("点击了对话框上的Button2");
}
});
builder.setNegativeButton("Button3",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
setTitle("点击了对话框上的Button3");
}
});
builder.create().show();  // 构建AlertDialog, 并且显示
}
这段代码是很熟悉的dialog使用方法。这里就是使用Builder来构建复杂的AlertDialog对象。create()函数就是返回的一个AlertDialog对象。至于在Builder里面干了些什么事,即零部件是怎么创建的,我将在下一篇文章中进行讲解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: