随着写代码越来越多,感觉整个架构设计还是挺重要的。记录一下
一.链式调用思想
发现很多架构都使用链式调用,最经典就是Rxjava了。其实这是一种builder模式。builder模式呢,就是每调用一个方法,仍然返回builder,直到调用build方法才返回需要构建的对象,例如下面代码,
package com.clj.fastble.scan;
import com.clj.fastble.BleManager;
import java.util.UUID;
public class BleScanRuleConfig {
private UUID[] mServiceUuids = null;
private String[] mDeviceNames = null;
private String mDeviceMac = null;
private boolean mAutoConnect = false;
private boolean mFuzzy = false;
private long mScanTimeOut = BleManager.DEFAULT_SCAN_TIME;
public UUID[] getServiceUuids() {
return mServiceUuids;
}
public String[] getDeviceNames() {
return mDeviceNames;
}
public String getDeviceMac() {
return mDeviceMac;
}
public boolean isAutoConnect() {
return mAutoConnect;
}
public boolean isFuzzy() {
return mFuzzy;
}
public long getScanTimeOut() {
return mScanTimeOut;
}
public static class Builder {
private UUID[] mServiceUuids = null;
private String[] mDeviceNames = null;
private String mDeviceMac = null;
private boolean mAutoConnect = false;
private boolean mFuzzy = false;
private long mTimeOut = BleManager.DEFAULT_SCAN_TIME;
public Builder setServiceUuids(UUID[] uuids) {
this.mServiceUuids = uuids;
return this;
}
public Builder setDeviceName(boolean fuzzy, String... name) {
this.mFuzzy = fuzzy;
this.mDeviceNames = name;
return this;
}
public Builder setDeviceMac(String mac) {
this.mDeviceMac = mac;
return this;
}
public Builder setAutoConnect(boolean autoConnect) {
this.mAutoConnect = autoConnect;
return this;
}
public Builder setScanTimeOut(long timeOut) {
this.mTimeOut = timeOut;
return this;
}
void applyConfig(BleScanRuleConfig config) {
config.mServiceUuids = this.mServiceUuids;
config.mDeviceNames = this.mDeviceNames;
config.mDeviceMac = this.mDeviceMac;
config.mAutoConnect = this.mAutoConnect;
config.mFuzzy = this.mFuzzy;
config.mScanTimeOut = this.mTimeOut;
}
public BleScanRuleConfig build() {
BleScanRuleConfig config = new BleScanRuleConfig();
applyConfig(config);
return config;
}
}
}
Builder内作为静态的内部类。
使用方法如下:
BleScanRuleConfig scanRuleConfig = new BleScanRuleConfig.Builder()
.setServiceUuids(serviceUuids) // 只扫描指定的服务的设备,可选
.setDeviceName(true, names) // 只扫描指定广播名的设备,可选
.setDeviceMac(mac) // 只扫描指定mac的设备,可选
.setAutoConnect(isAutoConnect) // 连接时的autoConnect参数,可选,默认false
.setScanTimeOut(10000) // 扫描超时时间,可选,默认10秒
.build();







网友评论