zoukankan      html  css  js  c++  java
  • 七大原则三-->依赖倒转原则-->依赖关系的三种实现

    依赖关系传递的三种方式
    1) 接口传递
    2) 构造方法传递
    3) setter方式传递

    公共的接口 和 实现类

    /**
     * 公共的电视接口
     */
     interface ITV { 
         public void play();
     }
    /**
     * 公共的电视实现类
     */
     class ChangHong implements ITV {
        @Override
        public void play() {
            System.out.println("长虹电视机,打开");
        } 
     }

    第一种实现

    /**
     * 方式1: 通过接口传递实现依赖
     * 定义 开关接口
     */
     interface IOpenAndClose {
         public void open(ITV tv); //抽象方法,接收接口
     }
     
    /**
     * 开关实现类
     */
     class OpenAndClose implements IOpenAndClose{
        @Override
         public void open(ITV tv){
             tv.play();
          }
      }

    第二种实现

    // 方式2: 通过构造方法依赖传递
     interface IOpenAndClose {
         public void open(); //抽象方法
     }
    
     class OpenAndClose implements IOpenAndClose{
         public ITV tv; //成员
         public OpenAndClose(ITV tv){ //构造器
             this.tv = tv;
         }
         public void open(){
             this.tv.play();
         }
     }

    第三种实现

    // 方式3 , 通过setter方法传递
    interface IOpenAndClose {
        public void open(); // 抽象方法
    
        public void setTv(ITV tv);
    }
    
    class OpenAndClose implements IOpenAndClose {
        private ITV tv;
    
        public void setTv(ITV tv) {
            this.tv = tv;
        }
    
        public void open() {
            this.tv.play();
        }
    }

    package com.wf.zhang.inversion.improve2;
    public class DependencyPass {
        public static void main(String[] args) {
            
    //        System.out.println("------>第一种接口实现");
    //        ChangHong changHong = new ChangHong();
    //        OpenAndClose first = new OpenAndClose();
    //        first.open(changHong);
            
        
    //        System.out.println("------>通过构造器进行依赖传递");
    //        ChangHong changHong = new ChangHong();
    //        OpenAndClose two = new OpenAndClose(changHong);
    //        two.open();
            
        
            System.out.println("------>通过setter方法进行依赖传递");
            OpenAndClose three = new OpenAndClose();
            ChangHong changHong = new ChangHong();
            three.setTv(changHong);
            three.open();
    
        }
    
    }
    
    /**
     * 公共的电视接口
     */
     interface ITV { 
         public void play();
     }
    /**
     * 公共的电视实现类
     */
     class ChangHong implements ITV {
        @Override
        public void play() {
            System.out.println("长虹电视机,打开");
        } 
     }
    
    /**
     * 方式1: 通过接口传递实现依赖
     * 定义 开关接口
     */
    // interface IOpenAndClose {
    //     public void open(ITV tv); //抽象方法,接收接口
    // }
     
    /**
     * 开关实现类
     */
    // class OpenAndClose implements IOpenAndClose{
    //    @Override
    //     public void open(ITV tv){
    //         tv.play();
    //      }
    //  }
    
    
    
    // 方式2: 通过构造方法依赖传递
    /* interface IOpenAndClose {
         public void open(); //抽象方法
     }
    
     class OpenAndClose implements IOpenAndClose{
         public ITV tv; //成员
         public OpenAndClose(ITV tv){ //构造器
             this.tv = tv;
         }
         public void open(){
             this.tv.play();
         }
     }
    */
    
    // 方式3 , 通过setter方法传递
    interface IOpenAndClose {
        public void open(); // 抽象方法
    
        public void setTv(ITV tv);
    }
    
    class OpenAndClose implements IOpenAndClose {
        private ITV tv;
    
        public void setTv(ITV tv) {
            this.tv = tv;
        }
    
        public void open() {
            this.tv.play();
        }
    }
    View Code

    依赖倒转原则的注意事项和细节
    1) 低层模块尽量都要有抽象类或接口,或者两者都有,程序稳定性更好.
    2) 变量的声明类型尽量是抽象类或接口, 这样我们的变量引用和实际对象间,就存在
    一个缓冲层,利于程序扩展和优化
    3) 继承时遵循里氏替换原则

    古人学问无遗力,少壮工夫老始成。 纸上得来终觉浅,绝知此事要躬行。
  • 相关阅读:
    Web网页配色方案及安全色谱
    JQuery获取元素文档大小、偏移和位置和滚动条位置的方法集合
    IE8的css hack
    jquery 获取元素坐标
    CSS 颜色值
    正则表达式
    JS获取宽度
    常用正则表达式例子
    HTML转义字符
    myeclipse 10.0 含破解补丁/注册机
  • 原文地址:https://www.cnblogs.com/wf-zhang/p/12304670.html
Copyright © 2011-2022 走看看