zoukankan      html  css  js  c++  java
  • java设计原则之二----依赖倒转原则、里氏代换原则

         放平心态慢慢厉害,不动声色慢慢发光!

    1、依赖倒转原则和里氏代换原则

      依赖倒转原则定义:抽象不应该依赖细节,细节应该依赖与抽象;换一句话讲就是应该针对接口编程,不应该针对实现编程;依赖倒转的意思的就是两个模块谁也不能依赖谁,除了约定的接口,大家都可以灵活自如;

      里氏代换原则定义:子类型必须能够替换掉它们的父类型;只有当子类可以替换掉父类,软件单位的功能不受影响时,父类才能真正被复用,而子类也能够在父类的基础上增加新的行为;换一句话说就是子类在继承父类的时候,尽量不要去重写父类的方法。

      综合就是一句话:程序的开发应该面向对象,而不是面向过程。

    2、上代码,这是一个很简单的demo:

      public class BenzCar {

        public void run () {
        System.out.printf("开奔驰!");
        }

      }

      public class Driver {

        public void drive (BenzCar car) {
          car.run();
        }

      }

      public class Test {

        public static void main(String[] args) {

          Driver lisi = new Driver();
          lisi.drive(new BenzCar());

        }

      }

      输出:

      开奔驰!

      上面这段代码很简单,就是一个李四开奔驰。

      但是突然来了一个需求,说不开奔驰了,让李四开奥迪吧,这时候上面的代码会有大麻烦,因为司机类不能用了;

      所以这就是一个典型的面向过程开发的代码,仅仅满足那时候的需求,但是当需求变更或者增加时,代码就需要重构了。

    下面我们把上面的代码改造一下,改造成面向接口的开发代码:

    public interface ICar {
    void run ();
    }

    public interface IDriver {
    void drive();
    }

    public class Driver implements IDriver {
    ICar car;
    public Driver (ICar car) {
    this.car = car;
    }

    public void drive() {
    car.run();
    }
    }

    public class BenzCar implements ICar {
    public void run() {
    System.out.println("开奔驰了!");
    }
    }

    public class AodiCar implements ICar {
    public void run() {
    System.out.println("开奥迪车了!");
    }
    }

    public class Test {

    public static void main(String[] args) {
    Driver lisi = new Driver(new BenzCar());
    lisi.drive();
    Driver zhaosi = new Driver(new AodiCar());
    zhaosi.drive();
    }
    }

    改造完的代码可以明显感觉到,司机可以变,汽车品牌可以变,怎么变都很简单,都不影响主体功能--开车。
    这里面就是依赖倒转的好处,谁也不依赖谁,大家各过各的,有需求就沟通,没需求或者你改动了,只要你的接口没变,我就能适应你。

    当然,这里面没有使用里氏代换原则,因为我这里都是用的接口。
    我也是在不断学习中,如果有什么不对的地方,欢迎指正!

      

  • 相关阅读:
    互联网博物馆
    CSS简介和CSS选择器
    perl 面向对象 use base
    mysql tcp 4层负载
    mysql tcp 4层负载
    mysql Emoji表情字符集转换
    mysql Emoji表情字符集转换
    html submit 登录
    html submit 登录
    haroxy hdr
  • 原文地址:https://www.cnblogs.com/tengri-fighting/p/12669942.html
Copyright © 2011-2022 走看看