欢迎使用CSDN-markdown编辑器
2016-05-09 20:27
316 查看
类与对象的区别
对象是对客观世界的抽象,类是对对象的抽象,类是一种抽象的数据。
类是对象的抽象,对象是类的实例。
例如:学生是类的类型,而学生1是学生类的实例。水果是类的类型,梨是水果类的实例,水果是对对象梨的抽象。
MVP与MVC
1.MVC (Model-View-Controller)
mvc模式的意思是软件可以设计为三个部分,分别为 :
View:用户界面
Controller:业务逻辑
Model:提供数据
各部分之间的关系:
view将指令传达给Controller
Controller完成业务逻辑后,要求model改状态
model 将新的数据发送到view,用户得到反馈
所有的通信都是单向的。
-2.MVP(Model-View_Presenter)
Model: 负责与数据的交互,检索,持久化的操作
View:负责UI的绘制和与用户的交互
Prensenter:作为Model与View的中间协调者,负责两者之间的业务逻辑处理
与MVC的最大区别是 MVC中的VIew是与Model直接通讯的。通常Model是直接把数据更新到View上面,Model和View的耦合度很高。还有Activity在MVC里面即充当了View来与用户交互,也充当了Controller来与Model交互,两者时常会搞混。而MVP中Activity就直接充当一个View,Presenter就是View与Model之间的桥梁。
MVP的优缺点:
优点:耦合度低,层级职责更加明显,代码更加清晰,易于单元测试。
缺点:造成类数量爆炸,代码复杂度高,接口可能产生冗余。
以下demo:
model层:
LoginBean:
LoginBiz:
LoginImp:
LoginListener:
Presenter层:
LoginPresenter:
LoginPresenterImp:
View层:
ViewInterface:
MianActivity:
总结
面试前要充分的复习java知识点,面试时候要沉着冷静,思考后再回答面试官提出的问题。面试的时候会问一些关于设计模式的问题,需要多多的深入的了解,业余时间多写代码,增长自己的知识。
对象是对客观世界的抽象,类是对对象的抽象,类是一种抽象的数据。
类是对象的抽象,对象是类的实例。
例如:学生是类的类型,而学生1是学生类的实例。水果是类的类型,梨是水果类的实例,水果是对对象梨的抽象。
MVP与MVC
1.MVC (Model-View-Controller)
mvc模式的意思是软件可以设计为三个部分,分别为 :
View:用户界面
Controller:业务逻辑
Model:提供数据
各部分之间的关系:
view将指令传达给Controller
Controller完成业务逻辑后,要求model改状态
model 将新的数据发送到view,用户得到反馈
所有的通信都是单向的。
-2.MVP(Model-View_Presenter)
Model: 负责与数据的交互,检索,持久化的操作
View:负责UI的绘制和与用户的交互
Prensenter:作为Model与View的中间协调者,负责两者之间的业务逻辑处理
与MVC的最大区别是 MVC中的VIew是与Model直接通讯的。通常Model是直接把数据更新到View上面,Model和View的耦合度很高。还有Activity在MVC里面即充当了View来与用户交互,也充当了Controller来与Model交互,两者时常会搞混。而MVP中Activity就直接充当一个View,Presenter就是View与Model之间的桥梁。
MVP的优缺点:
优点:耦合度低,层级职责更加明显,代码更加清晰,易于单元测试。
缺点:造成类数量爆炸,代码复杂度高,接口可能产生冗余。
以下demo:
model层:
LoginBean:
public class LoginBean { private String name; private String password; public void setName(String name) { this.name = name; } public String getName() { return name; } public void setPassword(String password) { this.password = password; } public String getPassword() { return password; } }
LoginBiz:
public interface LoginBiz { boolean login(LoginBean bean); }
LoginImp:
public class LoginImp implements LoginBiz { private LoginListener listener; public LoginImp(LoginListener listener) { this.listener = listener; } @Override public boolean login(LoginBean bean) { String name, password; name = bean.getName(); password = bean.getPassword(); if ("lcp".equals(name) && "123".equals(password)) { listener.onLoginStatus(LoginListener.SUCESS); } else { listener.onLoginStatus(LoginListener.FAIL); } return true; } }
LoginListener:
public interface LoginListener { final int SUCESS = 1; final int FAIL = 0; final int UNKONW = 2; void onLoginStatus(int status); }
Presenter层:
LoginPresenter:
public interface LoginPresenter { void login(); void clear(); }
LoginPresenterImp:
public class LoginPrensentImp implements LoginPresenter, LoginListener { ViewInterface viewInterface; LoginImp imp; public LoginPrensentImp(ViewInterface viewInterface) { this.viewInterface = viewInterface; imp = new LoginImp(this); } @Override public void login() { LoginBean bean = new LoginBean(); bean.setName(viewInterface.getUsername()); bean.setPassword(viewInterface.getPassword()); imp.login(bean); } @Override public void clear() { viewInterface.clearPassword(); viewInterface.clearUsername(); } @Override public void onLoginStatus(int status) { switch (status) { case LoginListener.FAIL: viewInterface.showMsg("登陆失败"); break; case LoginListener.SUCESS: viewInterface.showMsg("成功登陆"); break; case LoginListener.UNKONW: viewInterface.showMsg("未知错误"); break; } } }
View层:
ViewInterface:
public interface ViewInterface { public String getUsername(); public String getPassword(); public void clearUsername(); public void clearPassword(); public void showMsg(String msg); }
MianActivity:
public class MainActivity extends AppCompatActivity implements ViewInterface { private Button btnLogin, btnClear; private EditText etName, etPassWord; private LoginPresenter presenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); presenter = new LoginPrensentImp(this); btnClear = (Button) findViewById(R.id.btnClear); btnLogin = (Button) findViewById(R.id.btnLogin); etName = (EditText) findViewById(R.id.etName); etPassWord = (EditText) findViewById(R.id.etPassWord); btnLogin.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { presenter.login(); } }); btnClear.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { presenter.clear(); } }); } @Override public String getUsername() { return etName.getText().toString().trim(); } @Override public String getPassword() { return etPassWord.getText().toString().trim(); } @Override public void clearUsername() { etName.setText(""); } @Override public void clearPassword() { etPassWord.setText(""); } @Override public void showMsg(String msg) { Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show(); } }
总结
面试前要充分的复习java知识点,面试时候要沉着冷静,思考后再回答面试官提出的问题。面试的时候会问一些关于设计模式的问题,需要多多的深入的了解,业余时间多写代码,增长自己的知识。
相关文章推荐
- 我理解的RxJava
- iOS中判断基础字符(大小写、数字等的判断)
- tomcat7的安装与配置、及Servlet部署
- 1004 放盘子(数学公式)
- cPanel如何修改为中文显示
- e.preventDefault
- HTML布局
- Error:Execution failed for task ':app:preDexDebug'. > com.android.ide.common.process.ProcessExceptio
- hdu1104Remainder(BFS)
- 网页背景图固定不动, 不跟随滚动条滚动
- uva - Score
- 【Redis】:Jedis 使用
- 重新学javaweb---文件上传1
- eclipse远程debug
- 优化方法
- 二十一、享元设计模式
- 设计模式之:模版设计模式
- 第7周 C语言程序设计(新2版) 例题1.5.4 统计行数、单词数及字符数
- exit(0),exit(1),exit(-1)的区别
- 第十一周【项目2 - 存储班长信息的学生类1】