zoukankan      html  css  js  c++  java
  • 设计模式原则之依赖倒置原则

                                                                                                                                     依赖倒置原则

    依赖倒置原则(Dependence Inversion Principle,简称DIP)

    依赖倒置原则的原始定义是:High level modules should not depend upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. Details should depend upon abstractions

    • 高层模块不应该依赖低层模块,两者都应该依赖其抽象;
    • 抽象不应该依赖细节;
    • 细节应该依赖抽象。

          更加精简的定义就是“面向接口编程”——OOD(Object-Oriented Design,面向对象设计)的精髓之一


    简单的代码解释

    需求 

    有个接收者需要接收来自邮箱的信息,但之后可能需要接收来自其他信息交流软件的信息 

    版本一

    public class Email {
    
        public String message(){
            return "来自邮箱的信息";
        }
    }
    

      

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

      

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

    UML类图

    控制台运行结果

     这样看起来是接收了来自邮箱的信息 若今后有新的信息来源 就必须修改Person类这就违反开放封闭原则

    改进版本

    public interface Comunication {
        String message();
    }
    

     

    public class Email implements Comunication{
    
        public String message(){
            return "来自邮件的信息";
        }
    }
    

      

    public class WeChat implements Comunication{
    
        public  String message(){
            return "来自微信的信息";
        }
    }
    

      

    public class Person {
    
        public void receive(Comunication comunication){
            System.out.println(comunication.message());
        }
    
    }
    

      

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

    UML类图

     本来Person类依赖的是Emai这个类 现在依赖的是Comunication这个接口 依赖的是抽象 使后期的扩展和修改成为了可能


    依赖传递的三种方式

    1接口声明依赖对象

    2.构造函数传递依赖对象

    3.Setter方法传递依赖对象

  • 相关阅读:
    nmap 快速扫描所有端口
    cdh ntpdate 问题
    看22是不是被玻璃破解
    lucas定理
    HDU1398--Square Coins(母函数)
    【转】HDU1028
    【转】母函数(Generating function)详解 — TankyWoo(红色字体为批注)
    HDU--1085--Holding Bin-Laden Captive!(母函数)
    HDU2588--GCD(欧拉函数)
    【转】扩展欧几里德
  • 原文地址:https://www.cnblogs.com/newbee0101/p/11711123.html
Copyright © 2011-2022 走看看