前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android设计模式之建造者模式builder

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

作者头像
Hankkin
发布2018-09-06 17:59:40
3160
发布2018-09-06 17:59:40
举报
文章被收录于专栏:Android干货园Android干货园

版权声明:本文为博主原创文章,转载请标明出处。 https://cloud.tencent.com/developer/article/1331018

今天小编来说一下Android中的一种设计模式--建造者模式Builder

绪论:      

那么对于Android初级来说,Builder设计模式可能在我们开发中用过的很少,但是我们可能见过,我们经常用的AlterDialog.Builder就是一种建造者模式。那么到底什么是建造者模式呢?下面我们来看看它的标准定义:

定义:

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

看起来比较抽象,也不知道具体是什么意思?下面我举一个例子,通过代码来看看什么是建造者模式

举例:

代码语言:javascript
复制
package com;

/**
 * Created by Hankkin on 15/10/21.
 */
public class ImageBean {
    private int id; //图片id
    private String path;    //图片路径
    private long size;  //图片大小
    private String type;    //图片类型

    public ImageBean() {
    }

    public ImageBean(int id, String path, long size, String type) {
        this.id = id;
        this.path = path;
        this.size = size;
        this.type = type;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getPath() {
        return path;
    }

    public void setPath(String path) {
        this.path = path;
    }

    public long getSize() {
        return size;
    }

    public void setSize(long size) {
        this.size = size;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }
}

我们定义了一个ImageBean实体,里面包含id、path、size、type属性,其中还包含空的构造方法和一个包含参数的构造。这样我们在声明这个实体的时候可以给这个实体赋值。

ImageBean ib = new ImageBean(1,"xxxx","54321","jpg");

实体的参数个数少点还好,我们能记住构造的参数,如果这个实体有N个参数呢?我们怎样知道参数的顺序呢?代码的可读性并不高,如果不是你自己写的,别人根本看不懂,即便是自己写的,时间长了的话恐怕我们也都忘了。那么Builder模式就可以解决这种情况。我们可以给ImageBean建立一个Builder:

代码语言:javascript
复制
package com;

/**
 * Created by Hankkin on 15/10/21.
 */
public class ImageBean {
    private int id; //图片id
    private String path;    //图片路径
    private long size;  //图片大小
    private String type;    //图片类型

    public ImageBean() {
    }

    public ImageBean(Builder builder) {
        this.id = builder.id;
        this.path = builder.path;
        this.size = builder.size;
        this.type = builder.type;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getPath() {
        return path;
    }

    public void setPath(String path) {
        this.path = path;
    }

    public long getSize() {
        return size;
    }

    public void setSize(long size) {
        this.size = size;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }
    
    public static class Builder{
        private int id;
        private String path;
        private long size;
        private String type;
        
        public Builder id(int id){
            this.id = id;
            return this;
        }
        
        public Builder path(String path){
            this.path = path;
            return this;
        }
        public Builder size(long size){
            this.size = size;
            return this;
        }
        public Builder type(String type){
            this.type = type;
            return this;
        }
        
        public ImageBean build(){
            return new ImageBean(this);
        }
    }
}
代码语言:javascript
复制
ImageBean.Builder builder = new ImageBean.Builder();
ImageBean ib = builder.id(11).path("xxx").size(1111).type("jpg").build();

可以看到ImageBean的构造参数改成了这个builder,然后定义了一个和ImageBean一样的Builder,返回值都是builder对象。这就是定义里面说的构造和表示分离,构造是ImageBean中来构造,而显示则在Builder中显示。也就是分布构造每一部分。

以上只是builder设计模式的一种用法

总结:

在以下情况使用Build模式:

1 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。

2 当构造过程必须允许被构造的对象有不同的表示时。

3 Builder模式要解决的也正是这样的问题:

  当我们要创建的对象很复杂的时候(通常是由很多其他的对象组合而成),

  我们要复杂对象的创建过程和这个对象的表示(展示)分离开来,

  这样做的好处就是通过一步步的进行复杂对象的构建,

  由于在每一步的构造过程中可以引入参数,使得经过相同的步骤创建最后得到的对象的展示不一样。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015年10月21日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 绪论:      
  • 定义:
  • 举例:
  • 总结:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档