浅析面对对象 六大原则(六)

来源:互联网 发布:mysql 高性能集群 编辑:程序博客网 时间:2024/06/04 19:27

1.单一职责原则点击跳转

2.开闭原则点击跳转

3.里氏替换原则点击跳转

4.依赖倒置原则点击跳转

5.接口隔离原则点击跳转

6.迪米特原则(更好的可扩展性)

迪米特原则的英文名是Law of Demeter,缩写是LOD,也成为最少知识原则。虽然名称不同,但是所代表的含义是一样的,一个对象应该对其他对象有最少的了解。简单的讲,一个类应该对自己需要耦合或者调用的类知道的更少,类的内部如何实现与调用者或者依赖者没关系,调用者或依赖者只需要知道他所需要的方法即可,其他的一概不管。类与类之间的关系越密切,耦合度就越高,当一个类发生改变时,对另一个类的一影响也越大。

迪米特原则还有一个英文解释是Only talk to your immedate friends ,翻译过来就是只与直接的朋友进行通信。什么是immedate friends呢?它所指的就是每个对象都必然的会与其他对象出现耦合关系,两个对象的耦合就成为朋友关系,这种朋友关系有很多种类型,如组合,聚合,依赖等。

如何来看迪米特法则,在以前的相关文章中,我们使用到SD卡缓存,ImageCache是客户端的直接朋友,而SD卡缓存内部使用了jake wharton的DiskLruCache实现,这个DiskLruCache 就不属于用户的直接朋友,因为用户完全可以不知道他的存在,用户只需要和ImageLoader打交道即可,如将图片存储到SD卡中代码如下:

public void putBitmap(String key, Bitmap bitmap) {        DiskLruCache.Editor editor = null;        try{            editor = diskLruCache.edit(key);            if (editor != null){                OutputStream outputStream = editor.newOutputStream(0);                if (writeBitmapToDisk(value,outputStream)){                    //写入SD卡缓存                    editor.commit();                }else {                    editor.abort();                }                CloseUtils.closeQuietly(outputStream);            }        }catch (IOException e){            e.printStackTrace();        }    }

当用户使用SD卡缓存时,根本不知道DiskLruCache的实现,这就很好的向用户隐藏了具体的实现。假如把DiskLruCache偷偷的更换实现方式,用户依然还是不会感知到其中的实现发生了改变,因为用户从一开始就不知道DiskLruCache的存在,他们并没有与LruCache进行通信,他们只是找到immedate firends – ImageCache,ImageCache将一切细节隐藏在了直接朋友的外衣下,这就使系统有更低的耦合性和更好的可扩展性。