IAndroid培训教程设计模式之六大原则解析.docxVIP

IAndroid培训教程设计模式之六大原则解析.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
IAndroid培训教程设计模式之六大原则解析

单一职责原则 SRPSingle Responsibility Principle场景: 如果让你写出一个图片缓存类, 要求内部实现缓存策略, 并提供方法只需要传递控件和图片地址就可以自动设置背景的类.先给出最简单直接的写法.public class ImageLoader { /** * 图片的缓存 */ LruCacheString , Bitmap mImageCache; /** * 线程池 */ExecutorService mExecutorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); public ImageLoader(){ // 初始化内存缓存策略 initImageCache(); } private void initImageCache() { // 获得可使用的最大内存 final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024); // 设置 1/4 的最大内存为作为缓存 final int cacheSize = maxMemory / 4; mImageCache = new LruCacheString,Bitmap(cacheSize){ @Override protected int sizeOf(String key, Bitmap value) { // 返回缓存的bitmap大小 return value.getRowBytes() * value.getHeight() /1024 ; } }; } public void displayImage(final ImageView iv, final String imgUrl){ // 获取缓存 Bitmap bitmap = mImageCache.get(imgUrl); if(null != bitmap){ iv.setImageBitmap(bitmap); return; } // 网络加载 iv.setTag(imgUrl); mExecutorService.submit(new Runnable() { @Override public void run() { Bitmap bitmap = downloadImage(imgUrl); if (null == bitmap) return ; if (iv.getTag().equals(imgUrl)) { iv.setImageBitmap(bitmap); } mImageCache.put(imgUrl,bitmap); } }); } /** * 根据图片的url下载图片并转换成bitmap对象返回 */ public Bitmap downloadImage(String url){ Bitmap bitmap = null; try { URL url1 = new URL(url); HttpURLConnection conn = (HttpURLConnection) url1.openConnection(); bitmap = BitmapFactory.decodeStream(conn.getInputStream()); conn.disconnect(); } catch (Exception e) { e.printStackTrace(); } return bitmap; }}``` 对于功能来说这是没有问题的. 但是接下来分析一下. 这样写会有什么弊端. 1. 首先这个类的职责包括了两个`控件设置背景的逻辑`和`图片下载的逻辑`. 耦合性太强,2. `类的职责过多`那么就会造成类中的代码更多,两个逻辑的代码会交叉分布. 不易被阅读.3. `扩展性`随着后续的实现`磁盘缓存`修改`加载图片`逻辑等会让代码越来越复杂难懂. 那么重构一下, 让两个职责分离开来. ```java/** * 处理图片的加载 */public class ImageLoader { /** * 图片的缓存 */ ImageCache mImageCache = new ImageCache(); /** * 线程池 */ ExecutorService mExecutorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); public void displayImage(final ImageView iv, final String

文档评论(0)

lisufan + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档