Android 设计模式——单一模式

最近买了本书,写的不错,推荐一个:《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);
}

如上面代码那样,操作图片放在一个类中,缓存图片放在一个类中,这样就是所谓的单一原则

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值