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
相关文章推荐
- VS2013编译duilibv1.1,“找不到Riched20.lib”的问题
- tableviewcell滑动显示多个按钮UITableViewRowAction(转载)
- LeetCode_63---Unique Paths II
- LeetCode_62---Unique Paths
- QueryPerformanceFrequency 和 QueryPerformanceCounter用法
- UICollectionView瀑布流制作
- Android UI 学习心得(一)
- JPA注解之“@GeneratedValue”详解
- .NET平台开源项目速览(6)FluentValidation验证组件介绍与入门(一)
- 【MAC使用技巧】QuickTime Player使用技巧
- android studio 新建项目 界面一直停在 【“building ‘ 项目名’ gradle project info”】
- 《Java程序设计》第16周周四:GUI编程及文件对话框的使用(项目二)
- GUI编程及文件对话框的使用
- Windows 10图标进化(从Build 9926开始):扁了 又不扁了
- Windows 10 Build 10151简体中文版多图预览
- requirejs使用
- iOS7之后UIBarButton在导航栏上的过大边距问题解决方案
- Google interview question: countSort questions
- android 子线程真的不能更新ui吗
- Google interview question: selection questions