簡化的mvp架構:FinalMvp
FinalMvp
mvp模式介紹
由圖可見,mvp模式將分為View、presenter、model,而presenter將連接View和model, view和model之間不允許直接交互. 將view和model完全隔絕,可以說完全解決了耦合性的問題。 道理很容易理解,可是要想真正做好卻不那么容易!
finaMvp介紹
finalMvp是為了輕松使用mvp模式開發,并且規范mvp代碼而編寫的框架。 該框架的結構為:BaseView BasePresenter BaseModel 代碼中直接繼承這三類,變可以輕松實現mvp分層 finalMvp架構模型圖:![]()
代碼實現
1、activity繼承BaseView onDataChanage()//當數據變化時通知此方法 onChanageUi()//presenter可以直接發送修改ui指令,在onChangeUi接收 編輯數據字段加上注解@ViewData,presenter會使用依賴注入修改數據 2、編輯presenter繼承BasePresenter initModel()//初始化model onModelCallBack//數據返回后的監聽 執行loadData()//請求數據,會發送到model的loadData 執行setDataChanage(data)//將view中標注@ViewData的數據值修改為data,并通知view改變ui 3、編輯model繼承BaseModel loadData(tag,msg)//加載數據 chanageData(tag,data)//數據加載完成后調用這個方法
demo代碼
Activity編輯實現BaseView
public class MainActivity extends Activity implements BaseView{ private MainPresenter preseneter; private TextView tv; /** * ViewData便是數據源注解,通過此注解可以自動修改值 */ @ViewData public String data="aaaaaaaaaaaaaaaaaaaaaaa"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); preseneter=new MainPresenter(this); tv=new TextView(this); setContentView(tv); tv.setText(data); tv.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { preseneter.chanageTextView(); } }); } @Override public void onDataChanage() { tv.setText(data); } @Override public void onChanageUi(int tag) { } }
MainPresenter繼承BasePresenter
public class MainPresenter extends BasePresenter{ private final int TAG_LOAD_DATA=1; public MainPresenter(BaseView view) { super(view); } public void chanageTextView(){ loadData(TAG_LOAD_DATA, "http://xxxxx"); } /** * 初始化model */ @Override public BaseModel initModel() { return new MainModel(); } @Override public void onModelCallBack(int tag, Object obj) { switch (tag) { case TAG_LOAD_DATA: /** * 執行setDataChange,代碼便會將BaseView中的注解的值替換為obj, * 并執行BaseView下的onDataChanage方法,通知BaseView修改ui */ setDataChanage(obj); break; } } }
MainModel繼承BaseModel
public class MainModel extends BaseModel{ @Override public void loadData(final int tag, String msg) { new Thread(){ public void run() { //執行耗時操作,如執行http請求,從sqlite中讀取或計算數據 try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } //返回得到計算后的數據,將數據返回 chanageData(tag, "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"); }; }.start(); } }
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!