定義:
將一個(gè)負(fù)責(zé)對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示
使用使用場景:
1.相同的方法赏酥,不同的執(zhí)行順序砂蔽,產(chǎn)品不同的結(jié)果
2.當(dāng)初始化一個(gè)對象特別復(fù)雜,如參數(shù)多奕纫,且很多參數(shù)都具有默認(rèn)值
實(shí)戰(zhàn)
public final class ImageLoaderConfiguration {
final DiskCachediskCache;
private ?ImageLoaderConfiguration(final ?Builder builder) {
? ? ? diskCache= builder.diskCache;
}
public static? ImageLoaderConfiguration createDefault(Context context) {
return new ?Builder(context).build();
}
public static class ?Builder {
? ? ? ? ? ? ? ?private DiskCachediskCache=null;
? ? ? ? ? ? ? ? public Builder(Context context) {
? ? ? ? ? ? ? ? ? ? this.context= context.getApplicationContext();
? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? public? ImageLoaderConfiguration build() {
? ? ? ? ? ? ? ? ? ? ? ? ?initEmptyFieldsWithDefaultValues();
? ? ? ? ? ? ? ? ? ? ? ? ?return newImageLoaderConfiguration(this);
? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ?private void ? initEmptyFieldsWithDefaultValues() {
? ? ? ? ? ? ? ? ? ?if(diskCache==null) {
? ? ? ? ? ? ? ? ? ? ? ? ?diskCache= DefaultConfigurationFactory
? ? ? ? .createDiskCache(context,diskCacheFileNameGenerator,diskCacheSize,diskCacheFileCount);
}
? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ?public ?Builder discCache(DiskCache diskCache) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?return ?diskCache(diskCache);
? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? public ? ?Builder ?diskCache(DiskCache diskCache) {
? ? ? ? ? ? ? ? ? ?if(diskCacheSize>0||diskCacheFileCount>0) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?L.w(WARNING_OVERLAP_DISK_CACHE_PARAMS);
}
? ? ? ? ? ? ? ? if(diskCacheFileNameGenerator!=null) {
L.w(WARNING_OVERLAP_DISK_CACHE_NAME_GENERATOR);
? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? ? ?this.diskCache= diskCache;
? ? ? ? ? ? ? ? ? ? ? ?return this;
? ? ? ? ? ? }
}
}
使用方法
public static void ?initImageLoader(Context context) {
?ImageLoaderConfiguration.Builder ?config=new ImageLoaderConfiguration.Builder(context);
config.diskCacheFileNameGenerator(new Md5FileNameGenerator());
config.writeDebugLogs();// Remove for release app
?ImageLoader.getInstance().init(config.build());
}
總結(jié):
作用:通常作為配置類的構(gòu)造器將配置的構(gòu)建和表示分離,避免過多的setter方法烫沙,通過鏈?zhǔn)秸{(diào)用
優(yōu)點(diǎn):
1.良好的封裝性匹层,可以使客戶端不比知道產(chǎn)品內(nèi)部組成的細(xì)節(jié)
2.獨(dú)立,容易擴(kuò)展
缺點(diǎn):
1.會(huì)產(chǎn)生多余的Builder對象锌蓄,消耗內(nèi)存