1.概要
MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。
- Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器。
- View(视图) - 视图代表模型包含的数据的可视化。
- Controller(控制器) - 控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。
个人观点:
关于mvc,m代码数据模型,v代码用户能够看到,数据的价值是什么?是能被用户看到。所以view和model本质上是数据的表现 形式。一个机器中数据,一个是用户能理解的数据。把数据用ui装起来就成了用户能够理解的数据。所以controler就是其他的东西。
控制命令是用户发出的,用户发给ui,本质上是用户通过view发命令,controler响应命令,加工数据,创建一个model,另一个view把数据表示出来。这里面提到两个view,view1=>controler=>model=>view1.
2.代码
package test2;
import java.util.ArrayList;
import java.util.List;
import test2.Model.baseMode.DetailedModel;
import test2.Model.baseMode.SimpleModel;
import test2.Model.baseMode.ViewUpdte;
class Database{
static List<ViewUpdte> detailedModels = new ArrayList<ViewUpdte>();
static int index = 0;
int insert(DetailedModel dm) {
ViewUpdte vp = new ViewUpdte();
vp.id = index++;
vp.name = dm.name;
vp.detailed = dm.detailed;
detailedModels.add(vp);
return vp.id;
}
DetailedModel getView(int id) {
for(ViewUpdte mode:detailedModels) {
if(mode.id == id) {
return mode;
}
}
return null;
}
void delete(int id) {
for(ViewUpdte mode:detailedModels) {
if(mode.id == id) {
detailedModels.remove(mode);
break;
}
}
}
void update(ViewUpdte vup) {
for(ViewUpdte mode:detailedModels) {
if(mode.id == vup.id) {
mode.detailed = vup.detailed;
mode.name = vup.name;
}
}
}
List<SimpleModel> searchList(String key) {
List<SimpleModel> list = new ArrayList<SimpleModel>();
for(ViewUpdte mode:detailedModels) {
if(mode.name.contains(key)||mode.detailed.contains(key)) {
SimpleModel sm = new SimpleModel();
sm.id = mode.id;
sm.name = mode.name;
list.add(sm);
}
}
return list;
}
List<SimpleModel> getAll(){
List<SimpleModel> list = new ArrayList<SimpleModel>();
for(ViewUpdte mode:detailedModels) {
SimpleModel sm = new SimpleModel();
sm.id = mode.id;
sm.name = mode.name;
list.add(sm);
}
return list;
}
}
class Model{
static class baseMode{
static class BaseSimpleModel{
String name;
}
static class DetailedModel extends BaseSimpleModel{
String name;
String detailed;
}
static class ViewUpdte extends DetailedModel{
int id;
}
static class SimpleModel extends BaseSimpleModel{
int id;
}
}
}
public class Mvc {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("mvc模拟实践");
Mvc mvc = new Mvc();
mvc.main();
}
void main() {
Users user = new Users();
user.main();
}
class Users{
void main() {
Models modes = new Models();
View view = new View();
Controler conteoler = new Controler();
view.controler = conteoler;
conteoler.models = modes;
modes.view = view;
DetailedModel dm = new DetailedModel();
dm.name = "name1";
dm.detailed = "detailed1";
conteoler.add(dm);
DetailedModel dm2 = new DetailedModel();
dm2.name = "name2";
dm2.detailed = "detailed2";
conteoler.add(dm2);
DetailedModel dm3 = new DetailedModel();
dm3.name = "n-ame3";
dm3.detailed = "detailed3";
conteoler.add(dm3);
conteoler.searchList("name");
ViewUpdte vu = new ViewUpdte();
vu.id = 1;
vu.name = "name2-up";
dm2.detailed = "detailed2-up";
conteoler.update(vu);
conteoler.delete(1);
}
}
class Models{
List<SimpleModel> simpleModels = null;
DetailedModel detailedModel;
View view;
void setSimpleModels(List<SimpleModel> simpleModels) {
this.simpleModels = simpleModels;
view.changeSimpleModels(simpleModels);
}
void setDetailedModel(DetailedModel detailedModel) {
this.detailedModel = detailedModel;
view.changeDetailedModel(detailedModel);
}
}
class View{
Controler controler = new Controler();
private void viewDetailed(DetailedModel detailedModel){
System.out.println("\nviewDetailed:");
System.out.println(detailedModel.name);
System.out.println(detailedModel.detailed);
}
private void viewList(List<SimpleModel> simpleModels){
System.out.println("\nviewList:");
for(SimpleModel mode:simpleModels) {
System.out.println("name:"+mode.name+" id"+mode.id);
}
}
void changeSimpleModels(List<SimpleModel> simpleModels) {
viewList(simpleModels);
}
void changeDetailedModel(DetailedModel detailedModel) {
viewDetailed(detailedModel);
}
}
class Controler{
Database database = new Database();
Models models;
void add(DetailedModel mode) {
int id = database.insert(mode);
getView(id);
}
void update(ViewUpdte upmode) {
database.update(upmode);
getView(upmode.id);
}
void searchList(String key) {
models.setSimpleModels(database.searchList(key));
}
void delete(int id) {
database.delete(id);
models.setSimpleModels(database.getAll());
}
void getView(int id) {
models.setDetailedModel(database.getView(id));
}
}
}