看源码模仿--Builder模式
来源:互联网 发布:程序员周末兼职 编辑:程序博客网 时间:2024/06/08 15:27
今天在研究Okhttp源码,看到Request类时发现该类使用Builder模式来构建Request,还有HttpUrl 、Okhttp等也使用了构建模式。
以下是根据Okhttp源码中的Request类模仿的模式。
package com.zghw.ack;/** * Created by zhanghw on 2017/9/7. * Builder模式构建Request请求对象 * 为了可以在多线程中使用,定义为不可变类 * 这个方式在builder 构造好对象后,Request不可变。 */public final class Request { final String method; final String url; //不提供默认new方法,让内部静态类Builder构建,主要进行copy Request(Builder builder) { this.method = builder.method; this.url = builder.url; } //仅提供读方法 public String getMethod() { return method; } //仅提供读方法 public String getUrl() { return url; } /** * 重新构建一个Builder对象,把当前request深度拷贝到新的对象中, * 然后调用builder 修改或追加组件。 * * @return */ public Builder newBuilder() { return new Builder(this); } public static class Builder { //字段一般和Request字段一样便于构建 String method; String url; //提供默认构造方法,创建对象一遍构建request public Builder() { this.method = "GET"; } //构造是用来拷贝的已有的 Builder(Request request) { this.method = request.method; this.url = request.url; } //构建组件method public Builder method(String method) { this.method = method; //返回当前Builder对象 return this; } //构建组件url public Builder url(String url) { this.url = url; return this; } //组件构建最后构建Request,这里是把当前builder对象拷贝到Request对象中。 public Request build() { if (url == null) { throw new NullPointerException("url==null"); } return new Request(this); } } public static void main(String args[]) { //链条式构建 Request request = new Request.Builder().method("POST").url("http:www.baidu.com").build(); //使用request重新构建一个新的Request对象,不存在添加或修改组件。 Request requestNew = request.newBuilder().method("DELETE").build(); System.out.println(request.toString() + "=" + request.getMethod() + " " + request.getUrl() + " , " + requestNew.toString() + "=" + requestNew.getUrl() + " " + requestNew.getMethod()); }}
阅读全文
0 0
- 看源码模仿--Builder模式
- 《Android源码设计模式》之Builder模式
- 模仿QQ连连看【思路、java源码】(未完待续)
- HttpClient4.3.6源码阅读 RequestConfig.Builder(Builder模式实践)
- 设计模式builder的C++实现源码
- Android源码分析之Builder模式
- Android源码分析之Builder模式
- Android源码中的Builder模式实现
- Android源码分析之Builder模式
- Android源码下常用的Builder模式
- Android源码分析之Builder模式
- Android设计模式源码解析之Builder模式
- Android设计模式源码解析之Builder模式
- android源码中的设计模式(1)--builder模式
- Android设计模式源码解析之Builder模式
- Builder模式演义(2)——OkHttp源码中的Builder模式
- 【AndroidUniversalImageLoader】源码学习之设计模式(Builder,Singleton,Strategy)
- Builder设计模式和AlertDialog的源码分析
- [SDUT](2851)懒虫小鑫 ---贪心
- C#进阶 03 快捷键
- 关于AVFoundation框架中的SessionPreset
- Python验证码识别 安装Pillow、tesseract-ocr与pytesseract模块的安装以及错误解决
- 如何在网页中嵌入自己想要的字体
- 看源码模仿--Builder模式
- MATLAB学习笔记二(关于图像处理)
- error lnk 2005 atlsd.lib
- surefire单元测试 并发 提速
- centos7.3yum安装mongodb3.4
- Maven四
- Codeforces Round #433 (Div. 1, based on Olympiad of Metropolises) C. Boredom
- xml 和 json
- Linux运维学习之路(8)管道及重定向