(随记二)Android设计模式解析与实战_面对对象六大原则之开闭原则
来源:互联网 发布:泛突厥主义知乎 编辑:程序博客网 时间:2024/05/21 19:35
(随记二)Android设计模式解析与实战_面对对象六大原则之开闭原则 :
* 让程序更稳当更灵活* 定义 : 代码中的对象(类、模块、函数等)一个对于扩展是开放的,但是对于修改是封闭的。* 简单来说就是 : 可以使用继承或者实现来修改功能,而不是在原来的代码里面进行修改
代码示例
package com.yt.ImageLoader; import android.graphics.Bitmap; import android.support.v4.util.LruCache; /** * author : YiTao * Created by TaoyYi on 2016/12/16. * describe : 图片缓存接口,所有图片缓存均实现次接口 */ public interface ImageCache { public Bitmap get(String url); public void put(String url, Bitmap bitmap); }
-
package com.yt.ImageLoader; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.widget.ImageView; import java.net.HttpURLConnection; import java.net.URL; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * author : YiTao * Created by TaoyYi on 2016/12/16. * describe : 图片加载 */ public class ImageLoader { private final ExecutorService mExecutorService; public ImageLoader() { //线程池数量为cpu数量 mExecutorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); } //图片缓存 ImageCache mImageCache = new MemoryCache(); //默认缓存内存缓存 //注入缓存实现(修改缓存方案) public void setImageCache(ImageCache imageCache) { mImageCache = imageCache; } /** * 显示图片 * * @param url * @param imageView */ public void displayImage(final String url, final ImageView imageView) { final Bitmap bitmap = mImageCache.get(url); if (bitmap != null) { imageView.setImageBitmap(bitmap); return; } else { //缓存中没有图片,提交到线程池下载图片 submitLoadRequest(url, imageView); } } /** * 线程池提交加载网络图片的请求 * * @param url * @param imageView */ private void submitLoadRequest(final String url, final ImageView imageView) { imageView.setTag(url); mExecutorService.submit(new Runnable() { @Override public void run() { Bitmap netBitmap = downloadImage(url); if (netBitmap == null) { return; } else { if (imageView.getTag().equals(url)) { imageView.setImageBitmap(netBitmap); } mImageCache.put(url, netBitmap); } } }); } /** * 下载图片 * * @param imageUrl * @return */ public Bitmap downloadImage(String imageUrl) { Bitmap bitmap = null; try { URL url = new URL(imageUrl); final HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); bitmap = BitmapFactory.decodeStream(urlConnection.getInputStream()); urlConnection.disconnect(); } catch (Exception e) { e.printStackTrace(); } return bitmap; } }
-
package com.yt.ImageLoader; import android.graphics.Bitmap; /** * author : YiTao * Created by TaoyYi on 2016/12/16. * describe : SD卡缓存 */ public class DiskCache implements ImageCache { /** * 从本地文件获取该图片 * * @param url * @return */ @Override public Bitmap get(String url) { return null; } /** * 将Bitmap写入文件 * * @param url * @param bitmap */ @Override public void put(String url, Bitmap bitmap) { } }
-
package com.yt.ImageLoader; import android.graphics.Bitmap; import android.util.LruCache; /** * author : YiTao * Created by TaoyYi on 2016/12/16. * describe : 内存缓存 */ public class MemoryCache implements ImageCache { private LruCache<String, Bitmap> mMemoryCache; public MemoryCache() { //初始化Lur缓存 } @Override public Bitmap get(String url) { return mMemoryCache.get(url); } @Override public void put(String url, Bitmap bitmap) { mMemoryCache.put(url, bitmap); } }
-
package com.yt.ImageLoader; import android.graphics.Bitmap; /** * author : YiTao * Created by TaoyYi on 2016/12/16. * describe : 双缓存 */ public class DoubleCache implements ImageCache { MemoryCache mMemoryCache = new MemoryCache(); DiskCache mDiskCache = new DiskCache(); @Override public Bitmap get(String url) { //先从缓存中获取bitmap,如果没有再从sk卡中获取 Bitmap bitmap = mMemoryCache.get(url); if (bitmap == null) { bitmap = mDiskCache.get(url); } return bitmap; } /** * 将图片缓存到内存或sd卡中 * * @param url * @param bitmap */ @Override public void put(String url, Bitmap bitmap) { mMemoryCache.put(url, bitmap); mDiskCache.put(url, bitmap); } }
1 0
- (随记二)Android设计模式解析与实战_面对对象六大原则之开闭原则
- (随记六)Android设计模式解析与实战_面对对象六大原则之加米特原则
- (随记一)Android设计模式解析与实战_面对对象六大原则之单一职责原则
- (随记三)Android设计模式解析与实战_面对对象六大原则之里式替换原则
- (随记四)Android设计模式解析与实战_面对对象六大原则之依赖倒置原则
- (随记五)Android设计模式解析与实战_面对对象六大原则之接口隔离原则
- 设计模式六大原则之开闭原则
- 设计模式六大原则之开闭原则
- 设计模式原则之二:开闭原则
- 面对对象编程--设计模式六大原则
- 面向对象六大设计原则(二)开闭原则
- android 源码设计模式解析与实战 读书笔记 1 面向对象的六大原则
- Android源码设计模式解析与实战——面向对象六大原则(一)
- 读Android源码设计模式解析与实战(第一章面向对象的六大原则)
- 设计模式六大原则之--开闭原则(OCP)
- 设计模式六大原则之--开闭原则(OCP)
- 设计模式六大原则(一)开闭原则
- 设计模式六大原则:开闭原则
- MySQL Group Replication实践
- 解决 was 更新web.xml 无效原因
- R数据读取存储
- opnfv c/fuel 9编译问题3--突然中断
- POJ 2100 Graveyard Design 已翻译
- (随记二)Android设计模式解析与实战_面对对象六大原则之开闭原则
- 【HDU5984】Pocky(数学)
- BZOJ4539
- Android 自定义控件之2D绘图初步
- 100道动态规划——19 UVA 12105 Bigger is Better 状态的定义以及转移方程
- Redis教程(十) Redis配置文件详解
- setAttribute和setParameter方法的区别
- C++关键字详解
- 牛客 · 错题集锦 (一)