MVC
View(视图):界面,展示界面,将用户事件通知给控制器
Controller(控制器:负责调度事件
Model(模型):数据和与数据的相关的业务逻辑。具体的操作数据,通知给view进行数据显示
代码实现:
public class MvpDemo {
class Model{//模型
int data;
View mView;
void dataAll(int data1){
data = data1;
mView.showData(data);//数据和与数据的相关的业务逻辑。具体的操作数据,通知给view进行数据显示
}
}
class View{
Controller mController;
//View 进行数据的展示
void showData(int data){
...
}
void clicked(){
//通知控制器进行事件操作
mController.viewClicked(this);
}
}
class Controller{
Model model;
void viewClicked(View view){
switch (view.id){
case ..:
//控制器进行事件调度,具体操作由Model实现
model.dataAll(1);
}
}
}
}
演示代码的界面均为上图。
1 常见的MVC模式实现代码
//Model
class DataUtils {
public static String[] load() {
String[] str = {"这是账号", "这是密码"};
return str;
}
}
传递机制不符合通常的View->Controler->Model->View但也属于MVC.
2 下面的实现方式符合View->Controler->Model->View的交互方式
public class MyLinearLayout extends LinearLayout implements MainActivity.iView{
private EditText mUser;
private EditText mPassword;
public MyLinearLayout(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
mUser = findViewById(R.id.user);
mPassword =findViewById(R.id.password);
}
@Override
public void showData(String user,String passWord){
mUser.setText(user);
mPassword.setText(passWord);
}
}
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyLinearLayout myView = findViewById(R.id.myview);
String[] load = DataUtils.load();
myView.showData(load[0],load[1]);
}
interface iView{
void showData(String user,String passWord);
}
}
MVC模式每层的关联性太强,没有做到独立的重用。
MVP
MVVM
双向绑定,暂时不表