设计原则之依赖倒置和迪米特法则

751 阅读2分钟

这是我参与8月更文挑战的第22天,活动详情查看:8月更文挑战

依赖倒置原则

即高层模块不应该去依赖底层模块,两者都应该去依赖其抽象(可以依赖接口或者抽象 不是依赖具体子类) 这个原则的基本思想就是:面向接口编程。 看一下这个代码

public class Email {
    public String getInfo(){
        return "Email";
    }
}

public class Person {
    public void receive(Email email){
        System.out.println(email.getInfo());
    }
}

public class DependeceInversion {
    public static void main(String[] args){
        Person person = new Person();
        person.receive(new Email());
    }
}

从上面的代码可以看出 Person类去依赖了Email发送邮件这个基本类,如果一旦最基本的类Email修改 这是Person类就要修改,若一层一层更深,那一旦底层修改,那要修改的东西就是一连串的修改。就拿这个例子对其进行进一步的改进 `

public interface IReceiver {
    String getInfo();
}

public class Email implements IReceiver{
    public String getInfo(){
        return "Email";
    }
}


public class duanxin implements IReceiver{
    public String getInfo(){
        return "Email";
    }
}

public class Person {
    public void receive(IReceiver iReceiver){
        System.out.println(iReceiver.getInfo());
    }
}

public class DependeceInversion {
    public static void main(String[] args){
        Person person = new Person();
        person.receive(new Email());
        person.receive(new duanxin());
    }
}

采用依赖倒置原则 引入了一个IReceiver接口,使Person类与IReceiver发生依赖,而短信和发邮件只需要实现这个接口即可,Person类没有去依赖具体的细节,而是尽量采用面向接口(抽象)编程,这样有什么好处呢?使用接口或抽象类目的就是制定好规范,但是不涉及到具体的实现细节,具体的任务由实现他的类去完成。所以依赖倒置原则的基本理念就是,细节有许多的多变性,而抽象的东西更稳定。

迪米特法则

最主要的思想就是:最少知道原则,即低耦合。

类与类关系越密切,耦合度越大;即一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类不管多么复杂,都尽量将逻辑封装在类的内部。对外除了提供的public方法,不对外泄露任何消息 迪米特法则的核心就是降低类之间的耦合度,由于每个类都减少了不必要的依赖,因此迪米特法则只是要求降低类间(对象间)耦合关系,并不是要求完全没有依赖关系。 简而言之,其法则的意思就是直接和朋友通信。什么是朋友,只要两个对象之间有耦合关系,则这两个对象就是朋友关系。其中出现成员变量,方法参数,方法返回值中的类则为直接朋友,出现在局部变量中的类就不是直接朋友。