安卓设计模式学习之_MVP
2017-01-05 19:56
302 查看
MVP设计模式出现好久了,一直也在项目里面使用,相比以前的代码,从了解MVP之后,我才觉得以前写的代码真是渣渣 . 代码简洁,利索.解耦和 .
我写了一个注册的demo.提高下写作的能力,
源码下载地址:http://download.csdn.net/detail/fkgjdkblxckvbxbgb/9729993
项目使用了okhttp框架,请自己下载jar包
项目的结构一目了然 .
model层用来处理业务逻辑
persenter层用来交互view层与model层的数据,简称(控制层吧)
view层,用来接收Activity的输入数据,和用于界面的更新
model层的结构.开始看代码
Model======================================================
package com.reeman.demo.register.model;
//业务接口
public interface RegisterModel {
void register(String unseName, String password, RegListener listener);
}
//业务监听接口==================
View层,接收Activity的输入信息,界面提示,以及注册成功之后的回调接口================
parsenter层.处理model与view层之间的数据交互
Activity界面交互
看完有一种畅爽的感觉 . 这样无论代码给谁写,看起来都比较轻松 . 万一某一个模块出现问题,完全不影响其他的功能 . 大不了重写一份,如果不用设计模式,所有的代码耦合度太强,一个功能的一个参数发生了变化, 对不起,你这个功能所有逻辑都可能会牵一发动全身 .
欢迎探讨
我写了一个注册的demo.提高下写作的能力,
源码下载地址:http://download.csdn.net/detail/fkgjdkblxckvbxbgb/9729993
项目使用了okhttp框架,请自己下载jar包
项目的结构一目了然 .
model层用来处理业务逻辑
persenter层用来交互view层与model层的数据,简称(控制层吧)
view层,用来接收Activity的输入数据,和用于界面的更新
model层的结构.开始看代码
Model======================================================
package com.reeman.demo.register.model;
//业务接口
public interface RegisterModel {
void register(String unseName, String password, RegListener listener);
}
package com.reeman.demo.register.model; import java.io.File; import java.io.IOException; import org.json.JSONException; import org.json.JSONObject; import com.reeman.demo.config.AppConfig; import android.os.Environment; import android.widget.Toast; import okhttp3.Call; import okhttp3.Callback; import okhttp3.FormBody; import okhttp3.MediaType; import okhttp3.MultipartBody; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; //业务实现类 public class RegisterModelImpl implements RegisterModel { private static OkHttpClient mOkHttpClient; public void register(String unseName, String password, final RegListener listener) { if (unseName == null || unseName.length() < 3) { listener.UsernameError(); return; } if (password == null || password.length() < 3) { listener.PasswordError(); return; } mOkHttpClient = new OkHttpClient(); try { String url = AppConfig.BASE_URL; RequestBody requestBodyPost = new FormBody.Builder().add("action", "usRegist").add("username", unseName) .add("password", password).build(); Request requestPost = new Request.Builder().url(url).post(requestBodyPost).build(); mOkHttpClient.newCall(requestPost).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { listener.OnFail(e.toString()); } @Override public void onResponse(Call call, Response response) throws IOException { String htmlStr = response.body().string(); try { JSONObject object = new JSONObject(htmlStr); int code = object.getInt("statusCode"); listener.OnSuccess(code, htmlStr); } catch (JSONException e) { e.printStackTrace(); } } }); } catch (Exception e) { } } }
//业务监听接口==================
package com.reeman.demo.register.model; public interface RegListener { void UsernameError(); void PasswordError(); void OnSuccess(int code, String desc); void OnFail(String desc); }
View层,接收Activity的输入信息,界面提示,以及注册成功之后的回调接口================
package com.reeman.demo.register.view; public interface RegisterView { String getUserName(); String getPassword(); void showToast(String text); void RegisterSuccess(); }
parsenter层.处理model与view层之间的数据交互
package com.reeman.demo.register.personter; import com.reeman.demo.register.model.RegListener; import com.reeman.demo.register.model.RegisterModel; import com.reeman.demo.register.model.RegisterModelImpl; import com.reeman.demo.register.view.RegisterView; public class RegisterPersonter implements RegListener { RegisterView mRegisterView; RegisterModel mRegisterModel; public RegisterPersonter(RegisterView mRegisterView) { this.mRegisterView = mRegisterView; mRegisterModel = new RegisterModelImpl(); } public void register() { String unseName = mRegisterView.getUserName(); String password = mRegisterView.getPassword(); mRegisterModel.register(unseName, password, this); } @Override public void UsernameError() { mRegisterView.showToast("用戶名錯誤"); } @Override public void PasswordError() { mRegisterView.showToast("密碼錯誤"); } @Override public void OnSuccess(int code, String desc) { if (code == 0) { mRegisterView.showToast("注册成功"); mRegisterView.RegisterSuccess(); } else { mRegisterView.showToast("註冊失敗,請檢查用戶名或者密碼"); } } public void OnFail(String desc) { mRegisterView.showToast("註冊失敗,請檢查網絡"); } }
Activity界面交互
package com.reeman.demo.register.activity; import android.os.Bundle; import android.os.Handler; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import com.reeman.demo.R; import com.reeman.demo.register.personter.RegisterPersonter; import com.reeman.demo.register.view.RegisterView; import com.reeman.demo.view.SwipeBackActivity; public class RegisterActivity extends SwipeBackActivity implements RegisterView { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_register); initView(); } EditText et_username, et_password; Button btn_login, btn_register; RegisterPersonter mRegisterPersonter; private void initView() { mRegisterPersonter = new RegisterPersonter(this); et_username = (EditText) findViewById(R.id.et_username); et_password = (EditText) findViewById(R.id.et_password); btn_login = (Button) findViewById(R.id.btn_login); btn_register = (Button) findViewById(R.id.btn_register); btn_register.setOnClickListener(new OnClickListener() { public void onClick(View v) { mRegisterPersonter.register(); } }); } public String getUserName() { return et_username.getText().toString(); } @Override public String getPassword() { return et_password.getText().toString(); } Handler handler = new Handler(); public void showToast(final String text) { handler.post(new Runnable() { public void run() { Toast.makeText(RegisterActivity.this, text, Toast.LENGTH_SHORT).show(); } }); } public void RegisterSuccess() { finish(); } }
看完有一种畅爽的感觉 . 这样无论代码给谁写,看起来都比较轻松 . 万一某一个模块出现问题,完全不影响其他的功能 . 大不了重写一份,如果不用设计模式,所有的代码耦合度太强,一个功能的一个参数发生了变化, 对不起,你这个功能所有逻辑都可能会牵一发动全身 .
欢迎探讨
相关文章推荐
- 安卓MVP设计模式
- 设计模式学习:Model View Presenter (MVP)
- Android学习探索之运用MVP设计模式实现项目解耦
- Android学习探索之运用MVP设计模式实现项目解耦
- 安卓MVP设计思想,结合greendao+okhttp通过一个登陆的例子来进行学习(eclipse篇)
- 安卓MVP设计模式
- Android学习探索之运用MVP设计模式实现项目解耦
- MVP设计模式初步学习
- 设计模式学习笔记(2)
- 学习设计模式之生成器(Builder Pattern)模式
- java设计模式学习3--Command Pattern[原创]
- java设计模式学习1--Singleton Pattern[原创]
- 学习简单实用的 Web 服务设计模式,第 1 部分
- java设计模式学习2--Factory Pattern[原创]
- 设计模式学习
- 学习GoF设计模式的重要性
- 设计模式学习笔记(一)
- 学习设计模式之Composite 模式
- J2EE设计模式学习笔记之--实际的数据存取
- 设计模式学习