MVP架構(gòu)略解:
五華網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián),五華網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為五華上1000+提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢,請找那個(gè)售后服務(wù)好的五華做網(wǎng)站的公司定做!
M--Model,業(yè)務(wù)層(主要負(fù)責(zé)具體功能實(shí)現(xiàn))
V--View,視圖層(用作顯示)
P--Presenter,連接層(搭建Model層和View層通信橋梁)
MVP模式下,Model層和View層是完全隔離(解偶)的,兩者的通信都是通過Presenter層作為橋梁來進(jìn)行通信的,所以,Presenter層中一定含有Model層和View層具體實(shí)例(由這可以看出,當(dāng)界面改變時(shí),只需更改Presenter層中的View實(shí)例即可;同理,當(dāng)數(shù)據(jù)加載方式改變時(shí),只需更改Presenter層中的Model實(shí)例即可.
心得:
要寫出MVP架構(gòu)代碼,主要是看M層和V層功能概述:
1.首先看View層,View層主要做顯示用,那么,寫View層接口的時(shí)候,就要考慮下View層有多少種顯示需求,從而定義出相應(yīng)接口.
2.看完View層后,就要考慮下Model層具體業(yè)務(wù)功能的實(shí)現(xiàn)了,實(shí)現(xiàn)過程中,有可能處于耗時(shí)狀態(tài),此時(shí)的狀態(tài)就應(yīng)該通過某個(gè)接口通知到Presenter層,從而讓View層也得知,做出相應(yīng)顯示;實(shí)現(xiàn)結(jié)果成功失敗也是如此(也就是說,Model層操作結(jié)果要通過Presenter的接口讓Presenter知道,從而讓View層知道).
eg:界面只有一個(gè)TextView用作顯示,想假設(shè)從網(wǎng)絡(luò)上下載文件(模擬為加載數(shù)據(jù)),TextView在下載不同過程進(jìn)行不同的文字提示.
思路:
1.View層:主要分3個(gè)過程:下載時(shí)提示,下載成功提示,下載失敗提示.
//com.mvp.view
public interface IView
{
void onLoading();
void onSuccess(List<String> data);//數(shù)據(jù)下載成功后,進(jìn)行顯示
void onFailed();
}
2. Model層:主要進(jìn)行數(shù)據(jù)加載
//com.mvp.model
public interface IModel
{
//加載數(shù)據(jù)可能是異步操作,通過接口回調(diào)告知Presenter結(jié)果
void loadData(IPresenter listener);
}
//com.mvp.presenter
public interface IPresenter
{
void loadData();//告訴Model開始loadData
void onSuccess(List<String> data);
void onFailed();
void onDestroy();
}
以上,就將通用的MVP接口定義出來的,后續(xù)要做的就是針對特定層做出特定實(shí)現(xiàn)即可.
//com.mvp.model
public class IModelImpl01 implements IModel
{
@Override
void loadData(IPresenter listener)
{
//do download func,here pausing 10s to imitate the download behav
try{
Thread.sleep(10000);
List<String> data = new ArrayList<String>();
data.add("imitate loading data successfully");
listener.onSuccess(data);
}catch(Exception e)
{
listener.onFailed();
}
}
}
//com.mvp.presenter
public class IPresenterImpl01 implements IPresenter
{
private IView view;
private IModel model;
public IPresenterImpl01(IView view)
{
this.view = view;
model = new IModelImpl01();
}
@Override
void loadData()
{
if(view != null)
{
view.onLoading();
}
model.loadData(this);
}
@Override
void onSuccess(List<String> data)
{
if(view != null)
{
view.onSuccess(data)
}
}
@Override
void onFailed()
{
if(view != null)
{
view.onFailed();
}
}
@Override
void onDestroy()
{
view = null;
}
}
//com.mvp.view
public class MainActivity extends Activity implements IView
{
private TextView tvShow;
private IPresenter presenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvShow = (TextView)findViewById(R.id.tvShow);
presenter = new IPresenterImpl01(this);
presenter.loadData();
}
@Override
void onLoading()
{
tvShow.setText("onLoading...");
}
@Override
void onSuccess(List<String> data)//數(shù)據(jù)下載成功后,進(jìn)行顯示
{
tvShow.setText("load data success:"+data);
}
@Override
void onFailed()
{
tvShow.setText("load data failed");
}
@Override
protected void onDestroy()
{
super.onDestroy();
presenter.onDestroy();
}
}
新聞名稱:androidMVP模式簡介
鏈接地址:http://jinyejixie.com/article10/ijopdo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、云服務(wù)器、網(wǎng)站導(dǎo)航、Google、搜索引擎優(yōu)化、App設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)