开闭原则/ImageCache/设置不同缓存

1缓存类的功能

/**
 * 缓存功能
 */
public interface ImageCache {
    public void put(String url, Bitmap bitmap);
    public Bitmap get(String url);
}

2 内存缓存

/**
 * 内存缓存
 */
public class MemeryCache implements ImageCache {
    private LruCache<String, Bitmap> mMemeryCache;
    public MemeryCache() {
        //最大内存
        int maxMemery = (int) (Runtime.getRuntime().maxMemory() / 1024);
        //取1/4 的可用内存作为缓存
        final int cacheSize = maxMemery / 4;
        mMemeryCache = new LruCache<String, Bitmap>(cacheSize){
            @Override
            protected int sizeOf(String key, Bitmap value) {
                return value.getRowBytes() * value.getHeight() / 1024;
            }
        };
    }
    @Override
    public void put(String url, Bitmap bitmap) {
        mMemeryCache.put(url,bitmap);
    }
    @Override
    public Bitmap get(String url) {
        return mMemeryCache.get(url);
    }
}

3 磁盘缓存

/**
 * sd卡存储
 */
public class DiskCache implements ImageCache {
    static String cacheDir = "sdcard/cache/";
    @Override
    public void put(String url, Bitmap bitmap) {
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(cacheDir + url);
            bitmap.compress(Bitmap.CompressFormat.PNG,100,fos);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }finally {
            if (fos != null){
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    @Override
    public Bitmap get(String url) {
        return BitmapFactory.decodeFile(cacheDir + url);
    }
}

4 双缓存

/**
 * 双缓存
 */
public class DoubleCache implements ImageCache {
    ImageCache mMermeryCache = new MemeryCache();
    ImageCache mDisCache = new DiskCache();
    @Override
    public void put(String url, Bitmap bitmap) {
        mMermeryCache.put(url,bitmap);
        mDisCache.put(url,bitmap);
    }
    @Override
    public Bitmap get(String url) {
        Bitmap bitmap = mMermeryCache.get(url);
        if (bitmap == null){
            bitmap = mDisCache.get(url);
        }
        return bitmap;
    }
}

5 ImageLoader

/**
 * imageView 通过url展示图片
 */
public class ImageLoader {
    ImageCache mImageCache = new MemeryCache();
    //线程池,线程数量为CPU数量
    ExecutorService mExecutorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());

    public void setImgeCache(ImageCache imgeCache){
        this.mImageCache = imgeCache;
    }
    public void displayImage(String url, ImageView imageView){
        Bitmap bitmap = mImageCache.get(url);
        if (bitmap != null){
            imageView.setImageBitmap(bitmap);
        }
        //没有缓存--下载
        submitLoadRequest(url,imageView);

    }
    private void submitLoadRequest(String imageUrl,ImageView imageView){
        imageView.setTag(imageUrl);
        mExecutorService.submit(new Runnable() {
            @Override
            public void run() {
                Bitmap bitmap = downLoadImage(imageUrl);
                if (bitmap == null){
                    return;
                }
                if (imageView.getTag().equals(imageUrl)){
                    imageView.setImageBitmap(bitmap);
                }
                mImageCache.put(imageUrl,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;
    }
}

6 使用

/**
 * 使用
 */
public class User {
    public void use(){
        ImageLoader imageLoader = new ImageLoader();
        //设置缓存类型
        imageLoader.setImgeCache(new DoubleCache());
        //自定义缓存
        imageLoader.setImgeCache(new ImageCache() {
            @Override
            public void put(String url, Bitmap bitmap) {

            }

            @Override
            public Bitmap get(String url) {
                return null;
            }
        });
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于第一个要求,你可以使用下面的代码来检查用户是否输入了参会者的姓名: ```javascript var txtName = document.getElementById("txtName").value; if (txtName.trim() == "") { alert("请输入参会者姓名!"); return false; } ``` 对于第二个要求,你可以使用下面的代码来检查用户是否输入了参会者的工作单位: ```javascript var txtCompany = document.getElementById("txtCompany").value; if (txtCompany.trim() == "") { alert("请输入参会者工作单位!"); return false; } ``` 对于第三个要求,你可以使用多分支if语句来检查用户是否从4个会务费选项中作出选择: ```javascript var feeOption = document.getElementById("feeOption").value; if (feeOption == "option1") { // 选项1的处理逻辑 } else if (feeOption == "option2") { // 选项2的处理逻辑 } else if (feeOption == "option3") { // 选项3的处理逻辑 } else if (feeOption == "option4") { // 选项4的处理逻辑 } else { alert("请选择会务费用!"); return false; } ``` 最后,你可以在checkData()函数的末尾返回true,表示数据检验无误: ```javascript function checkData() { var txtName = document.getElementById("txtName").value; if (txtName.trim() == "") { alert("请输入参会者姓名!"); return false; } var txtCompany = document.getElementById("txtCompany").value; if (txtCompany.trim() == "") { alert("请输入参会者工作单位!"); return false; } var feeOption = document.getElementById("feeOption").value; if (feeOption == "option1") { // 选项1的处理逻辑 } else if (feeOption == "option2") { // 选项2的处理逻辑 } else if (feeOption == "option3") { // 选项3的处理逻辑 } else if (feeOption == "option4") { // 选项4的处理逻辑 } else { alert("请选择会务费用!"); return false; } return true; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值