使用 factory 來(lái)定義 一個(gè)工廠構(gòu)造函數(shù)
它返回一個(gè)該類(lèi)的實(shí)例睛榄,但是這個(gè)實(shí)例可以不是新的委乌。比如返回的實(shí)例可以從靜態(tài)屬性中取到嚼沿。
首先需要獲得一個(gè)實(shí)例
1. 我們可以在工廠構(gòu)造函數(shù)中調(diào)用該類(lèi)的一個(gè)具名構(gòu)造函數(shù)產(chǎn)生一個(gè)新的實(shí)例。
2. 緊接著將實(shí)例存在該類(lèi)的靜態(tài)屬性中衙四。
3. 然后返回這個(gè)實(shí)例。
再次獲得舊的實(shí)例
1. 現(xiàn)在需要對(duì)工廠構(gòu)造函數(shù)做一些改變为朋。
2. 首先工廠構(gòu)造函數(shù)入口處做判斷臂拓,判斷是否有緩存(已經(jīng)生成過(guò)該類(lèi)的實(shí)例)。
3. 如果沒(méi)有緩存习寸,則走 [首先需要獲得一個(gè)實(shí)例]胶惰。
4. 如果有緩存,則將緩存返回霞溪。
以上童番,就提供了封裝單例的辦法。
class DioUtil {
static final DioUtil _instance = DioUtil._internal();
Dio dio;
factory DioUtil() => _instance;
DioUtil._internal() {
if (null == dio) {
dio = new Dio(options);
dio.interceptors
.add(InterceptorsWrapper(onRequest: (RequestOptions options) {
return options;
}, onResponse: (Response response) {
return response;
}, onError: (DioError e) {
return e;
}));
}
}
}