六大原则

版权声明:有些文章写的很随意,那是仅作为个人记录的文章,建议直接关掉,多看一秒亏一秒 https://blog.csdn.net/qq_36523667/article/details/83043919

重读《Android源码设计模式解析与实战》,有了不一样的体悟。

初始的ImageLoader

功能很简单,但是这么写,不方便未来扩展。如果早期就架构合理,那么这就是厉害的代码境界。

首先想改造原有的代码,就要通彻原有代码的结构。

对上面代码的分析:这个类初始化的时候,会初始化LruCache,同时提供显示图片,图片加入缓存,图片下载的功能。

这些东西放在一个类里是不应该的,一个类最好只有一个职责。这就是单一职责,是我们平时开发中要切记的。单一职责换句话说就是拆分,有点经验的开发者喜欢称呼其为拆分。

此外领悟到一点:6大原则+23种设计模式是优美代码的基础,透彻了这些后,代码才是有了美的基础。然后在此基础之上做积累。

后来我又分析了一遍,发现上面代码只是把下载的图片存储到了LruCache种,但是并没有用,真是醉了。

怎么改良?第一步改良就是单一职责,所以划分出所有职责即可:

1.图片的下载

2.图片的缓存控制,包括加入缓存和读取缓存

3.线程池接收下载任务

4.得到了Bitmap,把它设置到ImageView中去

修改后

它把缓存的功能抽离出来了。个人认为应该像上面一个分成4块甚至更多。

加入磁盘缓存功能

为了符合开闭原则,也为了使得用户可以自行配置缓存策略,用接口抽象

书上说,这是一种依赖注入,其实也是一种策略模式吧。代码写到这里,是真的漂亮。以后写代码要多问问自己,写出来的代码遵循这些原则了吗?

里氏替换原则

不要继承,而是要依赖、聚合、组合。如果一定要继承,那么不要覆写父类的方法。一般会用公共的抽象去解决。

依赖倒置

也就是依赖于抽象,抽象接口的具体实现由外部提供

接口隔离

流的关闭只在乎Closeable接口,所以通过工具类来进行统一的关闭。

对于MVP模式,模块协作,都是通过接口来隔离,隐藏细节。在依赖底层功能模块的时候,也会通过接口来隔离。

迪米特,最小感知原则

可以看到租户是从中介那里拿到了所有的房间,自己筛选。其实这个任务应该是中介的。租户和房间的耦合太严重了,能否只让房间和中介耦合。

所以我们把筛选代码交给中介,租户代码就变得很简洁了,如下

这就是最小感知原则,代码应该放在对的位置,对于调用者应该尽量简洁。比如网络请求的response,逻辑处理应放在response类中。这和单一职责又有些类似。

感想:只和抽象耦合。这六大原则过几天我会再更细致地学习一遍。

猜你喜欢

转载自blog.csdn.net/qq_36523667/article/details/83043919