Android设计模式 Builder设计模式
2016-04-08 18:39
316 查看
Builder模式定义:
将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以构建不同的标识。
Builder模式的使用场景
(1)相同的方法,不同的执行顺序,产生不同的事件结果时。
(2)多个部件或零件,都可以装配到一个对象中,但是运行的结果又不相同时。
(3)产品类非常复杂,或者产品类中的调用顺序不同产生了不同的作用,这个时候建造者模式非常合适。
(4)当初始化一个对象特别复杂,如参数多,而且多参数都有默认值时。
Builder模式的简单实现:
//计算机抽象类
//具体的Computer类
//抽象Builder
//具体的Builder
//Director类
//测试类
输出结果:
Computer [mBoard=英特尔主板, mDisplay=三星显示器, mOs=Mac OS X 10.10]
注:学习自《Android源码设计模式解析与实战》;
将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以构建不同的标识。
Builder模式的使用场景
(1)相同的方法,不同的执行顺序,产生不同的事件结果时。
(2)多个部件或零件,都可以装配到一个对象中,但是运行的结果又不相同时。
(3)产品类非常复杂,或者产品类中的调用顺序不同产生了不同的作用,这个时候建造者模式非常合适。
(4)当初始化一个对象特别复杂,如参数多,而且多参数都有默认值时。
Builder模式的简单实现:
//计算机抽象类
public abstract class Computer { protected String mBoard; protected String mDisplay; protected String mOs; protected Computer() { } public void setBoard(String board) { mBoard = board; } public void setDisplay(String diapaly) { mDisplay = diapaly; } public abstract void setOs(); @Override public String toString() { return "Computer [mBoard=" + mBoard + ", mDisplay=" + mDisplay + ", mOs=" + mOs + "]"; } }
//具体的Computer类
public class MacBook extends Computer { @Override public void setOs() { mOs = "Mac OS X 10.10"; } }
//抽象Builder
public abstract class Builder { public abstract void buildBoard(String board); public abstract void buildDispaly(String display); public abstract void buildOS(); public abstract Computer create(); }
//具体的Builder
public class MacbookBuilder extends Builder { private Computer mComputer = new MacBook(); @Override public void buildBoard(String board) { mComputer.setBoard(board); } @Override public void buildDispaly(String display) { mComputer.setDisplay(display); } @Override public void buildOS() { mComputer.setOs(); } @Override public Computer create() { return mComputer; } }
//Director类
public class Director { Builder mBuilder = null; public Director(Builder mBuilder) { this.mBuilder = mBuilder; } public void construct(String board, String display) { mBuilder.buildBoard(board); mBuilder.buildDispaly(display); mBuilder.buildOS(); } }
//测试类
public class Test { public static void main(String[] args) { Builder builder = new MacbookBuilder(); Director pcDirector = new Director(builder); pcDirector.construct("英特尔主板", "三星显示器"); System.out.println(builder.create().toString()); Log.e("tag", builder.create().toString()); } }
输出结果:
Computer [mBoard=英特尔主板, mDisplay=三星显示器, mOs=Mac OS X 10.10]
通过具体的MacbookBuilder来构建Macbook对象,而Director封装了构建复杂产品对象的过程,对外隐藏构建细节。Buidler与Director一起将一个复杂对象构建与它的表示分离,使得同样的构建过程可以构建不容的对象。 在显示开发中,Director角色经常会被省略。而直接使用一个Builder进行一个对象的组装,这个Builder通常为链式调用,它的关键点是每个setter方法都返回自身,也就是return this,这样就是的setter方法可以链式调用,代码大致如下:
new TestBuilder().setA("A").setB("B").creat();
注:学习自《Android源码设计模式解析与实战》;
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories