Builder模式
来源:互联网 发布:马鞍山知谷教育图片 编辑:程序博客网 时间:2024/06/05 16:33
1.定义
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
2.使用场景
(1)相同的方法,不同的执行顺序,产生不同的事件结果时。
(2)多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时。
(3)产品类非常复杂,或者产品类中的调用顺序不同产生了不同的作用,这个使用建造者模式非常适合。
(4)当初始化一个对象特别复杂时,如参数多,且很多参数有默认值。
3.简单实现
定义一个要建造对象的抽象类和实现类
//抽象类public abstract class Computer { protected String mOS; protected String mBoard; protected String mDisplay; public void setBoard(String mBoard) { this.mBoard = mBoard; } public void setDisplay(String mDisplay) { this.mDisplay = mDisplay; } public abstract void setOS(); @Override public String toString() { return "Computer [mOS=" + mOS + ", mBoard=" + mBoard + ", mDisplay=" + mDisplay + "]"; }}//实现类public class MacComputer extends Computer { @Override public void setOS() { mOS = "Mac"; }}
再定义一个抽象的builder类和builder实现类
public abstract class Builder { public abstract Builder setBoard(String mBoard); public abstract Builder setDisplay(String mDisplay); public abstract Builder setOS(); public abstract Computer create();}public class MacBookBuilder extends Builder { private Computer mComputer = new MacComputer(); @Override public Builder setBoard(String mBoard) { mComputer.setBoard(mBoard); return this; } @Override public Builder setDisplay(String mDisplay) { mComputer.setDisplay(mDisplay); return this; } @Override public Builder setOS() { mComputer.setOS(); return this; } @Override public Computer create() { return mComputer; }}
测试代码就一句话
public static void main(String[] args) { Computer computer = new MacBookBuilder().setBoard("111") .setDisplay("222").setOS().create(); System.out.println(computer); }
你会发现他和装饰类有点像,参考资料在这里:
http://blog.csdn.net/u010955843/article/details/24875903
4.总结
优点:
(1)良好的封装性,使用建造者模式可以使客户端不必知道产品内部组成细节。
(2)建造者独立,容易扩展。
缺点:
(1)会产生多余的Builder对象及Director对象(这里被我简化了),消耗内存。
0 0
- builder 模式
- Builder模式
- Builder 模式
- Builder模式
- builder模式
- builder模式
- Builder模式
- builder模式
- Builder模式
- Builder 模式
- Builder 模式
- Builder模式
- Builder模式
- builder模式
- builder模式
- builder模式
- Builder模式
- Builder模式
- 文章标题
- 线程的控制(常见方法)
- hdu 1006 Tick and Tick
- 算法基础之归并排序
- CS231n Assignment1--Q3
- Builder模式
- JVM的堆和栈以及GC算法的介绍
- python 中文 str 以及 unicode区别和互相转换
- MFC—— 窗口句柄获取
- 最新版本的Struts2+Spring4+Hibernate4三大框架整合(截止2014-10-15)
- LeetCode 380. Insert Delete GetRandom O(1) 题解
- 《HeadFirst设计模式》读书笔记-第1章-策略模式
- 泽泽在巴西(jzoj普及组模拟第三题)(超难)
- 模拟队列