您的位置:首页 > 其它

欢迎使用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:

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知识点,面试时候要沉着冷静,思考后再回答面试官提出的问题。面试的时候会问一些关于设计模式的问题,需要多多的深入的了解,业余时间多写代码,增长自己的知识。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: