zoukankan      html  css  js  c++  java
  • 七大原则三-->依赖倒转原则

    依赖倒转原则

    1) 高层模块不应该依赖低层模块,二者都应该依赖其抽象
    2) 抽象不应该依赖细节,细节应该依赖抽象
    3) 依赖倒转(倒置)的中心思想是面向接口编程
    4) 依赖倒转原则是基于这样的设计理念:相对于细节的多变性,抽象的东西要稳定的
    多。以抽象为基础搭建的架构比以细节为基础的架构要稳定的多。在java中,抽象
    指的是接口或抽象类,细节就是具体的实现类
    5) 使用接口或抽象类的目的是制定好规范,而不涉及任何具体的操作,把展现细节的
    任务交给他们的实现类去完成

    需求 Person类接受消息

    下面代码 违反了依赖倒转原则

    Person 类 接受消息

    * 将Email类 作为参数 产生了依赖
    * 如果 参数发生变化 即接受的是微信 或短信 整个方法需要改动

    package com.wf.zhang.inversion;
    
    public class DependecyInversion {
        public static void main(String[] args) {
            Person person = new Person();
            person.receive(new Email());
        }
    }
    
    class Email{
        public String getInfo() {
            return "电子邮件信息: hello world ";
        }
    }
    /**
     *  Person 类 接受消息
     *  将Email类 作为参数  产生了依赖
     *  如果 参数发生变化   即接受的是微信 或短信 整个方法需要改动
     * @author wf.zhang
     *
     */
    class Person{
        public void receive(Email email) {
            System.out.println(email.getInfo());
        }
    }

    解决 定义接受的接口   调用时传入不同的实现类  实现不同的接受

    package com.wf.zhang.inversion.improve;
    
    public class DependecyInversion2 {
        public static void main(String[] args) {
            Person person = new Person();
            person.receive(new Email());
            //传入不同实现类 实现不同的接受
            person.receive(new WenXin());
        }
    }
    /**
     * 定义接受的接口
     * @author wf.zhang
     *
     */
    interface IReciver{
        public String getInfo();
            
    }
    
    class Email implements IReciver{
        public String getInfo() {
            return "电子邮件信息: hello world ";
        }
    }
    class WenXin implements IReciver{
        public String getInfo() {
            return "微信信息: hello WenXin ";
        }
    }
    
    /**
     *  Person 类 接受消息
     *  将IReciver 接口 作为参数  产生了依赖
     * @author wf.zhang
     *
     */
    class Person{
        public void receive(IReciver reciver) {
            System.out.println(reciver.getInfo());
        }
    }

    古人学问无遗力,少壮工夫老始成。 纸上得来终觉浅,绝知此事要躬行。
  • 相关阅读:
    利用进制转换压缩数字
    一个不错的移动政务网站
    系统缓存全解析(转摘)
    GeoDatabase元数据不能编辑的问题“The application is not licensed to perform this operation ”
    RSA算法的分析与实现(转载)
    云计算经济学
    Memcached在Windows操作系统下多实例并存(转载)
    AGS FlexView 与 ArcGIS Server的FeatureLayer交互的过程
    转载>ArcEngine中版本的使用
    基于ArcEngine的地图四着色算法的实现(转载)
  • 原文地址:https://www.cnblogs.com/wf-zhang/p/12304508.html
Copyright © 2011-2022 走看看