接口(Interface)

使用:

  • 接口中不能定义构造器,意味着不能实例化
  • 通过类实现接口来使用implements
  • 接口可以多继承,即C可以继承A,B。使用接口C需要实现A,B中的所有方法
public class interfaceTest(){
  public static void main(String[] args){
    sout(Flyable.MAX_SPEED);
  }
}
interface Flyable(){
  //全局常量
  public static final int MAX_SPEED = 7900;
  int MIN_SPEED = 1;//可以省略前面的
  //抽象方法
  public abstract void fly();
  //可以省略
  void stop;
}
  • 接口的具体使用

    • 接口使用上满足多态性

      public Class Test(){
      psvm(){
      Computer com = new Computer();
      Flash flsh = new Flash();
      com.transferData(flash);//可以用实现类
      }
      }
      Class Computer{
      public void transferData(USB usb){
        usb.start();
        usb.stop();
      }
      interface USB(){
      void start();
      void stop();    
      }
      Class Flash implements USB(){
      }//实现类

      接口的应用

      daili模式(静态daili)

      Test{
      psvm(){
      Server server = new Server();
      ProxyServer proxy = new ProxyServer(server);
      proxy.browsw();
      }
      }
      interface NetWork(){
      void browse();
      }
      Class Server implements NetWork(){
      @Override
      void browse(){
      sout("真实的服务器访问网络");
      }
      }
      //***类,并不是真的让他联网,联网的还是Server对象才行
      Class ProxyServer implements NetWork(){
      private NetWork work;//依赖
      public ProxyServer(NetWork work){
      this.work = work;//构造器方式注入
      }
      public void check(){
        sout("联网之前的检查工作");
      }
      @Override
      void browse(){
        check();
        work.browse();
      }
      }

      动态***(daili)可以通过反射实现进行多个接口的***(daili)

      工厂模式

    • 简单工厂模式:缺点是如果增加新产品,不修改代码的话是无法扩展的,违反了开闭原则(对扩展开放,对修改关闭)

      interface Car(){
      void run();
      }
      Class Audi implements Car{
      public void run(){
        sout("奥迪在跑");
      }
      }
      Class Factory{
      public static Car getCar(String type){
        if ("奥迪".equals(type)) {
            return new Audi();
        }else if ("比亚迪".equals(type)) {
            return new BYD();
        }else{
            return null;
        }
      }
      }
      Client2{
      psvm(){
        Car a = Factory.getCar("奥迪");
        a.run();
      }
      }
    • 工厂方法

      interface Car(){
      void run();
      }
      Class Audi implements Car{
      public void run(){
        sout("奥迪在跑");
      }
      }
      interface Factory(){//工厂接口
      Car getFactory();
      }
      Class AudiFactory implements Factory{
      Audi getCar(){
        return new Audi;
      }
      }
      Class BYDFactory implements Factory{
      Audi getCar(){
        return new BYD();
      }
      }
      Client2{
      psvm(){
        Car a = new AudiFactory.getCar();
        a.run();
      }
      }
    • 抽象工厂

      //在本实例中我们对代码进行了大量简化,实际使用时,界面组件的初始化代码较为复杂,还需要使用JDK中一些已有类,为了突出核心代码,在此只提供框架代码和演示输出。
      //按钮接口:抽象产品
      interface Button {
      public void display();
      } 
      //Spring按钮类:具体产品
      class SpringButton implements Button {
      public void display() {
         System.out.println("显示浅绿色按钮。");
      }
      }
      //Summer按钮类:具体产品
      class SummerButton implements Button {
      public void display() {
         System.out.println("显示浅蓝色按钮。");
      }    
      }
      //文本框接口:抽象产品
      interface TextField {
      public void display();
      }
      //Spring文本框类:具体产品
      class SpringTextField implements TextField {
      public void display() {
         System.out.println("显示绿色边框文本框。");
      }
      } 
      //Summer文本框类:具体产品
      class SummerTextField implements TextField {
      public void display() {
         System.out.println("显示蓝色边框文本框。");
      }    
      } 
      //组合框接口:抽象产品
      interface ComboBox {
      public void display();
      }
      //Spring组合框类:具体产品
      class SpringComboBox implements ComboBox {
      public void display() {
         System.out.println("显示绿色边框组合框。");
      }
      }
      //Summer组合框类:具体产品
      class SummerComboBox implements ComboBox {
      public void display() {
         System.out.println("显示蓝色边框组合框。");
      }    
      }
      //界面皮肤工厂接口:抽象工厂
      interface SkinFactory {
      public Button createButton();
      public TextField createTextField();
      public ComboBox createComboBox();
      }
      //Spring皮肤工厂:具体工厂
      class SpringSkinFactory implements SkinFactory {
      public Button createButton() {
         return new SpringButton();
      }
      
      public TextField createTextField() {
         return new SpringTextField();
      }
      
      public ComboBox createComboBox() {
         return new SpringComboBox();
      }
      }
      //Summer皮肤工厂:具体工厂
      class SummerSkinFactory implements SkinFactory {
      public Button createButton() {
         return new SummerButton();
      }
      
      public TextField createTextField() {
         return new SummerTextField();
      }
      
      public ComboBox createComboBox() {
         return new SummerComboBox();
      }
      }