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); }}
如上为采用“单一职责原则”,配合单例模式的小示例!
阅读全文
0 0
- 1_单一职责原则
- 黑马程序员_单一职责原则
- java设计模式_单一职责原则
- 设计原则(1)-单一职责原则
- 六大设计原则之一_单一职责原则(SRP)
- 敏捷开发1-单一职责原则
- 单一职责原则(SRP)
- 单一职责原则--SRP
- 单一职责原则
- 单一职责原则
- 单一职责原则SRP
- SRP单一职责原则
- 单一职责原则--SRP
- 单一职责原则
- 单一职责原则--SRP
- 单一职责原则
- SRP:单一职责原则
- 单一职责原则
- 求<=N的平方数
- 日期推算
- 349 Intersection of Two Arrays
- java8 lambda 使用 与 functional interface 与 function 类
- 【MongoDB】explain & hint
- 1_单一职责原则
- SSH Unit01
- Kimbal Musk 介绍:埃隆马斯克的弟弟
- Scrapy学习笔记 妹子图
- 399 Evaluate Division
- [树形DP] 猴腮雷 (没有上司的舞会)
- C标准输入输出
- 将控制台输入的文字流存入本地文件夹
- [Hadoop]