(随记二)Android设计模式解析与实战_面对对象六大原则之开闭原则

来源:互联网 发布:泛突厥主义知乎 编辑:程序博客网 时间:2024/05/21 19:35

(随记二)Android设计模式解析与实战_面对对象六大原则之开闭原则 :

* 让程序更稳当更灵活* 定义 : 代码中的对象(类、模块、函数等)一个对于扩展是开放的,但是对于修改是封闭的。* 简单来说就是 : 可以使用继承或者实现来修改功能,而不是在原来的代码里面进行修改

代码示例

    package com.yt.ImageLoader;    import android.graphics.Bitmap;    import android.support.v4.util.LruCache;    /**     * author : YiTao     * Created by TaoyYi on 2016/12/16.     * describe : 图片缓存接口,所有图片缓存均实现次接口     */    public interface ImageCache {        public Bitmap get(String url);        public void put(String url, Bitmap bitmap);    }

-

    package com.yt.ImageLoader;    import android.graphics.Bitmap;    import android.graphics.BitmapFactory;    import android.widget.ImageView;    import java.net.HttpURLConnection;    import java.net.URL;    import java.util.concurrent.ExecutorService;    import java.util.concurrent.Executors;    /**     * author : YiTao     * Created by TaoyYi on 2016/12/16.     * describe : 图片加载     */    public class ImageLoader {        private final ExecutorService mExecutorService;        public ImageLoader() {            //线程池数量为cpu数量            mExecutorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());        }        //图片缓存        ImageCache mImageCache = new MemoryCache(); //默认缓存内存缓存        //注入缓存实现(修改缓存方案)        public void setImageCache(ImageCache imageCache) {            mImageCache = imageCache;        }        /**         * 显示图片         *         * @param url         * @param imageView         */        public void displayImage(final String url, final ImageView imageView) {            final Bitmap bitmap = mImageCache.get(url);            if (bitmap != null) {                imageView.setImageBitmap(bitmap);                return;            } else {                //缓存中没有图片,提交到线程池下载图片                submitLoadRequest(url, imageView);            }        }        /**         * 线程池提交加载网络图片的请求         *         * @param url         * @param imageView         */        private void submitLoadRequest(final String url, final ImageView imageView) {            imageView.setTag(url);            mExecutorService.submit(new Runnable() {                @Override                public void run() {                    Bitmap netBitmap = downloadImage(url);                    if (netBitmap == null) {                        return;                    } else {                        if (imageView.getTag().equals(url)) {                            imageView.setImageBitmap(netBitmap);                        }                        mImageCache.put(url, netBitmap);                    }                }            });        }        /**         * 下载图片         *         * @param imageUrl         * @return         */        public Bitmap downloadImage(String imageUrl) {            Bitmap bitmap = null;            try {                URL url = new URL(imageUrl);                final HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();                bitmap = BitmapFactory.decodeStream(urlConnection.getInputStream());                urlConnection.disconnect();            } catch (Exception e) {                e.printStackTrace();            }            return bitmap;        }    }

-

    package com.yt.ImageLoader;    import android.graphics.Bitmap;    /**     * author : YiTao     * Created by TaoyYi on 2016/12/16.     * describe : SD卡缓存     */    public class DiskCache implements ImageCache {        /**         * 从本地文件获取该图片         *         * @param url         * @return         */        @Override        public Bitmap get(String url) {            return null;        }        /**         * 将Bitmap写入文件         *         * @param url         * @param bitmap         */        @Override        public void put(String url, Bitmap bitmap) {        }    }

-

    package com.yt.ImageLoader;    import android.graphics.Bitmap;    import android.util.LruCache;    /**     * author : YiTao     * Created by TaoyYi on 2016/12/16.     * describe : 内存缓存     */    public class MemoryCache implements ImageCache {        private LruCache<String, Bitmap> mMemoryCache;        public MemoryCache() {            //初始化Lur缓存        }        @Override        public Bitmap get(String url) {            return mMemoryCache.get(url);        }        @Override        public void put(String url, Bitmap bitmap) {            mMemoryCache.put(url, bitmap);        }    }

-

    package com.yt.ImageLoader;    import android.graphics.Bitmap;    /**     * author : YiTao     * Created by TaoyYi on 2016/12/16.     * describe : 双缓存     */    public class DoubleCache implements ImageCache {        MemoryCache mMemoryCache = new MemoryCache();        DiskCache mDiskCache = new DiskCache();        @Override        public Bitmap get(String url) {            //先从缓存中获取bitmap,如果没有再从sk卡中获取            Bitmap bitmap = mMemoryCache.get(url);            if (bitmap == null) {                bitmap = mDiskCache.get(url);            }            return bitmap;        }        /**         * 将图片缓存到内存或sd卡中         *         * @param url         * @param bitmap         */        @Override        public void put(String url, Bitmap bitmap) {            mMemoryCache.put(url, bitmap);            mDiskCache.put(url, bitmap);        }    }
1 0
原创粉丝点击