论单一职责原则的使用场景
来源:互联网 发布:怪物猎人ol数据库 编辑:程序博客网 时间:2024/06/05 17:05
单一职责原则的定义是:就一个类而言,应该仅有一个引起它变化的原因。简单来说,一个类中应该是一组相关性很高的函数,数据封装。就是对职责的定义,什么是类的职责,以及怎么划分类的职责。这是最重要的一环
举个例子做进一步的阐释,做出比较:
没有采用这种模式的例子:
import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.util.LruCache;import android.widget.ImageView;import java.io.IOException;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 { LruCache<String, Bitmap> mImageCache; // 线程池,线程数量为cpu的数量 ExecutorService mExecutorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); public ImageLoader() { initImageCache(); } private void initImageCache() { final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024); final int cacheSize = maxMemory / 4; mImageCache = new LruCache<String, Bitmap>(cacheSize) { @Override protected int sizeOf(String key, Bitmap bitmap) { return bitmap.getRowBytes() * bitmap.getHeight() / 1024; } }; } public void displayImage(final String url, final ImageView imageView) { imageView.setTag(url); mExecutorService.submit(new Runnable() { @Override public void run() { Bitmap bitmap = downloadImage(url); if (bitmap == null) { return; } if (imageView.getTag().equals(url)) { imageView.setImageBitmap(bitmap); } mImageCache.put(url, bitmap); } }); } public Bitmap downloadImage(String imageUrl) { Bitmap bitmap = null; try { URL url = new URL(imageUrl); try { final HttpURLConnection conn = (HttpURLConnection) url.openConnection(); bitmap = BitmapFactory.decodeStream(conn.getInputStream()); conn.disconnect(); } catch (IOException e) { e.printStackTrace(); } } catch (MalformedURLException e) { e.printStackTrace(); } return bitmap; }}代码看起来有些杂乱,耦合度比较高,对后期的扩展性,灵活性而言差别较大,后期一旦改动,将会改动很多地方,不利于维护
优化之后,采用单一职责:在功能上一份为二:
import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.util.LruCache;import android.widget.ImageView;import java.io.IOException;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class ImageLoader2 { // 图片缓存 LruCache<String, Bitmap> mImageCache; // 线程池,线程数量为cpu的数量 ExecutorService mExecutorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); public void displayImage(final String url, final ImageView imageView) { imageView.setTag(url); mExecutorService.submit(new Runnable() { @Override public void run() { Bitmap bitmap = downloadImage(url); if (bitmap == null) { return; } if (imageView.getTag().equals(url)) { imageView.setImageBitmap(bitmap); } mImageCache.put(url, bitmap); } }); } public Bitmap downloadImage(String imageUrl) { Bitmap bitmap = null; try { URL url = new URL(imageUrl); try { final HttpURLConnection conn = (HttpURLConnection) url.openConnection(); bitmap = BitmapFactory.decodeStream(conn.getInputStream()); conn.disconnect(); } catch (IOException e) { e.printStackTrace(); } } catch (MalformedURLException e) { e.printStackTrace(); } return bitmap; }}多了imageCache,负责具体的缓存
import android.graphics.Bitmap;import android.util.LruCache;public class ImageCache { LruCache<String ,Bitmap> mImageCache; public ImageCache(){ initImageCache(); } private void initImageCache() { final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024); final int cacheSize = maxMemory / 4; mImageCache = new LruCache<String, Bitmap>(cacheSize) { @Override protected int sizeOf(String key, Bitmap bitmap) { return bitmap.getRowBytes() * bitmap.getHeight() / 1024; } }; } public void put(String url,Bitmap bitmap){ mImageCache.put(url,bitmap); } public Bitmap get(String url){ return mImageCache.get(url); }}
实现缓存和下载图片的功能分离,代码逻辑更加清晰。单一职责就是根据个人的经验,在代码上进行一些优化,让代码逻辑更加清晰,尽量的减少耦合,利于后期维护和扩展。
0 0
- 论单一职责原则的使用场景
- 看“单一职责原则”的感悟
- OO设计的单一职责原则
- 关于单一职责原则的一点理解
- 函数的单一职责原则(SRP)
- 对单一职责原则的理解
- 对单一职责原则的理解
- 单一职责原则思想的理解
- 单一职责原则(SRP)
- 单一职责原则--SRP
- 单一职责原则
- 单一职责原则
- 单一职责原则SRP
- SRP单一职责原则
- 单一职责原则--SRP
- 单一职责原则
- 单一职责原则--SRP
- 单一职责原则
- ViewPager入门级用法
- hdu1227 Fast Food--DP
- HTML5表单属性(二)
- Python 读取网页内容 乱码问题
- 64. Minimum Path Sum
- 论单一职责原则的使用场景
- 328. Odd Even Linked List
- python 2进制,8进制,10进制,16进制转换
- 配置Linux日志文件
- YII学习笔记
- String和StringBuffer的传参问题
- 内存泄露从入门到精通三部曲之排查方法篇
- C++ template
- JAVA学习作品之销售管理系统V1.0