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

【二】设计模式——建造者模式(Builder Pattern)

2016-11-26 21:22 531 查看

定义

建造者模式(Builder Pattern):

Separate the construction of a complex object from its representation so that the same construction process can create different representations.

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

类图



图中的设计使用到了多态,其实我们类似写一个接口或抽象类,然后声明一些构造一个事物的所有属性方法,然后再实现不同的类,填充不同的属性值,这样,就可以构造出不同的产品来~

在开发中却比较少的严格遵循这种结构,比如安卓里面的AlertDialog.Builder使用的方法却比较常见。

优缺点及注意事项

1. 优点:

更好的封装内部结构,对使用者来说放心的去构造就好,不用担心顺序之类的问题,最后create就可以生成想要的事物。

2.缺点:

会产生过多的Builder对象及Director对象,消耗内存

3.注意事项:

设计好类的结构,避免过多的产生无用的类和临时对象,最后生成Product的时候,考虑好各种属性的default值

使用场景

类的属性很多,构造比较麻烦,参数过多,例如AlertDialog.Builder、StringBuilder

不同的执行顺序,产生不同的结果

实现方式

这里就不去实现上面类图的结构了,分享一下StringBuilder的方法(简单常用):

先来看一下平时我们的使用方式:

StringBuilder sb = new StringBuilder();
sb.append("string").append(1).append(true).append(1.0f);


通过使用方式来看,可以传递各种类型的值,然后使用这种链式的调用,使代码看起来非常简洁调用也很方便,很好的将各种重载的方法串到一起,然后得到我们最终的结果。ps:当然上面的代码可以优化为String 的+进行拼接

那里面是怎么实现的呢?

先随便看一下append方法:

public StringBuilder append(String str) {
super.append(str);
return this;
}


可以注意到:
return this
,就是这个让我们可以进行链式调用,而其他的跟普通的没有什么两样,因此我们就可以模仿这种方式,构造参数较多的自定义类,例如之前的一篇博文实现:http://blog.csdn.net/yk3372/article/details/53053518 就是使用了这种方式,这样最后我们只要调用最后构造方法toString或create之类的方法,就可以得到我们想要的真实对象。

原文地址:http://blog.csdn.net/yk3372/article/details/53354394
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息