使用Android 图片缓存代码来说下开闭原则 ,下面是常规的图片缓存代码
图片A中:我们创建一个ImageCache类实现需要缓存的图片的方式,起初我们只实现sdcard和内存缓存,
在ImageLoad获取图片也只通过这2个缓存地去查找图片,
当我们需要添加第三乃至更多缓存方式时 就需要在ImageCache添加对应的缓存方式方法,
这时候我们就需要修改ImageCache同时也要需改ImageLoader 的displayImage方法
这就违背了开闭原则,只对扩展开发 ,对修改关闭,我们这里扩展了 但是也修改了.........
图片B中:我们把具体实现缓存的类都实现统一的ImageCache接口,具体缓存实现类只关注自己的缓存实现
在ImageLoader中通过setImageCache把缓存类对象注入,当我们添加更多缓存方式时只扩展一个新的缓存而不需要去
修改其他实现好的缓存类
个人总结:
1:图片A这种实现方式并不是不可取,这个要根据公司具体业务来调整
如果是单纯的一般小公司,业务不是很大的,而且又是单人开发,图A这种方式 写起来快速方便代码又少
但是如果是大公司,业务逻辑复杂,需求变更频繁,当然B是更好的。
2:图A这种方式某种意义上又违背了"类单一职责原则",但是也不是绝对的,至少这个类只是实现了自己的缓存功能,
一个类只有一个引起这个类变化的原因。即一个类只完成一个功能,(类单一职责原则)
如果做不到一个类只完成一个功能,最少要保证一个方法只完成一个功能。
3:原则是死的具体开发还是按照具体的业务来调整吧!图片A这种方式,虽然会修改代码,
但至少是以扩展的方式去修改,并不会引起上层调用逻辑错误
个人观点 有错请指正