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

Creational模式之Builder模式

2015-06-29 09:53 453 查看

1.意图

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

查看更多请点击

2.别名



3.动机

一个RTF(Rich Text Format)文档交换格式的阅读器应能将RTF转换为多种正文格式。该阅读器可以讲RTF文档转化成不同ASCII文本或转换成一个能以交互方式编辑的正文窗口组件。但问题在于可能转换的数目是无限的。因此要能够很容易实现新的转换的增加,同时却不改变RTF阅读器。

4.适用性

以下情况使用Builder模式:

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

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

5.结构

工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性,其实建造者模式就是前面抽象工厂模式和最后的Test结合起来得到的。我们看一下代码:

6.代码示例

还和前面一样,一个Sender接口,两个实现类MailSender和SmsSender。最后:

实现代码:

首先,创建二者的共同接口::

[code]public interface Sender {
    public void Send();
}


其次,创建实现类:

[code]public class MailSender implements Sender {
    @Override
    public void Send() {
        System.out.println("this is mailsender!");
    }
}

public class SmsSender implements Sender {

    @Override
    public void Send() {
        System.out.println("this is sms sender!");
    }
}


最后,建造者类:

[code]public class Builder {

    private List<Sender> list = new ArrayList<Sender>();

    public void produceMailSender(int count){
        for(int i=0; i<count; i++){
            list.add(new MailSender());
        }
    }

    public void produceSmsSender(int count){
        for(int i=0; i<count; i++){
            list.add(new SmsSender());
        }
    }
}


测试类:

[code]public class Test {

    public static void main(String[] args) {
        Builder builder = new Builder();
        builder.produceMailSender(10);
    }
}


从这点看出,建造者模式将很多功能集成到一个类里,这个类可以创造出比较复杂的东西。所以与工程模式的区别就是:工厂模式关注的是创建单个产品,而建造者模式则关注创建符合对象,多个部分。因此,是选择工厂模式还是建造者模式,依实际情况而定。

7.相关模式

Abstract Factory与Builder相似,因为它也可以创建复杂对象。主要的区别是Builder模式着重于一步步构造一个复杂对象。而Abstract Factory着重于多个系列的产品对象(简单的或是复杂的)。Builder在最后的一步返回产品,而对于Abstract Factory来说,产品是立即返回的。

Composite通常是用builder生成的。

引用:

http://openhome.cc/Gossip/DesignPattern/DecoratorPattern.htm

http://item.jd.com/10057319.html

/article/1354307.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: