zoukankan      html  css  js  c++  java
  • 设计原则 —— 针对接口编程而不针对实现编程

    0. 理解

    • 接口,定义了一堆空实现函数的接口,如下,是对其全部实现类的约束,即必须实现我(接口)事先规定的那些方法,以使得我在操纵父类接口(指向子类实现)时,获得一种操作上的一致性(多态),而忽视其子类具体实现上的差异,即封装变化;

      public interface Iterator {
          boolean hasNext();
          Object next();
      }

    1. 针对接口编程是多态性的体现

    • 针对对象编程简单地说,就是传递的是具体的子类;
      • 而针对接口编程,传递的则是父类引用,这样便可发挥多态性“父类引用指向子类对象”的特点和优势;

    来看一个简答的例子:

    public interface Animal {
        ...
        public void makeSound();
    }

    具体到“狗”,需给出其实现:

    public class Dog implements Animal {
        @Override
        public void makeSound() {
            System.out.println("Wang! Wang!");
        }
    }

    同理可给出其他具体动物类(猪牛羊等)的叫声实现。此时如何传递动物的实例化对象,调用其叫声方法呢?

    • 针对实现编程:

      public void hearDogSound(Dog dog) {
          dog.makeSound();
      }

      如果需要调用牛的叫声方法:

      public void hearCowSound(Cow cow){
          cow.makeSound();
      }

      针对对象编程,每想调用不同子类对象的共有方法,都要去创建一个与该类相关的 hearSound() 方法,这样在 interface 中定义的共有方法便失去了意义。

    • 针对接口编程:

      public void hearSound(Animal animal) {
          animal.makeSound();
      }
  • 相关阅读:
    sed命令使用与正则表达式元字符
    centos6和centos7的网卡配置
    制作启动光盘centos6
    搭建一个私有CA
    yum命令
    while语法命令
    linux的进程与计划任务命令总结
    磁盘管理命令应用
    脚本命令与笔记
    重定向命令的使用
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9421281.html
Copyright © 2011-2022 走看看