android 创建者(builder)模式
来源:互联网 发布:自学素描的软件 编辑:程序博客网 时间:2024/05/22 11:54
android 创建者(builder)模式
builder模式
属创建型模式,它将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
使用场景:
相同的方法,不同的执行顺序,产生不同的事件结果时;
多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时;
产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能,这个时候使用建造者模式非常合适;
形如OkHttp对象、Retrofit对象创建:
OkHttp对象的创建
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.cache(getCache())
.addInterceptor(new HttpCacheInterceptor())
.addInterceptor(new LogInterceptor())
.addNetworkInterceptor(new HttpRequestInterceptor())
.build();
Retrofit对象的创建
Retrofit retrofit = new Retrofit.Builder()
.client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.baseUrl(BASE_URL)
.build();
OkHttpClient原型类(精简builder框架):
public class OkHttpClient implements Cloneable, Call.Factory { ... final Dispatcher dispatcher; ... final int writeTimeout; public OkHttpClient() { this(new Builder()); } private OkHttpClient(Builder builder) { this.dispatcher = builder.dispatcher; ... this.writeTimeout = builder.writeTimeout; } public Builder newBuilder() { return new Builder(this); } public static final class Builder { Dispatcher dispatcher; ... int writeTimeout; public Builder() { dispatcher = new Dispatcher(); ... writeTimeout = 10_000; } Builder(OkHttpClient okHttpClient) { this.dispatcher = okHttpClient.dispatcher; ... this.writeTimeout = okHttpClient.writeTimeout; } public OkHttpClient build() { return new OkHttpClient(this); } }}
builder模式一般程序结构形式(可以很灵活):
public class Student { private final String mName; //属性声明为final(Student类是不可变的) private final int mAge; private final String mGender; //Student类构造方法是私有的,不可以直接通过new来创建,对属性值只提供getter方法 private Student(Builder builder) { mName = builder.mName; mAge = builder.mAge; mGender = builder.mGender; } public String getmName() { return mName; } public int getmAge() { return mAge; } public String getmGender() { return mGender; } public static final class Builder { private String mName; private int mAge; private String mGender; public Builder(String name, int age, String gender) { mName = name; mAge = age; mGender = gender; } public Builder(Student student) { mName = student.mName; mAge = student.mAge; mGender = student.mGender; } public Builder mName(String val) { mName = val; return this; } public Builder mAge(int val) { mAge = val; return this; } public Builder mGender(String val) { mGender = val; return this; } public Student build() { //静态内部类build方法,传入自身的引用给外部类带参构造函数实现外部类的实例化 return new Student(this); } }} Student student0 = new Student.Builder("王小明", 7, "") // 演示用法而已 .mGender("女") .build();Student student1 = new Student.Builder(student0) .build();
- android 创建者(builder)模式
- 创建者模式(Builder)
- 创建者模式(Builder)
- 设计模式 (四)创建者模式(Builder)
- 设计模式 (四)创建者模式(Builder)
- 设计模式 (四)创建者模式(Builder)
- Builder模式(创建者模式)
- 设计模式学习笔记:Builder(创建者)
- Builder 创建者模式
- 创建者模式 builder
- Builder模式---创建者
- Builder - 创建者模式
- Builder - 创建者模式
- 设计模式-创建者模式(Builder)
- 设计模式(五)创建者模式(Builder)-创建型
- 设计模式(五)创建者模式(Builder)
- 设计模式 一 创建者模式 Builder(生成器)
- JAVA设计模式——创建者模式(builder)
- 全栈的苦逼
- 动态加载so库的实现方法与问题处理
- CPP单元测试
- byte[]和InputStream的相互转换
- GCD多线程编程
- android 创建者(builder)模式
- HTML5之画布(canvas)(二)
- 学习计划201706
- HTTP协议【状态码】
- Unity 各种特性之用法说明
- 闭包学习笔记
- Netty教程-ChannelHandler
- java struts如何将action替换成html或者do
- test1-addblog