1.MVC图论
对MVC各个模块最简单的理解就是
- M:业务逻辑,数据读写,刷新V层视图
- V:视图,显示,获取用户操作,传递用户操作到C层
- C:控制层,根据V传过来的事件控制业务逻辑的执行
2.MVC各层之间的联系
V层要通知C层用户事件,所以V层需要一个C层的引用,同理C层需要一个M层的引用、M层需要一个V层的引用。
3.实现一个Java控制台版的MVC程序
我们用一段Java代码去写一个MVC的例子来帮助理解
- 我们需要三个类,分别是View、Controller、Moudle
class View {//负责接收用户事件和更新界面显示
}
class Controller {//负责通知M层对数据处理
}
class Moudle{//负责数据处理,并显示在V层
}
根据上边的理解,我们在View中需要一个C层对象,在Controller中需要一个M层对象,在Moudle中需要一个V层对象
- 接下来我们在每个类里去写一个set方法获取各层需要的引用对象
class View {//负责接收用户事件和更新界面显示
//需要一个C层对象的引用
Controller controller;
public void setController(Controller controller) {
this.controller = controller;
}
}
class Controller {//负责通知M层对数据处理
//需要一个M层对象的引用
Moudle moudle;
public void setMoudle(Moudle moudle) {
this.moudle = moudle;
}
}
class Moudle{//负责数据处理,并显示在V层
//需要一个V层对象的引用
View view;
public void setView(View view) {
this.view = view;
}
}
- 在View中添加变量a和b,模拟用户从UI输入的数据并对其运算结果进行显示,并添加a,b的get 方法以便M层获取数据
private int a;
private int b;
public void setController(Controller controller) {
this.controller = controller;
}
public int getA() {
return a;
}
public int getB() {
return b;
}
public void show(Character c,int result) {//更新界面显示
System.out.println("a"+c+"b="+result);
};
- 在View添加一个onListener方法用来模拟用户交互行为
public void onListener() {//接收用户事件(用户输入数字,模拟点击了等于按钮)
Scanner scanner=new Scanner(System.in);
int i=scanner.nextInt();
switch (i) {
case 1:
break ;
case 2:
break ;
default:
System.out.println("Error");;
}
}
C层根据用户行为添加相应操作,用户点击了1,就模拟加法运算,2 模拟减法运算
public void data_add() {
moudle.add();
};
public void data_subtract() {
moudle.subtract();
};
为了能使M层获取到V层的数据我们需要在V层添加get方法获取数据,上边已经添加过了
public void setController(Controller controller) {
this.controller = controller;
}
public int getA() {
return a;
}
public int getB() {
return b;
}
Moudle要对V层用户输入的数据进行处理并通知V层更新UI
public void add() {
int result=view.getA()+view.getB();
view.show('+', result);
}
public void subtract() {
int result=view.getA()-view.getB();
view.show('-', result);
}
Main方法里:
运行结果:
总结: