Android设计模式——单一职责原则
来源:互联网 发布:淘宝电棍 编辑:程序博客网 时间:2024/06/11 14:00
单一职责原则
单一职责:Single Responsibility Principle SRP
- 定义:就一个类而言,应该仅有一个引起它变化的原因。一个类中应该是一组相关性很高的函数、数据的封装
- 解释:就是说一个类的功能应该封装的功能是单一的,一个类仅仅处理一个问题,或者是仅仅做一组相近的工作。高内聚低耦合
示例程序
需求:编写Android图片加载器,根据url下载图片并缓存加载到imageview中,要求体现单一设计模式
- 需求分析:对于图片加载类 应当将图片的下载和图片的缓存与图片的显示加载分开,对于一种功能单独进行封装
ImageCache 图片缓存封装
package com.probuing.designpatterns.srpdemo.imageloader;import android.annotation.TargetApi;import android.graphics.Bitmap;import android.os.Build;import android.util.LruCache;/** * 用于处理图片缓存的类 * Created by Administrator on 2016/12/5. */public class ImageCache { // TODO: 2016/12/5 LRU图片集合 LruCache<String, Bitmap> mImageCache; public ImageCache() { initImageCache(); } /** * 初始化图片缓存类 */ @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR1) private void initImageCache() { //计算可以使用的最大内存 int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024); //取最大可用内存的1/4为缓存 int cacheSize = maxMemory / 4; //实例化图片缓存集合 mImageCache = new LruCache<String, Bitmap>(cacheSize) { @Override protected int sizeOf(String key, Bitmap value) { return value.getRowBytes() * value.getHeight() / 1024; } }; } public void put(String url, Bitmap bitmap) { mImageCache.put(url, bitmap); } public Bitmap get(String url) { return mImageCache.get(url); }}
- ImageLoader 图片加载类封装,其中 分别封装图片下载与图片加载的功能
package com.probuing.designpatterns.srpdemo.imageloader;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.widget.ImageView;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * 单一职责 设计模式 */public class ImageLoader { ImageCache mImageCache = new ImageCache(); //线程池 可用cpu数量 ExecutorService executors = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); /** * 图片加载 * * @param url 加载图片的地址 * @param imageView view */ public void displayImage(final String url, final ImageView imageView) { // TODO: 从缓存中加载图片 Bitmap bitmap = mImageCache.get(url); //缓存中存在的情况 if (bitmap != null) { //设置给view imageView.setImageBitmap(bitmap); return; } imageView.setTag(url); // TODO: 执行线程池的异步任务下载图片 executors.submit(new Runnable() { @Override public void run() { Bitmap bitmap = downloadImage(url); // TODO: 下载失败 if (bitmap == null) { return; } // TODO: bitmap不为空的情况,取出控件 imageview 判断是否是对应的url的图片 if (imageView.getTag().equals(url)) { imageView.setImageBitmap(bitmap); } // TODO: 放入缓存中 mImageCache.put(url, bitmap); } }); } /** * 图片下载方法 * * @param imageUrl 图片地址 * @return 下载好的图片 */ private Bitmap downloadImage(String imageUrl) { Bitmap bitmap = null; // TODO: url 构造 try { URL url = new URL(imageUrl); // TODO: 开启连接 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); // TODO: 获取下载码 if (conn.getResponseCode() == 200) { // TODO: 获取输入流 bitmap = BitmapFactory.decodeStream(conn.getInputStream()); } // TODO: 连接关闭 conn.disconnect(); } catch (java.io.IOException e) { e.printStackTrace(); } return bitmap; }}
总结
- 单一职责设计模式很好的对类功能的低耦合进行了处理,采用单一设计模式的实现,对于代码的扩展与维护都是比较遍历的
- 单一职责的基本思路就是,将一类功能只定义在一个类或者方法中,避免重复的定义和过多的定义
- 个人感觉 单一职责的边界划分不是非常的清晰,对于一些的功能需求,很难确定单一的职责模式,需要大量的经验来判定
0 0
- Android设计模式——单一职责原则
- 设计模式——单一职责原则
- 设计模式——单一职责原则
- 设计模式——单一职责原则
- 设计模式——单一职责原则
- 设计模式——单一职责原则
- 设计模式—单一职责原则
- 设计模式—单一职责原则
- android设计模式之单一职责原则
- 《大话设计模式》——原则:单一职责原则
- 设计模式原则——单一职责原则
- 设计模式六大原则——单一职责原则
- 设计模式六大原则1—单一职责原则
- 设计模式原则—单一职责原则(二)
- 设计模式原则—单一职责原则(SRP)
- 设计模式学习笔记——单一职责原则
- 【大话设计模式】笔记——单一职责原则
- 《读书笔记》设计模式——单一职责原则
- 关于didFinishLaunchingWithOptions参数的中的launchOptions这个参数
- Scrapy爬虫(十):爬虫总结以及扩展
- 数据库索引背后的数据结构之B-树和B+树
- 人人都会犯的三大错误,就是你成功的关键
- 激光雷达F4与D1坐标校正
- Android设计模式——单一职责原则
- char * string CString之间的转化
- MySQL优化特定类型的查询(书摘备查)
- 微信小程序,腾讯的野心与连接一切的梦想
- Android设计模式—— 依赖倒置原则
- Acache工具类
- 《项目管理利器Maven》学习(六):Eclipse中配置Maven及创建Maven项目
- 安卓关于修改第三方libary源码后无效的问题
- sqoop从mysql导入数据到hive中