版权声明:本文为博主原创文章,未经允许不得转载,如有问题,欢迎指正,谢谢! https://blog.csdn.net/cbk861110/article/details/88085565
设计模式项目源码请移步:https://github.com/caobaokang419/WeatherApp(欢迎Github Fork&Star,代码设计模式&框架设计实现不妥之处,请帮忙指正),谢谢!
建造者模式(Builder)
1. 概念
Separate the construction of a complex object from its representation so that the sameconstruction process can create different representations.
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
2. 应用场景
a. 相同的方法,不同的执行顺序,产生不同的事件结果时,可以采用建造者模式。
b. 多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时,则可以使用该模式。
c. 产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能,这个时候使用建造者模式非常合适。
d. 在对象创建过程中会使用到系统中的一些其他对象,这些对象在产品对象的创建过程中不易得到时,也可以采用建造者模式封装该对象的创建过程。该种场景只能是一个补偿方法,因为一个对象不容易获得,而在设计阶段竟然没有发觉,而要通过创建者模式柔化创建过程,本身已经违反设计的最初目标。
3. 代码实践(以Retrofit&OkHttpClient的对象构建为例,具体Builder实现方式参照框架源码):
private void initRetrofit() { /*GoF23 设计模式 3:Builder模式*/ mRetrofit = new Retrofit.Builder() .baseUrl(ApiContants.AMAP_BASE_URL)//设置服务器路径 .client(mOkHttpClient)//设置使用okhttp网络请求 .addConverterFactory(GsonConverterFactory.create())//添加转化库,默认是Gson .addCallAdapterFactory(RxJava2CallAdapterFactory.create())//添加回调库,采用RxJava .build(); }
private void initOkHttpClient() { HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(); httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); mOkHttpClient = new OkHttpClient.Builder() .connectTimeout(DEFAULT_CONNECT_TIME, TimeUnit.SECONDS)//连接超时时间 .writeTimeout(DEFAULT_WRITE_TIME, TimeUnit.SECONDS)//设置写操作超时时间 .readTimeout(DEFAULT_READ_TIME, TimeUnit.SECONDS)//设置读操作超时时间 .addInterceptor(httpLoggingInterceptor) .build(); }