MVP设计模式应该这样掌握
2017-11-06 22:30
423 查看
前言:在学习MVP设计模式时,我们所读的大部分文章都是首先介绍什么是MVP以及MVP与MVC设计模式的不同,这些文章都讲的很好,但是这些理论的东西不但容易忘记,可能对于那些都没有接触过MVC设计模式的人来说还有点难以理解。这篇文章理论知识很少,重点是让你能将MVP设计模式用到自己的开发中。
注: 阅读本文一定要自己动手写代码!自己敲一遍代码感受一下MVP设计模式。
接着写一个名为StudentRepository的类实现StudentDataSource接口,如下
行,这样就写好了数据层即Mode,简单吧!下面就分别来实现视图层和主持者。
下面将视图层和主持者层都放进一个AddStudentContract契约类里,如下
这样做的好处是可以统一管理View层和Presenter层,这样就将接口设计好了,先面开始写实现类。先看Presenter层的实现类AddStudentPresenter,如下
再看View层的实现,这里View层的实现就是Activity,代码如下
好了,上面即使MVP的设计模式的使用,到了这里先停下来,先自己把上面的代码写一遍,体会一下,然后再继续阅读。
通过这幅图和我们自己写的代码,我们会发现Presenter层是Mode层和View层通讯的桥梁,同时也将View层和Mode层隔离开来,使它们不能直接的进行通讯,同过这种方法达到了解耦合的目的。
通过编写代码,会发现AddStudentPresenter同时持有Mode层和View层的引用,这样就能在需要数据改变或视图显示时直接改变数据或者视图的显示状态。同样View层持有Presenter层的引用,这样就能将一些处理事件的逻辑放在Presenter层中进行处理,处理完成后通知View层改变显示状态。
Mode层呢,Mode层不止是实体类还有数据的增删改查,Mode层只做与数据相关的操作。
虽然MVP设计模式使代码增加不少,包结构也变得复杂,但是他使数据和视图高度解偶,让代码变的更加清晰,更易于维护,同时也方便对各个模块进行单独的测试。
转载请注明出处:www.wizardev.com
注: 阅读本文一定要自己动手写代码!自己敲一遍代码感受一下MVP设计模式。
MVP的简单介绍
还是要讲点理论!MVP分别是Mode、View和Presenter,翻译过来就是数据、视图和主持者,行!就先知道这么多,下面动手写代码。MVP设计模式初体验
这里用一个List来代表数据层,Activity就是视图层,AddPresenter来作为主持者,下面编写代码。设计数据层
首先定义一个名为StudentDataSource的接口,为了能更容易的理解MVP设计模式,这里就只有一个添加数据的方法,如下public interface StudentDataSource { void addStudent(Student student); }
接着写一个名为StudentRepository的类实现StudentDataSource接口,如下
public class StudentRepository implements StudentDataSource{ private List<Student> mStudents = new ArrayList<>(); @Override public void addStudent(Student student) { mStudents.add(student); } }
行,这样就写好了数据层即Mode,简单吧!下面就分别来实现视图层和主持者。
设计视图层和主持者
同样,先写一个BasePresenter接口和BaseView接口分别作为主持者和视图层的基类,如下public interface BasePresenter { }
public interface BaseView<T> { void setPresenter(T presenter); }
下面将视图层和主持者层都放进一个AddStudentContract契约类里,如下
public interface AddStudentContract { interface Presenter extends BasePresenter { void saveStudent(); } interface View extends BaseView<Presenter> { void showSaveSuccess(); } }
这样做的好处是可以统一管理View层和Presenter层,这样就将接口设计好了,先面开始写实现类。先看Presenter层的实现类AddStudentPresenter,如下
public class AddStudentPresenter implements AddStudentContract.Presenter { private AddStudentContract.View mAddStudentView; private StudentDataSource addStudentRepository; public AddStudentPresenter(AddStudentContract.View view) { mAddStudentView = view; addStudentRepository = new StudentRepository(); } @Override public void saveStudent() { Student student = new Student(); student.setAge(20); student.setName("wizardev"); addStudentRepository.addStudent(student); mAddStudentView.showSaveSuccess(); } }
再看View层的实现,这里View层的实现就是Activity,代码如下
public class AddStudentActivity extends AppCompatActivity implements AddStudentContract.View { private AddStudentContract.Presenter mPresenter; private Button mAddStudent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mPresenter = new AddStudentPresenter(this); setPresenter(mPresenter); mAddStudent = findViewById(R.id.addStudent); mAddStudent.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mPresenter.saveStudent(); } }); } @Override public void setPresenter(AddStudentContract.Presenter presenter) { if (presenter != null) { mPresenter = presenter; } } @Override public void showSaveSuccess() { Toast.makeText(this,"添加成功!",Toast.LENGTH_SHORT).show(); } }
好了,上面即使MVP的设计模式的使用,到了这里先停下来,先自己把上面的代码写一遍,体会一下,然后再继续阅读。
MVP设计模式的总结
通过自己动手编写代码,相信你已经对MVP设计模式有了一定的了解,下面看下MVP设计模式的结构图通过这幅图和我们自己写的代码,我们会发现Presenter层是Mode层和View层通讯的桥梁,同时也将View层和Mode层隔离开来,使它们不能直接的进行通讯,同过这种方法达到了解耦合的目的。
通过编写代码,会发现AddStudentPresenter同时持有Mode层和View层的引用,这样就能在需要数据改变或视图显示时直接改变数据或者视图的显示状态。同样View层持有Presenter层的引用,这样就能将一些处理事件的逻辑放在Presenter层中进行处理,处理完成后通知View层改变显示状态。
Mode层呢,Mode层不止是实体类还有数据的增删改查,Mode层只做与数据相关的操作。
虽然MVP设计模式使代码增加不少,包结构也变得复杂,但是他使数据和视图高度解偶,让代码变的更加清晰,更易于维护,同时也方便对各个模块进行单独的测试。
结束语
文章采用先动手写代码后理论的模式,是为了能让大家更好的理解MVP设计模式,可以直接在项目中进行使用,缩短掌握MVP设计模式所需的时间。文章中的代码在这里转载请注明出处:www.wizardev.com
相关文章推荐
- 这样设计是MVP模式吗
- 架构师应该掌握哪些设计模式
- [置顶] MVP 你应该了解的程序设计模式(一)
- 架构师应该掌握哪些设计模式
- 简单介绍GUI设计模式(MVP)
- 挖掘更合适的MVP模式的架构设计
- Android,谈谈MVP设计模式
- 三分钟理解“工厂模式”——设计模式轻松掌握
- Android设计模式理解(mvc mvp mvvm)
- 快速掌握23种设计模式(状态,策略,观察者)
- Android之MVP设计模式
- MVP设计模式的写法
- Android学习探索之运用MVP设计模式实现项目解耦
- 设计模式----适配器模式UML和实现代码(5个必须掌握的设计模式)
- 掌握设计模式
- 探索MVP(Model-View-Presenter)设计模式在SharePoint平台下的实现
- MVC/MVP/MVVM 三种设计模式 汇总
- 学习设计模式之前你必须掌握的-看懂UML类图
- 仿googleMVP设计模式示例demo,结合rxjava,retrofit2.0
- Android设计模式之浅谈MVP