面向对象六大原则之-单一职责原则

1.定义:单一职责原则的缩写是SPR就一个类而言,应该仅有一个引起他变化的原因。

2.案例:实现图片加载器,功能图片加载与缓存。

ImageLoader 0.1版本

  public class ImageLoader(){
  //图片缓存
  LruCache mImageCache;
  //线程池,线程数量为cpu 数量
  ExecutorService mExecutorService = Executors.newFixedThreadPool(Runtime.getRuntime().availbleProcessors());
  
  public ImageLoader(){
   initImageCache();
 }
  private initImageCahe(){
   //计算可以使用的最大内存
   final int maxMenory = (int)(Runtime.getRuntime().maxMemory /1024);
   //取1/4 的可用内存作为缓存
   final int cacheSize=maxMemory/4;
   mImageCache = new LruCache(cacheSize){
   @override
   protected int sizeOf(String key,Bitmap bitmap){
    return bitmap.getRowBytes()*bitmap.getHeight()/1024;
   }
   };
  }
  
 public void displayImage(final String url,final ImageView){
  imageView.setTag(url);
  mExecutorServices.submit(new Runnable(){
  @override
   public void run(){
   Bitmap bitmap=downLoadImage(url);
   if(bitmap == null){
   return;
   }
   if(imageView.getTag().equals(url)){
      imageView.setBitmap(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();
  }cache(Exception e){
  e.printStackTrace();
  }
  return bitmap;
 }

}

使用单一职责原则对该ImageLoader 进行改造。将ImageLoader 类一分为二,ImageLoader只负责图片的加载逻辑,ImageCache 只负责处理图片的缓存逻辑。重构之后类的职责变得清晰。

 public class ImageLoader(){
  //图片缓存
  ImageCache mImageCache =new ImageCache();
  //线程池,线程数量为cpu 数量
  ExecutorService mExecutorService = Executors.newFixedThreadPool(Runtime.getRuntime().availbleProcessors());
   
  public void displayImage(final String url,final ImageView){
   BitMap bitMap =mImageCache.get(url);
    if(bitmap != null){
      imageView.setBitmap(bitmap);
      return;
  }
  imageView.setTag(url);
  mExecutorServices.submit(new Runnable(){
  @override
   public void run(){
   Bitmap bitmap=downLoadImage(url);
   if(bitmap == null){
   return;
   }
   if(imageView.getTag().equals(url)){
      imageView.setBitmap(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();
  }cache(Exception e){
  e.printStackTrace();
  }
  return bitmap;
 }

}

public class ImageCahe{
public class ImageLoader(){
  //图片缓存
  LruCache mImageCache;
  
  public ImageCahe(){
   initImageCache();
 }
  private initImageCahe(){
   //计算可以使用的最大内存
   final int maxMenory = (int)(Runtime.getRuntime().maxMemory /1024);
   //取1/4 的可用内存作为缓存
   final int cacheSize=maxMemory/4;
   mImageCache = new LruCache(cacheSize){
   @override
   protected int sizeOf(String key,Bitmap bitmap){
    return bitmap.getRowBytes()*bitmap.getHeight()/1024;
   }
   };
  }
 public void put(String url,Bitmap){
  mImageCache.put(url,bitmap);
}
 
 public Bitmap get(String url){
 return mImageCache.get(url);
}
}

你可能感兴趣的:(面向对象六大原则之-单一职责原则)