设计模式之六大原则

《Android 源码设计模式解析与实战》笔记

设计模式

面向对象的六大原则

  1. 单一责任原则(Single Responsibility Principle 缩写SRP)
    将独立的任务抽象成类
  2. 开闭原则(Open Close Principle 缩写OCP)
    对类,方法,模块扩展是开发的,但对类修改是封闭的
  3. 里式替换原则(Liskov Substitution Principle 缩写LSP)
    所有引用基类的地方必须能够透明的替换成子类对象,不会引起异常。核心就是抽象.Android View 的设计
  4. 依赖倒置原则 (Dependence Inversion Principle 缩写DIP)
    指代了一种特定的解耦形式,使得高层次的模块不依赖于底层次的模块的实现细节的目的,依赖模块被颠倒了。
    几个关键点:

    1) 高层模块不应该依赖底层模块,两者都应该依赖其抽象;

    2)抽象不应该依赖细节;

    3)细节应该依赖抽象;
    抽象就是接口和抽象类,细节就是实现类。高层模块就是调用端,低模块就是具体实现类。改原则表现是:模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的。面向抽象编程.

  5. 接口隔离原则(InterfaceSegregation Principles 缩写ISP)
    定义:客户端不应该依赖它不需要的接口 或者说类间的依赖关系应该建立在最小接口上。这样不是很明白我们看代码

    public void put(String url,Bitmap bmp){
        FileOutputStream fileOuputStream = null;
        try{
            fileOutputStream = new FileOutputStream(cacheDir+url);
            bmp.compress(CompressFormat.PNG,100,fileOutputStream);
        }catch(FileNotFoundException e){
            e.printStackTrace();
        }finanly{
            if(fileOutputSteam != null){
                try{
                    fileOutputStream.close();
                }catch(IOException e){
                    e.printStackTrace();
                }
            }
        }
    }

    这种代码应该是比较臃肿了。对于close我们知道Java中是Closeable接口来的 只有一个close.FileOutputStream实现了这个接口,并且Java中有100 个类实现了这个接口。哪每个都要这样写估计疯了,好我们可以这样实现一个工具类.

    public final class CloseUtils{
        private CloseUtils(){}
        public static void closeQuietly(Closeable closeable){
            if(null != closeable){
                try{
                    closeable.close();
                }catch(IOException e){
                    e.printStackTrace();
                }
            }
        }
    }

    那上面那段代码就改成这个样子了

    public void put(String url,Bitmap bmp){
        FileOutputStream fileOuputStream = null;
        try{
            fileOutputStream = new FileOutputStream(cacheDir+url);
            bmp.compress(CompressFormat.PNG,100,fileOutputStream);
        }catch(FileNotFoundException e){
            e.printStackTrace();
        }finanly{
            CloseUtils.closeQuietly(fileOutputStream);
        }
    }

    CloseUtils 的closeQuietly 方法的基本原理就是依赖于Closeable 抽象而不是具体实现(依赖倒置原则),并且建立在最小依赖原则的基础上,它只需要知道这个对象是可关闭,其他的一概不关心,也就是这里的接口隔离原则.
    单一职责、开闭原则、里氏替换、接口隔离以及依赖倒置 5个原则定义为SOLID原则

  6. 迪米特原则(Law of Demeter 缩写LOD 也称为最少知识原则Least Knowledge Principle)
    一个类应该对其他对象有最少的了解。通俗讲,一个类应该对自己需要耦合或调用的类知道得最少,类的内部如何实现与调用者或者依赖者没关系,调用者或者依赖者只需知道它需要的方法即可,其他的可一概不用管。

你可能感兴趣的:(设计模式之六大原则)