最近买了本书,写的不错,推荐一个:《Android源码设计模式解析与实战》
注:本文为本人阅读此书所摘抄写下的笔记,自用!
单一职责原则,英文名:Single Responsibility Principle,缩写SRP
定义:一个类应该是一组相关性很高的函数、数据的封装,两个完全不一样的功能不能放在同一个类中,一个类应该是一组相关性很高的函数、数据的封装。例如显示图片与图片缓存应该分为两个类
代码如下:
MainActivity.java
ImageLoader imageLoader = new ImageLoader();
imageLoader.displayImage(url,ImageView);
图片加载类ImageLoader.java
//图片缓存
ImageCache mImageCache = new ImageCache();
//线程池,线程数量为CPU数量
ExecutorService mExecutorService = Executors.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 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);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
bitmap = BitmapFactory.decodeStream(conn.getInputStream());
conn.disconnect();
}catch (Exception e){
e.printStackTrace();
}
return bitmap;
}
图片缓存类ImageCache.java
//图片缓存
LruCache<String,Bitmap> mImageCache;
public ImageCache() {
initImageCache();
}
private void initImageCache() {
//计算可使用的最大内存
int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
//取四分之一的可用内存为缓存内存
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);
}
如上面代码那样,操作图片放在一个类中,缓存图片放在一个类中,这样就是所谓的单一原则