面向对象六大原则之单一职责原则
来源:互联网 发布:外汇高盛软件 编辑:程序博客网 时间:2024/05/20 07:37
单一职责原则的英文名称是Single Responsibility Principle,缩写是SRP。SRP的定义是:就一个类而言,应该仅有一个引起它变化的原因。简单地说,一个类中应该是一种相关性很高的函数,数据的封装。
首先我们先来看一下不用单一职责原则实现图片加载的代码:
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 key,Bitmap>(cacheSize) { @Override protected int sizeOf(String key,Bitmap bitmap) { return bitmap.getRowBytes()*bitmap.getHeightBites() / 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.setTag().equals(url){ imageView.setImageBitmap(bitmap); } mImageCache.put(url,bitmap); } });}public Bitmap downloadImage(String imageUrl) { Bitmap bitmap=null; try{ URL url=new URL(imageUrl); final HttpURLConnection conn =(HttpURLConnection) url.openConnection(); bitmap=BitmapFactory.decodeStream(conn.getInputStream()); conn.disconnect(); }catch(Exception e) { e.printStackTrace(); } return bitmap; }}
聪明的你一定发现了,上述代码在不用单一职责原则的情况下耦合性太严重了,简直就没有设计可言,更不要说扩展性,灵活性了。
接下来我们来看看运用单一职责原则实现上述的代码是怎样的
首先定义一个图片加载类
public class ImageLoader{ //图片缓存 ImageCacher mImageCache=new ImageCache(); //线程池,线程数量为CPU的数量ExcutorService mExcutorService=Excutors.newFixedThreadPool (Runtime.getRuntime().availableProcessors()); //加载图片 public void displayImage(final String url,final ImageView imageview){ Bitmap bitmap=mImageCache.get(url); if(bitmap!=null){ imageView.setImageBitmap(bitmap); return; } imageView.setTag(url); mExecutorService.submit(new Runtime(){ @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); final HttpURLConnection conn=(HttpURLConnection) url.openConnection(); bitmap= BitmapFactory.decodeStream(conn.getInputStream()); conn.disconnect(); }catch (Exception e){ e.printStackTrace(); } return bitmap; }}
然后再添加一个ImageCache类用于处理图片缓存,具体代码如下所示
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.getHeightBytes()/1024; } };} public void get(String url) { return mImageCache.get(url); }}
相信从上述例子中我们都能够体会,单一职责所表达出的用意就是“单一”二字。工程师可以不断审视自己的代码,根据具体的业务,功能对类进行相应的拆分,这是程序员优化代码迈出的第一步。
阅读全文
0 0
- 面向对象六大原则----单一职责原则
- 面向对象设计的六大原则之单一职责原则
- 面向对象六大原则之单一职责原则
- 面向对象程序设计的六大原则(1)-单一职责原则
- 面向对象六大原则(一):单一职责原则
- 面向对象六大原则(一):单一职责原则
- 面向对象的六大原则--单一职责原则
- 面向对象程序设计六大原则-单一职责原则
- 面向对象六大设计原则(一)单一职责原则
- 面向对象设计之单一职责原则
- 六大设计原则之“单一职责原则”
- 六大设计原则之单一职责原则
- 面向对象的六大设计原则 (一):单一职责
- 面向对象设计原则之单一职责原则
- 面向对象设计原则之单一职责原则
- 面向对象设计原则之单一职责原则
- 面向对象设计原则之单一职责原则
- 面向对象设计原则之单一职责原则
- HDU 6183 线段树新玩法 + 离散化
- POJ3376 (Finding Palindromes) Trie+扩展KMP
- Bootstrap插件(一)——模态框(modal.js)
- Java NIO的特点
- Windows IO模型-WSAAsynSelect模型(异步阻塞模型)
- 面向对象六大原则之单一职责原则
- 目前看到的最棒的HashMap源码分析(基于java 8)--Java 8系列之重新认识HashMap
- ES6 Symbol及对象遍历方法for in,Object,keys,JSON.stringify,getOwnPropertyNames,Reflect.ownKeys
- 关于java中的double check lock
- 零基础简单爬虫制作(以wjyt-china企业黄页爬虫为例)(上)
- HTML基础01
- 通过modbus协议实现arduino与电能表串口通信
- 从头开始学算法:考研机试题练习(C/C++)–STL使用
- JavaSe——8、Set、List和Queue