设计模式:Android AlertDialog的builder(建造者模式)

原创 2015年11月19日 16:42:20

最近,公司一个大牛问了个问题,Android中的AlertDialog的创建方法AlertDialog.Builder 是什么形式,有什么好处?
所以,最近一直都在看设计模式。
然后自己一点总结,在此记录一下:

建造者模式

将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。

建造者模式的具体介绍,请移步我的上一篇blog 设计模式:Java 建造者模式(Builder)
在此就不多做介绍了,本文主要说的是Android的AlertDialog

建造者模式通常包括下面几个角色:

  1. builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建。

  2. ConcreteBuilder:实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。 在建造过程完成后,提供产品的实例。

  3. Director:调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。

  4. Product:要创建的复杂对象。

具体如下图:
建造者模式

通过前文知道,一般建造者模式,都是把一系列具有共同属性、不同表现形式的对象抽象出来,通过一个接口 builder 来规定其所具有的属性。然后通过指导者 Director 来把builder 中的属性安装一定的规则组装起来。
我们事先需要把 接口builder和领导者 Director 定义好。
然后每当有具备此属性的新的实例的话,只需要写其基于builder的实现类,来设定其各种属性,而不需要再去实装一遍。

但是,Android中的AlertDialog中的Builder,并不是这种实现方式。
通过源码看以看出,AlertDialog中的Builder是一个内部类。

我们可以这样理解:

  1. AlertDialog中的Builder也对应 构建者模式的builder,他同样规定了,这个对象所具有的属性。

  2. 然后AlertDialog中的AlertController对应构建者模式的 Director,其中AlertController.AlertParams 记录了Builder中的所有属性,然后通过AlertDialog的构造方法实现了对象的构造

那么两种方式有什么不同呢?

  1. 实现接口的形式,接口中定义的方法,其实现类都必须实现。而且,实现类可以定义自己的方法。这样构建出来的所有Builder都不是同一个类的对象。并且都具有一部分相同的必须属性和一部分私有的属性。(这里属性,对应的是接口中的方法)。但是,内部类的形式,因为我们每次都是去实例化一个内部类的对象,所以,每一个构建出的Builder都是同一个类的对象,都具有相同的属性,但是可以根据我们自己的选择来设置不同的属性,然后在Director中根据属性的不同来显示不同的形式。

  2. 实现接口的形式,其创建,是把对应的Builder传入Director 去创建,然后在builder中提供一个公有的方法,来返回创建完成的对象。而内部类的形式,是实例化一个内部类Builder的对象,然后设置我们需要的属性,最后通过内部类的一个公有方法返回一个外部类的对象。

这只是自己的一点见解,比较肤浅,希望有幸看到这篇文章的人,可以提出问题,大家共同进步。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

设计模式:Java 建造者模式(Builder)

Java 建造者模式(Builder) 最近在看Android的源码,发现里面有很多设计模式,而这块也正是我所欠缺的。一边查一边学一边看。 下面整理一下: Builder 模式 —— 建造者模式...

Android Dialog中的Builder设计模式

1.Builder设计模式的定义 Builder模式定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 Builder模式是一步一步创建一个复杂的对象,它允许用户可以只...

安卓下Builder模式解析+自定义Dialog实战演练

**本文将从一下几个方面展开: 1Bulider模式的原理和使用 2系统Dailog的调用 3自定义Dailog 4自定义Dailog的一些小坑**本文Github代码链接 https://...

Android中建造者模式自定义Dialog

序言     由于Android系统的碎片化比较严重,加之Android采用开源方式,世界各大OEM厂商都对自家的Android系统进行了深度定制,那么这些原因会给我们开发者带来一些个麻烦,比如说,我...

Android设计模式之建造者模式(Builder Pattern)

一 Builder模式介绍及使用场景Builder模式是一步一步创建一个复杂对象的创建者模式,它允许用户在不知道内部构建细节的情况下,可以更精细地控制对象的构造流程。该模式是为了将复杂对象的过程和它...

Android设计模式之建造者模式(builder pattern)

builder设计模式我们很常见,比如我们使用AlertDialog的时候就使用的builder设计模式,著名的Universal-Image-Loader的初始化配置也是使用的builder设计模式...

Android设计模式之建造者模式(Builder Pattern)

假如一个对象由许多不同的属性构造,我们想要构造一个我们自己指定特定属性的对象,最简单的方法就是为每种情况提供一个构造函数,我们根据不要的构造函数来得到我们需要的包含了指定属性的对象。我们还是举个例子吧...

Android设计模式之建造者模式builder

今天小编来说一下Android中的一种设计模式--建造者模式Builder 绪论:       那么对于Android初级来说,Builder设计模式可能在我们开发中用过的很少,但是我们可能见过,...
  • lyhhj
  • lyhhj
  • 2015-10-21 14:00
  • 777
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)