解析MVC 和 MCP
来源:互联网 发布:毛笔字软件哪个好 编辑:程序博客网 时间:2024/05/20 22:30
GUI Graphical User Interface
MVC Model-View-Controller
ListView身上体现的 MVC 思想
Model数据模型 数据集合 Arraylist
View 显示 Listview
Controller 控制 adapter
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 向外抛出接口, Connectivity 的实现接口, 这样 Connectivity对象就可以用Iconnectivity来面对外界了, 类似于C语言的头文件。
使用方法 Iconnectivity mConn = newConnectivity(); java 多态, 父类引用子类实现对象。
题外话: 面向对象的核心重要思想-多态
多态的意思:
实物存在的多种形态
多态的前题:
1.要存在继承或实现关系 -- Connectivity 实现了接口Iconnectivity
2.要有方法的重写 -- Connectivity 重写方法 boolean isOnline();
3.要有父类应用指向子类对象 -- Iconnectivity mConn = newConnectivity();
言归正传
同样 view 向外抛出接口
view 中保存着一个 Presenter 的对象 mSp
这样view就可以使用这个对象来间接的操控自己:
SplashActivity 实现接口 ISplash, 表示向外抛出隐藏,显示进度条等功能,
SplashPresenter 就可以使用这个接口来操控View
SplashPresenter:
中同时保存着 Moele 和 View 的接口, 这样, Presenter就可以根据 mode的数据来操作view
实现主持人的业务逻辑角色
MVC Model-View-Controller
ListView身上体现的 MVC 思想
Model数据模型 数据集合 Arraylist
View 显示 Listview
Controller 控制 adapter
此外 ListView 的源码实现中还是用了观察者设计模式 其中的玄机就在这个方法中
mAdapter.notifyDataSetChanged();
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) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //...初始化 textView = ((TextView) findViewById(R.id.textView)); 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
实现主持人的业务逻辑角色
0 0
- 解析MVC 和 MCP
- 联通图形和最小花费路径(MCP)
- MCP,eMMC,eMCP区别和联系
- MCP考试
- 解析Android的MVC和MVP模式
- MCP 认证考试注册
- Pass4Sure Microsoft MCP
- 最大团问题 MCP
- mtk android 配置mcp
- android中mvc以及intent和activity应用解析
- 解析ASP.NET WebForm和Mvc开发的区别
- 解析ASP.NET WebForm和Mvc开发的区别
- 解析ASP.NET WebForm和Mvc开发的区别
- 解析ASP.NET WebForm和Mvc开发的区别
- Spring MVC JSON数据交互-解析和返回JSON
- Spring Web MVC框架(四) 视图和视图解析
- Spring MVC--5.视图和视图解析器
- Spring mvc数据模型,视图 和 视图解析器
- 华东交通大学2016届新生选拔赛:1004 扑克牌
- Java Web 学习笔记之五:实现Filter解决中文乱码问题
- 信号发送函数---kill(),raise(),alarm()
- CSS.DIV网页样式与布局总结
- 疏理js执行细节
- 解析MVC 和 MCP
- 八皇后 摆放 问题
- 冒个泡,卖个萌
- 笔记1:猜数问题
- 笔记2:傻瓜式盗QQ程序
- 最全面的Android Studio使用教程【申明:来源于网络】
- 笔记3:关于VBS整人代码的浅谈
- 第16周项目4-英文单词的基数排序
- 笔记4:数据库的复习