解析MVC和MCP
GUI  Graphical User Interface
MVC  Model-View-Controller
ListView⾝上体现的 MVC 思想
Model数据模型  数据集合 Arraylist
View  显⽰          Listview
Controller 控制    adapter
此外 ListView  的源码实现中还是⽤了观察者设计模式  其中的⽞机就在这个⽅法中
MVP  Modle-View-Presenter
主要是为了让应⽤程序分层,提⾼测试效率。
主要⽬标是让显⽰逻辑和业务逻辑分离
将各视图中的业务逻辑从中分离出来,放到相应的类中,
MVP中Presenter充当视图和业务逻辑的缓冲层
MVP好处
1.模型和视图完全分离,我们可以修改视图⽽不影响模型
2.我们可以将⼀个Presenter⽤于多个视图,⽽不需要改变
Presenter的业务逻辑。 因为视图要⽐模型变化的频繁
3.把逻辑放在Presenter中,那么就可以脱离⽤户接⼝,
只对业务逻辑进⾏单元测试。
1.单元测试
2.让改动频繁的GUI和Model解耦和
3.Model代码复⽤⾼
所谓的mvp:
model-处理业务逻辑业务逻辑包括 主要是数据读写,或者与后台通信(其实也是读写数据)
view-处理ui控件,
presenter-主导器,操作model和view
站在 C 语⾔的⾓度看, 这⾥对 java 的接⼝的使⽤ 就好⽐C语⾔的 头⽂件⼀样,#include<;头⽂件>  那么这个源⽂件就可以使⽤头⽂件中的函数,java类实现了某⼀个接⼝, 那么这个类就可以转换成接⼝在别的地⽅使⽤。
MVP 代码结构实例:
MODEL:
public interface Iconnectivity {
boolean isOnline();
}
public class Connectivity implements Iconnectivity {
@Override
public boolean isOnline() {
return readFromNetWork();
}
private boolean readFromNetWork(){
//... 经过⼀些业务逻辑后
return false; // 返回相应结果
}
}
model 向外抛出接⼝, Connectivity 的实现接⼝, 这样 Connectivity对象就可以⽤Iconnectivity来⾯对外界了, 类似于C语⾔的头⽂件。
使⽤⽅法  Iconnectivity mConn = newConnectivity();  java 多态, ⽗类引⽤⼦类实现对象。
题外话:  ⾯向对象的核⼼重要思想-多态
多态的意思:
  实物存在的多种形态
多态的前题:
  1.要存在继承或实现关系  --  Connectivity 实现了接⼝Iconnectivity
  2.要有⽅法的重写                --  Connectivity 重写⽅法 boolean isOnline();
  3.要有⽗类应⽤指向⼦类对象 --  Iconnectivity mConn = newConnectivity();
⾔归正传
VIEW:
public class SplashActivity extends AppCompatActivity implements ISplash {
private SplashPresenter mSp;
private TextView textView;
protected void onCreate(Bundle savedInstanceState) {
mvc的controller
setContentView(R.layout.activity_main);
//...初始化
textView = ((TextView) findViewById(View));
mSp = new SplashPresenter(this);
mSp.checkConnectivity();
}
@Override
public void hiddenProgressBar() {
textView.setVisibility(View.GONE);
}
@Override
public void showProgressBar() {
textView.setVisibility(View.VISIBLE);
}
@Override
public void setError() {
}
@Override
public void jumpToMainActivity() {
}
}
public interface ISplash {
void hiddenProgressBar();
void showProgressBar();
void setError();
void jumpToMainActivity();
}
同样 view 向外抛出接⼝
view 中保存着⼀个 Presenter 的对象 mSp
这样view就可以使⽤这个对象来间接的操控⾃⼰:
SplashActivity 实现接⼝ ISplash, 表⽰向外抛出隐藏,显⽰进度条等功能, SplashPresenter 就可以使⽤这个接⼝来操控View
PRESENTER:
public class SplashPresenter {
Iconnectivity mConn;
ISplash mSplash;
public SplashPresenter(ISplash s) {
this.mSplash = s;
mConn = new Connectivity();
}
public void checkConnectivity() {
if (mConn.isOnline()) {
mSplash.hiddenProgressBar();
mSplash.jumpToMainActivity();
} else {
mSplash.showProgressBar();
mSplash.setError();
}
}
}
SplashPresenter:
中同时保存着 Moele 和 View 的接⼝, 这样, Presenter就可以根据 mode的数据来操作view 实现主持⼈的业务逻辑⾓⾊

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。