android源码中和第三方框架中常见的Builder模式
来源:互联网 发布:龙骑战歌gm数据 编辑:程序博客网 时间:2024/06/07 04:05
Builder模式
Builder模式也是Java中常用的设计模式,在Android源码中和一些第三方框架中也很常用;
Builder的使用场景
1.相同的方法不同的执行顺序,产生不同的结果
2.多个部件,都可以装配到一个对象中,但是产生的运行结果又不同
3.产品类非常的复杂,或者产品类中的调用顺序不同产生了不同的作用
4.当初始化一个对象特别复杂,如参数多,且有很多的默认值时
Builder的简单实现
如果工厂去造一辆车,将车最基本的部件作为一个抽象类
public abstract class Car { protected String mEngine; protected String mType; protected String mColor; protected Car(){} //设置发动机 public void setEngine(String engine){ this.mEngine=engine; } //设置车型 public void setType(String type){ this.mType=type; } //设置颜色 public abstract void setColor();@Overridepublic String toString() { return "Car [mEngine=" + mEngine + ", mType=" + mType + ", mColor=" + mColor + "]";}}
例如现在我要组装一辆车小A
public class BlueBird extends Car{protected BlueBird(){} //设置车的颜色 @Override public void setColor() { mColor="蓝色"; }}
组装一辆车所需要的基本过程
public abstract class Builder { public abstract void buildEngine(String engine); public abstract void buildType(String type); public abstract void buildColor(); public abstract Car create();}
组装小A车所需要的基本过程
public class BlueBirdBuilder extends Builder { private Car mCar=new BlueBird(); @Override public void buildEngine(String engine) { mCar.setEngine(engine); } @Override public void buildType(String type) { mCar.setType(type); } @Override public void buildColor() { mCar.setColor(); } @Override public Car create() { return mCar; }}
开始组装汽车的机械臂
public class Plant { Builder mBuilder=null; public Plant (Builder builder){ this.mBuilder=builder; } public void build(String engine,String type) { mBuilder.buildColor(); mBuilder.buildEngine(engine); mBuilder.buildType(type); }}
启动机械臂并且设置如汽车的基本参数
public static void main(String[] args) { // TODO Auto-generated method stub Builder builder=new BlueBirdBuilder(); Plant plant=new Plant(builder); plant.build("1.5T", "小型车"); System.out.println(builder.create().toString()); }
上述的示例中通过BlueBirdBuilder来构建Car对象,而Plant封装了构建复杂产品对象的过程,对外部隐藏了具体的细节。Builder与Plant一起将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以构建不同的对象。但是在开发中Plant通常会被省略,而是直接使用一个Builder来进行对象的组装,这个Builder通常为链式调用,代码如下:new A().setC().setB().create();
那么上述的代码如何改为链式调用呢?我们只要从Builder 这个类下手将返回的void 改为Builder类型代码如下:
public abstract class Builder { public abstract Builder buildEngine(String engine); public abstract Builder buildType(String type); public abstract Builder buildColor(); public abstract Car create();}
BlueBirdBuilder继承了Builder所以也要进行修改
public class BlueBirdBuilder extends Builder { private Car mCar=new BlueBird(); @Override public Builder buildEngine(String engine) { mCar.setEngine(engine); return this; } @Override public Builder buildType(String type) { mCar.setType(type); return this; } @Override public Builder buildColor() { mCar.setColor(); return this; } @Override public Car create() { return mCar; }}
这样一个链式调用就组成了:
mBuilder.buildColor().buildEngine(engine).buildColor();
阅读全文
0 0
- android源码中和第三方框架中常见的Builder模式
- IOS中常见的第三方框架
- ANDROID 中常用的第三方框架
- Android中常用的第三方框架
- Android开发使用的常见第三方框架
- Android开发使用的常见第三方框架汇总
- Android开发使用的常见第三方框架汇总
- Android开发使用的常见第三方框架汇总
- Android开发使用的常见第三方框架汇总
- Android开发使用的常见第三方框架汇总
- Android开发使用的常见第三方框架汇总
- Android开发使用的常见第三方框架汇总
- Android开发使用的常见第三方框架汇总
- Android开发使用的常见第三方框架
- Android开发使用的常见第三方框架汇总
- Android开发使用的常见第三方框架汇总
- Android开发使用的常见第三方框架汇总
- Android开发使用的常见第三方框架汇总
- 【《Real-Time Rendering 3rd》 提炼总结】(八) 第九章 · 全局光照:光线追踪、路径追踪与GI技术进化编年史
- vim 配置文件语法
- Form表单input框设置可编辑与失效(readonly)
- 05-maven私服安装与使用
- MongoDB 数组查询
- android源码中和第三方框架中常见的Builder模式
- codeforces 862A 之 Mahmoud and Ehab and the MEX
- ubuntu 镜像地址 老版 最新版 LTS
- NVIDIA Tesla K80:怪物般的双芯计算卡
- IE8不支持jquery2以上的版本
- axure rp8.1 注册码
- 十年一顾, iOS 与 Android 这样改变了我们
- 通过GitHub和Hexo来搭建自己的个人博客
- 关于PHP的框架和CMS的区别,以及为什么我要好好学习框架