定义:
将一个负责对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
使用使用场景:
1.相同的方法,不同的执行顺序,产品不同的结果
2.当初始化一个对象特别复杂,如参数多,且很多参数都具有默认值
实战
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());
}
总结:
作用:通常作为配置类的构造器将配置的构建和表示分离,避免过多的setter方法,通过链式调用
优点:
1.良好的封装性,可以使客户端不比知道产品内部组成的细节
2.独立,容易扩展
缺点:
1.会产生多余的Builder对象,消耗内存
网友评论