Android 设计模式实战 Builder模式

定义:

将一个负责对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示

使用使用场景:

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对象,消耗内存

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,088评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,209评论 18 399
  • 面向对象的六大原则 单一职责原则 所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于...
    JxMY阅读 4,505评论 1 3
  • 本人初学Android,最近做了一个实现安卓简单音乐播放功能的播放器,收获不少,于是便记录下来自己的思路与知识总结...
    落日柳风阅读 19,352评论 2 41
  • Glide的使用 Glide是google开发用于Android加载媒体的类库,包括图片,gif,video,已经...
    敖大胆阅读 12,361评论 2 17

友情链接更多精彩内容