关闭

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

标签: javaandroid设计模式
1319人阅读 评论(0) 收藏 举报
分类:

最近,公司一个大牛问了个问题,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的对象,然后设置我们需要的属性,最后通过内部类的一个公有方法返回一个外部类的对象。

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

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:160179次
    • 积分:2025
    • 等级:
    • 排名:千里之外
    • 原创:46篇
    • 转载:8篇
    • 译文:0篇
    • 评论:50条
    写给自己
    在找到你的爱情以前
    我们的感情在流浪
    在找到你的团队以前
    我们的梦想在流浪

    没有人愿意选择奔波
    但是努力更让人踏实
    联系方式
    QQ:491150376

    打个广告,吉林长春,优格实战学院,招生啦,由多年一线工作经验的讲师授课,主打实战。
    培训课程包括Java,Web前端,Android,iOS,UI,产品,测试,欢迎大家咨询!
    博客专栏