1_单一职责原则

来源:互联网 发布:国内外大数据现状分析 编辑:程序博客网 时间:2024/06/06 15:48

单一职责原则

(Si ngle Responsibility Principle, SRP)

参考《Android 源码设计模式》


  • 一个类中应该是对一组相关性很高的函数、变量封装。
  • 对责任的定义;怎么划分职责:面向对象,各司其职。

错误示例: ImageLoader 既有展示图片的职责,也有缓存职责。

public class ImageLoader1 {    /* 成员变量:处理缓存(不应该属于 ImageLoader 的成员) */    private static LruCache<String,Bitmap> mLruCache = new LruCache<String,Bitmap>((int) (Runtime.getRuntime().maxMemory() / 4)) {        @Override        protected int sizeOf(String key, Bitmap bitmap) {            return bitmap.getRowBytes() * bitmap.getHeight();        }    };    /** 对外调用,使用展示网络图片 */    public void display(final String url, final ImageView imageView) {        Bitmap bitmap = mLruCache.get(url);        if (bitmap != null) {            imageView.setImageBitmap(bitmap);        } else {            OkGo.<Bitmap>get(url)                    .tag(this)                    .execute(new BitmapCallback() {                        @Override                        public void onSuccess(Response<Bitmap> response) {                            Bitmap body = response.body();                            imageView.setImageBitmap(body);                            mLruCache.put(url, body);                        }                    });        }    }}

正确示例:将“展示图片” & “缓存职责”分离

public class ImageCache {    private static LruCache<String,Bitmap> mLruCache = new LruCache<String,Bitmap>((int) (Runtime.getRuntime().maxMemory() / 4)) {        @Override        protected int sizeOf(String key, Bitmap bitmap) {            return bitmap.getRowBytes() * bitmap.getHeight();        }    };    /** 私有构造,因单例 */    private ImageCache() {}    /** 对外接口,获取该类的实例(单例) */    public static ImageCache getInstance() {        return InstanceHolder.sInstance;    /** 从缓存中获取图片*/    public Bitmap getBitmap(String key) {        return mLruCache.get(key);    }    /** 缓存图片*/      public void setBitmap(String key, Bitmap bitmap) {        mLruCache.put(key, bitmap);    /** 类如其名:持有外部类静态实例(仅在类被第一次夹在的时候初始化) */      private static class InstanceHolder {        private static ImageCache sInstance = new ImageCache();    }}

public class ImageLoader2 {    private ImageCache mImageCache = ImageCache.getInstance();    public static ImageLoader2 getInstance() {        return InstanceHolder.sInstance;    }    /** 对外调用,使用展示网络图片 */    public void display(final String url, final ImageView imageView) {        Bitmap bitmap = mImageCache.getBitmap(url);        if (bitmap != null) {            imageView.setImageBitmap(bitmap);        } else {            OkGo.<Bitmap>get(url)                    .tag(this)                    .execute(new BitmapCallback() {                        @Override                        public void onSuccess(Response<Bitmap> response) {                            Bitmap body = response.body();                            imageView.setImageBitmap(body);                            mImageCache.setBitmap(url, body);                        }                    });        }    }    private static class InstanceHolder {        private static ImageLoader2 sInstance = new ImageLoader2();    }}

public class ClientActivity extends Activity {    private ImageView mImageView;    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_client);        mImageView = (ImageView) findViewById(R.id.image);        ImageLoader2.getInstance().display("http://127.0.0.1:8080/wahaha.png", mImageView);    }}

如上为采用“单一职责原则”,配合单例模式的小示例!

原创粉丝点击