[DesignPattern]Builder设计模式

模式的定义

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

模式的使用场景

  1. 相同的方法,不同的执行顺序,产生不同的事件结果时;
  2. 多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时;
  3. 产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能,这个时候使用建造者模式非常合适;

Android源码中的模式实现

在Android源码中,我们最常用到的Builder模式就是AlertDialog.Builder, 使用该Builder来构建复杂的AlertDialog对象。简单示例如下 :

//显示基本的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, 并且显示
    } 

优点与缺点


优点

  • 良好的封装性, 使用建造者模式可以使客户端不必知道产品内部组成的细节;
  • 建造者独立,容易扩展;
  • 在对象创建过程中会使用到系统中的一些其它对象,这些对象在产品对象的创建过程中不易得到。

缺点

  • 会产生多余的Builder对象以及Director对象,消耗内存;
  • 对象的构建过程暴露。

链接:https://www.jianshu.com/p/87288925ee1f

原文地址:https://www.cnblogs.com/geekformore/p/10070701.html

时间: 2024-08-06 14:50:24

[DesignPattern]Builder设计模式的相关文章

Builder设计模式

Builder设计模式:个人认为,核心在于两个类.Builder类和Director类.通过Builder类和Director类,把万事万物抽象为部件和组装两部分.通过两部分的配合,把最终的产品,展示给客户.上图,只组装了一款产品. 公司做大以后,不仅可以提供一款产品.根据已有的功能多少和精简,可以快速生产出多种的产品,只要不同的construct和Product就可以了.construct提供了三个功能,说明这是一款lenovo的thinkpadT430笔记本电脑.如果construct只提供

建造者(Builder)设计模式

建造者(Builder)设计模式 1.0.0 产生建造者模式的原因 ????在类的数据特别复杂的时候,创建一个类需要花费很长的时间,因为有些类需要根据不同的场合进行不同的初始化.在类结构比较复杂,而且初始化比较困难的情况下,封装好的类创建步骤可以减少工作量,提高稳定性.这就是为什么需要建造者模式的原因. 2.0.0 什么是建造者模式? 将复杂对象的构建和对象的表示分离,使得同样的构建过程可以创建不同的表示. 3.0.0 建造模式的使用场景 复杂对象的创建(参数较多,而且比较初始化困难)--->创

Builder 设计模式的学习

Buileder(生成器)-对象创建型模式 一 意图 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 二 适用性 在以下情况使用Build模式: 1 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时. 2 当构造过程必须允许被构造的对象有不同的表示时. 3 Builder模式要解决的也正是这样的问题: 当我们要创建的对象很复杂的时候(通常是由很多其他的对象组合而成), 我们要复杂对象的创建过程和这个对象的表示(展示)分离开来, 这样做的好处就是通过一

builder 设计模式

1.经典的Builder模式 Product /** * 计算机抽象类, 即Product角色 */ public abstract class Computer { protected String mBoard; protected String mDisplay; protected String mOS; public Computer() { } public void setBoard(String board) { mBoard = board; } public void set

设计模式 | 建造者模式/生成器模式(builder)

定义: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 结构:(书中图,侵删) 一个产品类 一个指定产品各个部件的抽象创建接口 若干个实现了各个部件的具体实现的创建类 一个指挥者,用于控制具体的创建过程,包含一个抽象创建接口的引用 实例: 书中使用了游戏中创建人物的例子,人都有头.四肢.躯干这些固定组成部分,但是高矮胖瘦各不相同. 我瞬间就想到了捏脸系统,虽然说捏脸系统把人物的各种细节都交给了用户设置,细节到嘴唇的弧度都可以用户调节. 但实际上创建过程还是固定不变的,

深入浅出设计模式 ------ Builder(生成器模式)

一. 定义  将一个复杂对象的构建与它的表示分离, 使得同样的构建过程可以创建不同的表示. 二. 结构  三. 参与者 Builder : 为创建一个Product对象的各个部件指定抽象接口. ConcreteBuilder : 实现Builder的接口以构造和装配该产品的各个部件.定义并明确它所创建的表示.提供一个检索产品的接口. Director : 构造一个使用(聚合:has-a的关系)Builder接口的对象.如下文代码ChefDirector类. Product : 表示被构造的复杂对

深入浅出设计模式 ------ Builder(生成器)

一. 定义  将一个复杂对象的构建与它的表示分离, 使得同样的构建过程可以创建不同的表示. 二. 结构  三. 参与者 Builder : 为创建一个Product对象的各个部件指定抽象接口. ConcreteBuilder : 实现Builder的接口以构造和装配该产品的各个部件.定义并明确它所创建的表示.提供一个检索产品的接口. Director : 构造一个使用(聚合:has-a的关系)Builder接口的对象.如下文代码ChefDirector类. Product : 表示被构造的复杂对

设计模式(三) 生成器(Builder)

1.定义 生成器是一种对象创建型的模式.生成器将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示. 2.适用性 当创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式时 当构造过程必须允许被构造的对象又不同的表示时 3.结构 Builder: 为创建一个Product对象的各个部件指定抽象接口.(工厂方法是为整个对象) ConcreteBuilder: 实现Builder的接口以构造和装配该产品的各个部件:定义并明确它所创建的表示:提供一个检索产品的接口. Dir

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

设计模式就是对相同部分进行归纳,归并,不仅仅包括对象(继承,多态)也包括业务逻辑,(流程结果等),以及数据存储(使用不同数据库).       使各个部分独立,解耦.使UI,业务逻辑,数据可以各自独立,更新等. 对建造者模式而言就是通过构建流程与具体表现的分离,抽象出构建过程.对相同或类似的构建过程进行分离,从而达到复用的目的. Director 制定product产生的顺序,各个部分准备好了以后,可以由实体类concretebuilder产生product. public interface