本文共 3177 字,大约阅读时间需要 10 分钟。
icompute Electron or renderer. Child elements are not allowed here.
MVP(Model-View-Presenter)模式,是Android开发中的一种设计模式,旨在优化Activity和Fragment的代码结构,使其更易维护和扩展。它通过将Activity中的UI逻辑和业务逻辑分离到View和Presenter接口中,降低了代码耦合度。
View:
对应Activity或Fragment,负责展示UI界面并接收用户输入。在MVP中,View仅负责布局和UI交互,核心业务逻辑被抽离到Presenter层。Model:
实体层的数据存储类,和传统MVC模式中的Model相似,用于存储和处理数据。Presenter:
连接Model和View的中间层,负责业务逻辑的处理、数据更新和UI状态的管理。Presenter通过接口将View和Model分离,实现两者之间的数据交互。降低耦合度:
View和Presenter通过接口交互,避免了直接操作UI元素的耦合性,提高了代码的可扩展性和复用性。简化Activity代码:
Activity仅负责生命周期管理,UI逻辑和业务逻辑被抽离到Presenter层,代码更加简洁易读。支持单元测试:
Presenter接口可以直接被测试类实现,单元测试更加方便且无需依赖Activity实例。防止内存泄漏:
通过将所有UI操作和数据处理移至Presenter,减少了在Activity中的异步任务引用,避免了Activity泄漏问题。一个简单的例子:用户登录功能
// View层:LoginActivitypublic class LoginActivity extends ActionBarActivity implements ILoginView { private EditText editUser; private EditText editPass; private Button btnLogin; private Button btnClear; private ProgressBar progressBar; private ILoginPresenter loginPresenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); editUser = (EditText).findViewById(R.id.username); editPass = (EditText) findViewById(R.id.password); btnLogin = (Button) findViewById(R.id.login); btnClear = (Button) findViewById(R.id.clear); progressBar = (ProgressBar) findViewById(R.id.progress); loginPresenter = new LoginPresenterCompl(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.clear: loginPresenter.clear(); break; case R.id.login: loginPresenter.login(editUser.getText(), editPass.getText()); break; } }}// Presenter接口public interface ILoginPresenter { void clear(); void login(String username, String password); void showProgressBar(); void hideProgressBar();}// Presenter实现类public class LoginPresenterCompl implements ILoginPresenter { private ILoginView view; private UserModel model; private Handler handler; public LoginPresenterCompl(ILoginView view) { this.view = view; model = new UserModel(); handler = new Handler(Looper.getMainLooper()); } @Override public void clear() { view.clearText(); } @Override public void login(String username, String password) { if (model.authenticate(username, password)) { handler.postDelayed(new Runnable() { @Override public void run() { view.loginSuccess(); } }, 2000); } else { handler.postDelayed(new Runnable() { @Override public void run() { view.loginFailed(); } }, 2000); } }}
MVP模式通过将复杂的业务逻辑和UI逻辑分离到Presenter层,使得Activity代码更加简洁,提升了代码的可维护性和可扩展性,同时为单元测试和内存管理提供了更好的支持。
转载地址:http://zfiyk.baihongyu.com/