Java接口的要求

Nir*_*rav 4 java oop interface

我有两个程序.
第一个没有'Buffer'接口,第二个是'Buffer'接口.
两个程序都给我相同的输出.
我的问题是.
为什么我需要创建"缓冲"接口,而我可以在没有接口的情况下获得相同的输出?
这是我的两个程序:

没有接口:

public class MainClass {

    public static class producer {

        maintainBuffer bf;

        producer(maintainBuffer buffer) {
            this.bf = buffer;
        }

        public void setData() {
            for (int i = 0; i <= 10; i++) {
                bf.set(i);
            }
        }
    }

    public static class reader {

        maintainBuffer bf;

        reader(maintainBuffer buffer) {
            this.bf = buffer;
        }

        public void getData() {
            System.out.println("From Reader Class:-" + bf.get());

        }

        public void extraData() {
            System.out.println("Extra DATA");
        }
    }

    public static class maintainBuffer {

        int buffer = -1;

        public int get() {
            return buffer;
        }

        public void set(int a) {
            buffer += a;
        }
    }

    public static void main(String str[]) {
        maintainBuffer b = new maintainBuffer();
        producer p = new producer(b);
        p.setData();
        reader r = new reader(b);
        r.getData();
        r.extraData();
    }
}
Run Code Online (Sandbox Code Playgroud)

有了接口

public class MainClass {

    public static class producer {

        Buffer bf;

        producer(Buffer buffer) {
            this.bf = buffer;
        }

        public void setData() {
            for (int i = 0; i <= 10; i++) {
                bf.set(i);
            }
        }
    }

    public static class reader {

       Buffer bf;

        reader(Buffer buffer) {
            this.bf = buffer;
        }

        public void getData() {
            System.out.println("From Reader Class:-" + bf.get());

        }

        public void extraData() {
            System.out.println("Extra DATA");
        }
    }


 public static interface Buffer{
       public int get();
       public void set(int a);
   }


  static class maintainBuffer implements Buffer{
      int buffer=-1;

        public int get() {
         return buffer;
        }

        public void set(int a) {
           buffer +=a;
        }
  }
    public static void main(String str[]) {
        Buffer b = new maintainBuffer();
        producer p = new producer(b);
        p.setData();
        reader r = new reader(b);
        r.getData();
        r.extraData();

    }
}
Run Code Online (Sandbox Code Playgroud)

Pet*_*rey 7

使用界面,您可以在以后使用其他实现而无需更改所有代码.例如,如果使用List接口,则可以是LinkedList,ArrayList,CopyOnWriteArrayList或其他东西.

你说得很清楚,实施的细节并不重要.

另一方面,我不会为每个班级制作一个界面.在大多数情况下,在不太可能的情况下,在您真正需要的时候添加界面并不总是很困难.

当你想要松散耦合时,我会使用一个接口,例如当调用者是另一个模块或由另一个开发人员使用时.如果你有一个像本地实现的紧耦合,我可能不会打扰一个接口.

在上面的示例中,您可能希望添加单元测试以查看设置了哪些值,或者开发人员可能希望使用缓冲区来记录设置的值.使用界面可以使这更容易.