zoukankan      html  css  js  c++  java
  • 个人理解Java程序设计原则—面向接口编程

    前言:

      如果说类是对一类事物的抽象,那么接口就是对一类行为的抽象,因为它只规范了一组方法的调用特征而没有给出方法的具体实现,接口是实现面向抽象编程,从而达到代码间弱耦合的重要手段之一。

      接口的重要作用之一:解耦

      对于程序设计来说,接口的重要意义在于它的解耦作用。在程序设计中,适当使用接口可以对不同功能的程序设计模块进行有效的隔离。也就是说,服务方代码的任何变动不会蔓延到客户方,从而使程序的可维护性变的更强,这个也是强制作用带来的结果,如下是一个接口实现代码接口(隔离)作用的示例。

    • 程序的代码:
     1 /**
     2  * 接口
     3  */
     4 public interface print {
     5     public void printChar();
     6     public void printNum();
     7 }
     8 
     9 /**
    10  * 服务类
    11  */
    12 class Serv implements print{
    13     public void printChar(){
    14         System.out.println("this is printChar");
    15     }
    16     public void printNum(){
    17         System.out.println("this is printNum");
    18     }
    19 }
    20 
    21 /**
    22  * 客户类
    23  */
    24 class Client {
    25     public void printClient(print s){    //以接口作为参数类型
    26         s.printChar();
    27     }
    28 }
    29 /**
    30  * 主类
    31  */
    32 public class Main{
    33     public static void main(String[] args){
    34         new Client().printClient(new Serv());
    35     }
    36 }

    在本例子中,接口也遵循类的类型赋值兼容规则,即实现类可以被看做接口类型。那就是说,Serv类型对象可以被当做print对象来被printClient()方法所接口,这就带来了一个重要的优点,对于客户类中的printClient()方法来说,只要接口print不变,实现类Serv的代码无论怎么变都不会影响客户代码,简单点说,服务方的任何类型都不会蔓延到客户代码,即使服务方对服务进行升级时连服务类都改了,那也只需要在主类中作一个小的修改就好了。

     面向接口编程的好处:

           1、可以在使用类的时候更加清晰明了,更加的关注的是自己需要的功能,如下代码:

    1 //以下三个实现类的定义中,使用面向接口定义的明显要比使用LinkedList定义要清晰
    2 //很清楚的定义了需要的类型集合,是队列还是链表,有助于代码的阅读
    3 LinkedList lis=new LinkedList();
    4 Queue que=new LinkedList();
    5 List ls=new LinkedList();

    在java源代码中,LinkedList类实现了Queue接口和List接口,而队列和链表是两种概念的数据结构集合。

            2、对应着不同的接口,其实现类的实例对象有着不同的方法,使程序看起来更加合理。比如实现了Queue接口时,就可以使用其中的poll()方法和offer()方法,这个方法在List接口中就没有

    以上就是个人的理解

  • 相关阅读:
    pip不是内部或外部命令也不是可运行的程序或批处理文件的问题
    动态规划 leetcode 343,279,91 & 639. Decode Ways,62,63,198
    动态规划 70.climbing Stairs ,120,64
    (双指针+链表) leetcode 19. Remove Nth Node from End of List,61. Rotate List,143. Reorder List,234. Palindrome Linked List
    建立链表的虚拟头结点 203 Remove Linked List Element,82,147,148,237
    链表 206 Reverse Linked List, 92,86, 328, 2, 445
    (数组,哈希表) 219.Contains Duplicate(2),217 Contain Duplicate, 220(3)
    重装系统
    java常用IO
    端口
  • 原文地址:https://www.cnblogs.com/Lowp/p/2683130.html
Copyright © 2011-2022 走看看