Skip to content

Instantly share code, notes, and snippets.

@canujohann
Created May 2, 2014 01:16
Show Gist options
  • Save canujohann/bd5c643ba9f30b48b013 to your computer and use it in GitHub Desktop.
Save canujohann/bd5c643ba9f30b48b013 to your computer and use it in GitHub Desktop.
interface in java

Interface

### 定義

一言でいうと → デベロッパにメソードを実装してもらいたい時にinterfaceを使います。

様々な使い方がありますが、今思いつくものはこの3つだけ:

  1. ライフサイクル (lifecycle)
  2. カールバック (callbacks)
  3. イベントハンドラー (events handlers)

ライフサイクル

ほとんどのフレームワークのControllerクラスはライフサイクルパターン(設計モデール)を採用しています。

androidフレームワークの場合は:

android lifecycle

デベロッパにライフサイクルを守ってもらうために、interfaceを利用します。

実装してもらいたいメソード

public interface ActivityInterface {
	
	//一回目だけ実行
	void onCreate();
	
	//画面が表示される度に実行
	void onResume();
	
	//メモリが不足した時に実行
	void onDestroy();

}

interfaceを実装したControllerクラス

public class myActivity implements ActivityInterface {

	@Override
	public void onCreate() {
		System.out.println("onCreateが呼ばれた!");
	}

	@Override
	public void onResume() {
		System.out.println("onResumeが呼ばれた!");
	}

	@Override
	public void onDestroy() {
		System.out.println("onDestroyが呼ばれた!");
	}

}

コールバック

処理スピードが遅かったり、別のthreadを使ったりするとcallbackを設定すると便利です。

例:音楽のダウンロード

ダウンロード後に実装されるinterface

public interface DownloadInterface {

	void onDownloadFinished(String fileName);
	
}

ダウンロードされるオブジェクトクラス

public class DownloadObject {

	public void download(String file, DownloadInterface callback){
		
		try {
			
			//データー処理
			Thread.sleep(1000);
			
			//callback
			callback.onDownloadFinished(file);
			
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
	
}

ダウンロードが完了になったら、onDownloadFinishedが呼ばれる

public class TestDownload {

	public static void main(String[] args) {
		
		//オブジェクト初期化
		DownloadObject object = new DownloadObject();
		
		//download method
		object.download("myMusic.mp3", new DownloadInterface(){

			@Override
			public void onDownloadFinished(String fileName) {
				//ダウンロード後 → 実行
				System.out.println(fileName + "がダウンロードされました");
			}
			
		});

	}

今回は匿名クラスを使いましたが、別で定義しても問題ないです!

イベント

イベントでよく使われています (click, hover, double click, drag , drop, ...)

androidのクリックイベント

Button myButton = new Button();
myButton.setOnClickListener(new OnClickListener() {

	@Override
	public void onClick(View v) {
		// もっと見るクリック時
		System.out.println("クラックされました")
	}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment