定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。
优点:
降低了类的复杂度。一个类只负责一项职责比负责多项职责要简单得多。
提高了代码的可读性。一个类简单了,可读性自然就提高了。
提高了系统的可维护性。代码的可读性高了,并且修改一项职责对其他职责影响降低了,可维护性自然就提高了。
变更引起的风险变低了。单一职责最大的优点就是修改一个功能,对其他功能的影响显著降低。
一个类负责一个功能,易于修改代码
public class ImageCache {
private LruCache<String ,Bitmap> mMemoryCacle=null;
public ImageCache(){
initImageCache();
}
private void initImageCache(){
int maxMemory= (int) Runtime.getRuntime().maxMemory();
int cacheSize=maxMemory/4;
mMemoryCacle=new LruCache<String, Bitmap>(cacheSize){
@Override
protected int sizeOf(String key, Bitmap value) {
return value.getHeight()*value.getRowBytes()/1024;
}
};
}
public void put(String url,Bitmap bitmap){
mMemoryCacle.put(url,bitmap);
}
public Bitmap get(String url){
return mMemoryCacle.get(url);
}
}
public class ImageLoader {
ImageCache imageCache=new ImageCache();
ExecutorService mExecutorService= Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
public void displayImage(final String url, final ImageView imageView){
Bitmap bitmap=imageCache.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);
}
imageCache.put(url,bitmap);
}
});
}
public Bitmap downloadImage(String imageUrl){
Bitmap bitmap=null;
try {
URL url=new URL(imageUrl);
HttpURLConnection connection= (HttpURLConnection) url.openConnection();
bitmap= BitmapFactory.decodeStream(connection.getInputStream());
connection.disconnect();
}
catch (Exception e){
e.printStackTrace();
}
return bitmap;
}
}
注意
单例模式 要使用Application,不能使用Context,因为单例模式的生命周期和Application一样长,如果使用Context,但Activity销毁时,由于Activity正在被单例模式引用,所以容易导致内存泄露