Javaインタフェース(コールバック、リスナー、傍観者)


Javaインタフェースを詳しく説明するブログ記事(https://www.charlezz.com/?p=768)があり、彼を勉強して書いた文章です.
インターフェース.
  • インタフェース(interface)はjavaプログラミング言語でクラスが実装しなければならない動作を指定するための抽象データ型である.(プロトコルと似ています.)
    出典:https://ko.wikipedia.org/wiki/%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4_(%EC%9E%90%EB%B0%94)
  • 動作
  • の他の言語では、関数は単独で存在します.ただしJavaにはクラスが存在する(関数Xが単独で存在する)
  • クラスの関数をメソッドと呼びます.
  • この方法のオブジェクト向けプログラミングにおける動作.
  • public int sum(int a, int b) {
        return a+b;
    }
  • sumの方法があり、aとbを入力してさらなる「行動」を行う.sumはインタフェース定義でいう「動作」を表す.
  • インプリメンテーション
    public interface Calculator {
        int sum(int a , int b);
    }
  • Javaインタフェースの形式(計算機と呼ばれる)
  • 計算機内部和と呼ばれる方法を定義するが、実施しない.
  • インタフェースを実装する場合、クラスにキーワード「implements」を使用します.(以下のコード)
  • public class CalculatorImpl implements Calculator {
        @Override
        public int sum(int a, int b) {
            return a+b;
        }
    }
  • インタフェースを実装するには、インタフェースで定義された方法を実装する必要があります.
  • Calculator calc = new CalculatorImpl();
    
  • CalculatorImplによって作成されたオブジェクトは、CalculatorImplタイプにもCalculatorタイプにも属します.
  • 抽象
  • ある行為(行為)の具体的な実施(実現)を抽象(抽象)と呼ぶ.
  • 秋史には具体的または実体はなく,行動(方法)定義のみである.
  • 多形性(Polymorphics):抽象インタフェースの実装方法に応じて、メソッドに異なるコードまたは戻り値を作成できます.同じインタフェースを実現しても、「多形性」と呼ばれる異なる形態を有することができる.
  • public class CalculatorPlus3 implements Calculator {
        @Override
        public int sum(int a, int b) {
            return a+b+3;
        }
    }
  • CalculatorPlus 3クラスという状況と計算機の作成を実現します.
  • ですが先ほどとは異なり、戻り値に3を加算した場合です.
  • 計算機Plus 3によって生成されたオブジェクトは、計算機タイプ和と呼ばれる方法を依然として有する.しかし、その戻り値などの実施形態は異なる.->マルチステート
  • コールバックvsリスナーvs傍観者
  • コールバック(Callback):イベントが発生したときに特定のメソッドを呼び出し、通知します.(1コール).一般関数呼び出し(call)は、呼び出し元によって呼び出される.しかし、コールバックは呼び出し元が呼び出される形式である.
  • リスナー:特定のイベントを処理するインタフェース.イベントが発生するのを待つ、イベントが発生した場合、接続されたリスナー(n個の呼び出し)
  • にイベントを転送する.
  • 傍観者:
  • データまたは属性の変更を検出し、変更をサブスクライバに転送
    cf)イベント:UIに適用されるユーザ反応部材(ex)をクリックし、テキストを入力し、ドラッグ
    public interface MyEventListener {
        void onEvent();
    }
  • イベントを転送するためのインタフェース
  • を定義する.
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            listener.onEvent();
        }
        
        MyEventListener listener = new MyEventListener() {
            @Override
            public void onEvent() {
                Toast.makeText(MainActivity.this, "onEvent",Toast.LENGTH_SHORT).show();
            }
        }; 
    }

  • Listenerという名前のMyEventListenerオブジェクトを作成する場合.クラスなしで直接インタフェースを介してオブジェクトを作成します.名前のないクラスなので、匿名クラスまたは無名クラスと呼ばれます.

  • 通常のビュー.setOnClickListener(新しいOnClickListener(){...})は、このようにしてリスナーをビューにインストールします.代表的な無名レベルを使用する方法の1つです.

  • Listenerオブジェクト呼び出しonEvent()->無名クラスがイベントをうまく伝達できるかどうかを確認します.
  • ソース
    https://www.charlezz.com/?p=768