Model、View、Presenter這三個英文單字,這三個的功能分別是:
Model:伺服器、資料庫端,用來回覆Presenter所請求的東西。Presenter:用來將View所請求的東西經過判斷等等的方式確認後再將請求送往Model並收取Model的回覆。View:使用畫面物件送出請求到Presenter並且接收Presenter對Model的請求結果回覆到畫面上給用戶得知結果。
這邊要建立一個Interface接口介面,目的是為各個Class轉接。
public interface Contract {
    interface View{
        void setString(String string);
    }
    interface Presenter{
        void onButtonClick();
    }
    interface Model{
        interface FinishListener {
            void OnFinished(String string);
        }
        void OnNext(Contract.Model.FinishListener OnFinished);
    }
}
內部程式碼所寫的有一個模擬資料是List<Sring>型態,然後設一個String副程式是接收此List<String>轉成String的資料。
接著OnNext()將定義好的OnFinished叫出並將上面轉好的String資料傳入。
    private static String TAG = "Model";
    List<String> FakeDataList = Arrays.asList(
            "America",
            "China",
            "Japan",
            "Indonesia",
            "Thailand",
            "Taiwan",
            "Korea"
    );
    private String getCountryName(){
        return FakeDataList.toString();
    }
    @Override
    public void OnNext(Contract.Model.FinishListener OnFinished) {
        Log.e(TAG, "OnNext: ");
        OnFinished.OnFinished(getCountryName());
    }
model資料放入View的setString內。    private Contract.View mainView;
    private Contract.Model model;
    private static String TAG = "Presenter";
    public Presenter(Contract.View mainView, Contract.Model model) {
        this.mainView = mainView;
        this.model = model;
    }
    @Override
    public void OnFinished(String string) {
        if(mainView != null){
            Log.e(TAG, "OnFinished: ");
            mainView.setString(string);
        }
    }
    @Override
    public void onButtonClick() {
        Log.e(TAG, "onButtonClick: ");
        model.OnNext(this);
    }
這邊處理畫面的部分,當我按下按鈕之後將訊息傳給Presenter並經過流程獲取到資料後放入setString的欄位中,接著再放入此Class定義的TextView。
    presenter = new Presenter(this,new Model());
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Log.e(TAG, "onClick: ");
            presenter.onButtonClick();
        }
    });
//Interface定義的方法
    @Override
    public void setString(String string) {
        Log.e(TAG, "setString: ");
        showText.setText(string);
    }
這邊可以得到順序:
畫面顯示圖: