zoukankan      html  css  js  c++  java
  • 设计模式课程 设计模式精讲 3-4 依赖倒置原则讲解+coding

    1    课程讲解

    1.1  定义

    1.2  优点

    1.3  细节描述

    2    代码演练

    2.0  代码展示优点

    2.1  非面向接口编程

    2.2  面向接口编程1  传参

    2.3  面向接口编程2  构造函数

    2.4  面向接口编程3  set方法

    1    课程讲解

     1.1  定义

    ◆定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象

    1.2  优点

    ◆优点:降低耦合,提高内聚,增强代码的可维护性。

    1.3  细节描述
    ◆抽象不应该依赖细节;细节应该依赖抽象
    ◆针对接口编程,不要针对实现编程

    每个类尽量实现接口或者抽象类,或者继承抽象类并且实现接口

     

    2    代码演练

    2.0  代码展示优点

    面向接口编程优点:Geely,JavaCourse和PreCourse都不需要动,只扩展其他类和修改test即可

    2.1  非面向接口编程

    缺点:Test实现依赖于具体实现,对于后续细节频繁的需求变更不适用。

    测试类:

    package com.geely.design.principle.dependencyinversion;
    
    public class Test {
        //v1.1  普通方法调取java类
        public static void main(String[] args) {
            Geely geely = new Geely();
            geely.studyJavaClass();
            geely.studyPreClass();
        }
    }

    实体类:

    package com.geely.design.principle.dependencyinversion;
    
    public class Geely {
        public void studyJavaClass(){
            System.out.println("Geely Study Java Lesson");
        }
    
        public void studyPreClass(){
            System.out.println("Geely Study Pre Lesson");
        }
    
    }

    打印结果:

    Geely Study Java Lesson
    Geely Study Pre Lesson
    
    Process finished with exit code 0

    2.2  面向接口编程1  接口方法传参

    测试类:

    package com.geely.design.principle.dependencyinversion;
    
    public class Test {
        //v1.1  普通方法调取java类
        /*public static void main(String[] args) {
            Geely geely = new Geely();
            geely.studyJavaClass();
            geely.studyPreClass();
        }*/
    
        //v1.2  面向接口编程 传参
        public static void main(String[] args) {
            Geely geely = new Geely();
            geely.studyImoocClass(new JavaCourse());
            geely.studyImoocClass(new PreCourse());
        }
    }

    实体类:

    package com.geely.design.principle.dependencyinversion;
    
    public class Geely {
        public void studyJavaClass(){
            System.out.println("Geely Study Java Lesson");
        }
    
        public void studyPreClass(){
            System.out.println("Geely Study Pre Lesson");
        }
    
        public void studyImoocClass(Icourse icourse){
            icourse.studyClass();
        }
    
    
    }

    课程类1:

    package com.geely.design.principle.dependencyinversion;
    
    public class JavaCourse implements  Icourse{
        @Override
        public void studyClass() {
            System.out.println("Geely Study Java Lesson");
        }
    }

    课程类2:

    package com.geely.design.principle.dependencyinversion;
    
    public class PreCourse implements Icourse{
        @Override
        public void studyClass() {
            System.out.println("Geely Study Pre Lesson2");
        }
    }

    课程接口:

    package com.geely.design.principle.dependencyinversion;
    
    public interface Icourse {
        void studyClass();
    }

    打印日志:

    Geely Study Java Lesson
    Geely Study Pre Lesson2
    
    Process finished with exit code 0

    2.3  面向接口编程2  构造函数

    测试类:

    package com.geely.design.principle.dependencyinversion;
    
    public class Test {
        //v1.1  普通方法调取java类
        /*public static void main(String[] args) {
            Geely geely = new Geely();
            geely.studyJavaClass();
            geely.studyPreClass();
        }*/
    
        //v1.2  面向接口编程 传参
        /*public static void main(String[] args) {
            Geely geely = new Geely();
            geely.studyImoocClass(new JavaCourse());
            geely.studyImoocClass(new PreCourse());
        }*/
    
        //v1.3  面向接口编程 构造函数
        public static void main(String[] args) {
            Geely geely = new Geely(new JavaCourse());
            geely.studyImoocClass();
        }
    }

    实体类:

    package com.geely.design.principle.dependencyinversion;
    
    public class Geely {
        Icourse icourse ;
        public Geely(Icourse icourse){
            this.icourse = icourse;
        }
    
        public void studyImoocClass(){
            icourse.studyClass();
        }
    
    
    }

    课程类:

    同上

    课程接口:

    同上

    打印日志:

    Geely Study Java Lesson
    
    Process finished with exit code 0

    2.4  面向接口编程3  set方法

    测试类:

    package com.geely.design.principle.dependencyinversion;
    
    public class Test {
        //v1.1  普通方法调取java类
        /*public static void main(String[] args) {
            Geely geely = new Geely();
            geely.studyJavaClass();
            geely.studyPreClass();
        }*/
    
        //v1.2  面向接口编程 传参
        /*public static void main(String[] args) {
            Geely geely = new Geely();
            geely.studyImoocClass(new JavaCourse());
            geely.studyImoocClass(new PreCourse());
        }*/
    
        //v1.3  面向接口编程 构造函数
        /*public static void main(String[] args) {
            Geely geely = new Geely(new JavaCourse());
            geely.studyImoocClass();
        }*/
    
        //v1.4  面向接口编程 set方法
        public static void main(String[] args) {
            Geely geely = new Geely();
            geely.setIcourse(new JavaCourse());
            geely.studyImoocClass();
    
            geely.setIcourse(new PreCourse());
            geely.studyImoocClass();
        }
    
    }

    实体类:

    package com.geely.design.principle.dependencyinversion;
    
    public class Geely {
        Icourse icourse ;
    
        public void setIcourse(Icourse icourse) {
            this.icourse = icourse;
        }
    
        public void studyImoocClass(){
            icourse.studyClass();
        }
    
    
    }

    打印日志:

    Geely Study Java Lesson
    Geely Study Pre Lesson3
    
    Process finished with exit code 0

    课程类:

    同上

    课程接口:

    同上

  • 相关阅读:
    《海思VPSS — 将1920*1080图像通过VPSS缩放旋转成800*1280在LCD上显示》
    《Shell编程实例 —— 自动检测并挂载硬盘》
    《Shell脚本学习 —— 运算符、输入/输出重定向》
    《Shell脚本学习 —— 函数、文件包含》
    《Shell脚本学习 —— 流程控制if、for、while、无限循环、until、case、跳出循环》
    《Shell脚本学习 —— Shell传递参数、echo命令、test命令》
    牛客多校第三场 A—pacm team (4维背包加路径压缩)
    牛客第二场Dmoney
    牛客第二场A-run
    牛客第二场A-run
  • 原文地址:https://www.cnblogs.com/1446358788-qq/p/10962800.html
Copyright © 2011-2022 走看看