新闻详情

新闻详情

首页 / 资讯中心 / 详情

MVC架构中的Controller

发布时间:2026/9/11 2:59:47来源:尧图网络
MVC架构中的Controller
MVC架构中Controller作为中介者协调Model和View的交互避免Model和View直接耦合。场景用户列表页面View显示用户列表Model提供用户数据。用户点击删除按钮时View通知ControllerController调用Model删除用户Model返回结果后Controller更新View。角色对照MediatorUserControllerColleagueUserModel数据层、UserView视图层// Model用户数据同事类A class UserModel { private ListString users new ArrayList(Arrays.asList(Alice, Bob, Charlie)); public ListString getUsers() { return new ArrayList(users); } public boolean deleteUser(String username) { return users.remove(username); } } // View用户视图同事类B class UserView { public void showUsers(ListString users) { System.out.println(用户列表 users); } public void showMessage(String message) { System.out.println(提示 message); } // 用户点击删除按钮通知Controller public void onDeleteClicked(String username, UserController controller) { controller.handleDelete(username); } } // Controller中介者 class UserController { private UserModel model; private UserView view; public UserController(UserModel model, UserView view) { this.model model; this.view view; } // 协调Model和View的交互 public void handleDelete(String username) { boolean success model.deleteUser(username); // 调用Model if (success) { view.showMessage(删除成功 username); // 更新View view.showUsers(model.getUsers()); // 刷新列表 } else { view.showMessage(删除失败 username 不存在); } } public void showUserList() { view.showUsers(model.getUsers()); } }关键点Model只负责数据操作不关心View如何显示View只负责显示和接收用户操作不关心Model如何处理数据Controller作为中介者协调两者Model和View通过Controller通信。多人聊天室聊天室是中介者模式的经典应用聊天室服务器作为中介者用户作为同事类用户之间不直接通信都通过聊天室转发消息。场景多人聊天室用户A发送消息时聊天室服务器转发给所有其他用户。用户加入或退出时聊天室通知所有用户。角色对照MediatorChatRoom接口ConcreteMediatorConcreteChatRoom维护用户列表转发消息ColleagueUser抽象类ConcreteColleagueChatUser具体用户实现// 抽象中介者 interface ChatRoom { public void register(User user); public void send(String message, User sender); } // 抽象同事类用户基类 abstract class User { protected ChatRoom chatRoom; protected String name; public User(ChatRoom chatRoom, String name) { this.chatRoom chatRoom; this.name name; } public String getName() { return name; } public abstract void receive(String message, String senderName); public abstract void send(String message); } // 具体中介者聊天室 class ConcreteChatRoom implements ChatRoom { private ListUser users new ArrayList(); public void register(User user) { users.add(user); System.out.println(user.getName() 加入聊天室); // 通知其他用户 for (User u : users) { if (u ! user) { u.receive(user.getName() 加入了聊天室, 系统); } } } public void send(String message, User sender) { // 转发给除发送者外的所有用户 for (User u : users) { if (u ! sender) { u.receive(message, sender.getName()); } } } } // 具体同事类聊天用户 class ChatUser extends User { public ChatUser(ChatRoom chatRoom, String name) { super(chatRoom, name); } public void receive(String message, String senderName) { System.out.println([ name 收到] senderName message); } public void send(String message) { System.out.println([ name 发送] message); chatRoom.send(message, this); // 通过中介者转发 } } // 使用示例 public class ChatRoomDemo { public static void main(String[] args) { ChatRoom room new ConcreteChatRoom(); User alice new ChatUser(room, Alice); User bob new ChatUser(room, Bob); User charlie new ChatUser(room, Charlie); room.register(alice); // Alice加入无其他用户 room.register(bob); // Bob加入通知Alice room.register(charlie);// Charlie加入通知Alice和Bob alice.send(大家好); // Alice发消息Bob和Charlie收到 bob.send(Hi Alice!); // Bob发消息Alice和Charlie收到 }
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

three.js 中的 Flower 模型:源于 Kenney Nature Pack 的花朵 GLTF 资源及其实例化散布实践 2026/9/11 2:57:52

three.js 中的 Flower 模型:源于 Kenney Nature Pack 的花朵 GLTF 资源及其实例化散布实践

three.js 中的 Flower 模型:源于 Kenney Nature Pack 的花朵 GLTF 资源及其实例化散布实践 【免费下载链接】three.js JavaScript 3D Library. 项目地址: https://gitcode.com/GitHub_Trending/th/three.js Flower 是 three.js 官方仓库中一份经过二次加工的…

阅读更多 →
收银系统选型避坑指南:从SaaS到离线收银的硬核评测 2026/9/11 2:57:52

收银系统选型避坑指南:从SaaS到离线收银的硬核评测

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
PISO与SIMPLEC算法深度解析:原理、选型与OpenFOAM调试 2026/9/11 2:57:52

PISO与SIMPLEC算法深度解析:原理、选型与OpenFOAM调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Intel工业网卡技术解析:确定性通信的硬件根基 2026/9/11 2:57:52

Intel工业网卡技术解析:确定性通信的硬件根基

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
USGS API 全指南:基于 database-lookup 技能构建地震与水文数据的可复现查询 2026/9/11 2:57:52

USGS API 全指南:基于 database-lookup 技能构建地震与水文数据的可复现查询

USGS API 全指南:基于 database-lookup 技能构建地震与水文数据的可复现查询 【免费下载链接】scientific-agent-skills Turn any AI agent into an AI Scientist. The #1 Agent Skills library for science, used by 190,000 scientists worldwide. 165 ready-to-u…

阅读更多 →
MySQL数据导出全攻略:从mysqldump到CSV的实战避坑指南 2026/9/11 2:54:51

MySQL数据导出全攻略:从mysqldump到CSV的实战避坑指南

1. 先把“导出”这件事想清楚:你要的是数据,还是数据库?很多人一提“MySQL 导出数据”,第一反应就是打开命令行敲一句mysqldump,或者右键点一下“导出”,然后拿着生成的 SQL 文件到处跑。这个动作本身没错&…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞