一、概述
在Retrofit的框架中用的最多的是建造者模式,建造者模式对象与设置的值相分离层次结构更加清晰,在使用的时候通过链式调用赋值,层次清晰明了,避免了我们要new不多的对象需要构造多个构造函数,或者创建对象后一个个的赋值,非常的方便。下面我们也模仿一个建造者模式看看其神奇之处。
二、实例代码
相关类介绍:
1.Book.java建造者中用到的实体
2.MyRetrofit.java建造者是在此类中实现的
3.测试方法以及打印日志
Book.java
package com.yw.rxjava3demo; import android.app.Service; import java.io.Serializable; import io.reactivex.Observable; import io.reactivex.Observer; /** * create by yangwei * on 2020-02-21 18:08 */ public class Book { private String id; private String name; public Book(String id, String name) { this.id = id; this.name = name; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
MyRetrofit.java
package com.yw.rxjava3demo; import java.util.List; /** * 模仿Retrofit的建造者模式 * create by yangwei * on 2020-02-26 11:15 */ public class MyRetrofit { private String name; private int age; private List<Book> datas; public String getName() { return name; } public int getAge() { return age; } public List<Book> getBooks() { return datas; } public MyRetrofit(String name, int age, List<Book> datas) { this.name = name; this.age = age; this.datas = datas; } public static final class Builder { private String name; private int age; private List<Book> datas; public Builder() { } public Builder setName(String name) { this.name = name; return this; } public Builder setAge(int age) { this.age = age; return this; } public Builder setList(List<Book> books) { this.datas = books; return this; } public MyRetrofit build() { return new MyRetrofit(this.name, this.age, this.datas); } } }
测试方法:
private void MyRetrofitBuildTest() { List<Book> datas = new ArrayList<>(); datas.add(new Book("1", "《萌鸡小队》")); datas.add(new Book("2", "《小猪佩奇》")); MyRetrofit retrofit = new MyRetrofit.Builder() .setName("杨洛峋") .setAge(1) .setList(datas) .build(); Log.e("姓名:", retrofit.getName()); Log.e("年龄:", retrofit.getAge() + ""); StringBuffer sb = new StringBuffer(); for (Book book : retrofit.getBooks()) { sb.append(book.getName()).append(","); } Log.e("喜欢:", sb.toString() + ""); }
打印日志:通过建造者模式构建数据后会打印姓名、年龄、以及喜欢的动漫
2020-02-26 11:29:20.312 32103-32103/? E/姓名:: 杨洛峋 2020-02-26 11:29:20.312 32103-32103/? E/年龄:: 1 2020-02-26 11:29:20.312 32103-32103/? E/喜欢:: 《萌鸡小队》,《小猪佩奇》,
ps:好了,本文比较简单,纯粹是因为retrofit框架,心血来潮模仿一个建造者模式