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);
}
這邊可以得到順序:
畫面顯示圖: