架構(gòu)模式 mvp

流程:

1.Model

定義Model層的接口IModel?

Model層接口---實現(xiàn)該接口的類負責實際的獲取數(shù)據(jù)操作,如數(shù)據(jù)庫讀取、網(wǎng)絡(luò)加載

創(chuàng)建Model實體類實現(xiàn)IModel接口,并覆寫數(shù)據(jù)獲取方法。

public interfaceIModel{?

?????void getData(Model.LoadDataCallback callback);

}

public classModelimplementsIModel{

?void getData(Model.LoadDataCallback callback){

? ? ?//實現(xiàn)獲取數(shù)據(jù)

? ??????callback.success(data);

????}

}


public interfaceLoadDataCallback{ void success(String taskId);

? ? ? ? void failure();

? ? }

2 view 層


定義IView接口(View層接口---執(zhí)行各種UI操作,定義的方法主要是給Presenter中來調(diào)用的)

然后創(chuàng)建View實體類實現(xiàn)IView接口,并覆寫UI操作方法。

public interfaceIView{ void showLoadingProgress(String message);

? ? void showData(String text);

}


public class ViewActivity extends Activity implements IView {

? ? private Button mBtnShowToast;

? ? private TextView mText;

? ? private MyHandler mHandler = new MyHandler(ViewActivity.this);

? ? @Override

? ? protected void onCreate(Bundle savedInstanceState) {

? ? ? ? super.onCreate(savedInstanceState);

? ? ? ? setContentView(R.layout.activity_mvp);

? ? ? ? mBtnShowToast = (Button) findViewById(R.id.btn_show_toast);

? ? ? ? mText = (TextView) findViewById(R.id.text);

? ? ? ? mBtnShowToast.setOnClickListener(new View.OnClickListener() {

? ? ? ? ? ? @Override

? ? ? ? ? ? public void onClick(View v) {

? ? ? ? ? ? }

? ? ? ? });

? ? }

? ? @Override

? ? public void showLoadingProgress(final String message) {

? ? ? ? mHandler.post(new Runnable() {

? ? ? ? ? ? @Override

? ? ? ? ? ? public void run() {

? ? ? ? ? ? ? ? mText.setText(message);

? ? ? ? ? ? }

? ? ? ? });

? ? }

? ? @Override

? ? public void showData(final String text) {

? ? ? ? mHandler.post(new Runnable() {

? ? ? ? ? ? @Override

? ? ? ? ? ? public void run() {

? ? ? ? ? ? ? ? mText.setText(text);

? ? ? ? ? ? }

? ? ? ? });

? ? }

? ? }

}

3、定義IPresenter接口

/**

* Presenter層接口---控制Model層的數(shù)據(jù)操作及調(diào)用View層的UI操作來完成“中間人”工作

*/

public interface IPresenter {

? ? void loadData();

}

4、View中實例化Presenter,通過Presenter來處理業(yè)務(wù)邏輯。最終達到,View只負責UI操作,Model只負責數(shù)據(jù),Presenter負責鏈接二者的目的。

View層完整代碼

/**

* 實現(xiàn)IView接口并實現(xiàn)各種UI操作的方法(其他的業(yè)務(wù)邏輯在Presenter中進行操作)

*/

public class ViewActivity extends Activity implements IView {

? ? private Button mBtnShowToast;

? ? private TextView mText;

? ? private MyHandler mHandler = new MyHandler(ViewActivity.this);

? ? private IPresenter mPresenter;

? ? @Override

? ? protected void onCreate(Bundle savedInstanceState) {

? ? ? ? super.onCreate(savedInstanceState);

? ? ? ? setContentView(R.layout.activity_mvp);

? ? ? ? //實例化Presenter,并將實現(xiàn)了IView接口的類傳入進去

? ? ? ? mPresenter = new Presenter(ViewActivity.this);

? ? ? ? mBtnShowToast = (Button) findViewById(R.id.btn_show_toast);

? ? ? ? mText = (TextView) findViewById(R.id.text);

? ? ? ? mBtnShowToast.setOnClickListener(new View.OnClickListener() {

? ? ? ? ? ? @Override

? ? ? ? ? ? public void onClick(View v) {

? ? ? ? ? ? ? ? //通過Presenter來實現(xiàn)業(yè)務(wù)邏輯操作,View層只負責UI相關(guān)操作

? ? ? ? ? ? ? ? mPresenter.loadData();

? ? ? ? ? ? }

? ? ? ? });

? ? }

? ? @Override

? ? public void showLoadingProgress(final String message) {

? ? ? ? mHandler.post(new Runnable() {

? ? ? ? ? ? @Override

? ? ? ? ? ? public void run() {

? ? ? ? ? ? ? ? mText.setText(message);

? ? ? ? ? ? }

? ? ? ? });

? ? }

? ? @Override

? ? public void showData(final String text) {

? ? ? ? mHandler.post(new Runnable() {

? ? ? ? ? ? @Override

? ? ? ? ? ? public void run() {

? ? ? ? ? ? ? ? mText.setText(text);

? ? ? ? ? ? }

? ? ? ? });

? ? }

? ? private class MyHandler extends Handler {

? ? ? ? //弱引用,防止內(nèi)存泄露

? ? ? ? WeakReference<ViewActivity> weakReference;

? ? ? ? public MyHandler(ViewActivity activity) {

? ? ? ? ? ? this.weakReference = new WeakReference<ViewActivity>(activity);

? ? ? ? }

? ? ? ? @Override

? ? ? ? public void handleMessage(Message msg) {

? ? ? ? ? ? switch (msg.what) {

? ? ? ? ? ? ? ? case 1:

? ? ? ? ? ? ? ? ? ? weakReference.get().mText.setText(msg.what);

? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? }

? ? ? ? }

? ? }

}

設(shè)計圖
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容