尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

MVC架构中的Controller

MVC架构中的Controller
📅 发布时间:2026/7/7 7:07:39

MVC架构中,Controller作为中介者协调Model和View的交互,避免Model和View直接耦合。

场景:用户列表页面,View显示用户列表,Model提供用户数据。用户点击删除按钮时,View通知Controller,Controller调用Model删除用户,Model返回结果后Controller更新View。

角色对照:

  • Mediator:UserController
  • Colleague:UserModel(数据层)、UserView(视图层)
// Model:用户数据(同事类A) class UserModel { private List<String> users = new ArrayList<>(Arrays.asList("Alice", "Bob", "Charlie")); public List<String> getUsers() { return new ArrayList<>(users); } public boolean deleteUser(String username) { return users.remove(username); } } // View:用户视图(同事类B) class UserView { public void showUsers(List<String> 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发送消息时,聊天室服务器转发给所有其他用户。用户加入或退出时,聊天室通知所有用户。

角色对照:

  • Mediator:ChatRoom接口
  • ConcreteMediator:ConcreteChatRoom,维护用户列表,转发消息
  • Colleague:User抽象类
  • ConcreteColleague:ChatUser,具体用户实现
// 抽象中介者 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 List<User> 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收到 }

相关新闻

  • 别再只用微信接口发小广告了!聊聊怎么把它接进公司业务系统搞定真自动化
  • 2026年家具AI生图工具:木创家AI 13项核心功能解析
  • 影刀RPA新手教程:淘宝直播数据监控完全指南——观看人数、互动数据与商品点击率采集

最新新闻

  • Google Gemini CLI 曝出高危漏洞:CI/CD 流水线遭远程代码执行攻击
  • [IrisOutOfBoundColorClamp节点]原理解析与实际应用
  • 免费每月省16小时,2026抖音视频提取文案怎么选性价比最高?
  • 大模型时代的流量调度与架构演进:解构基于语义的路由策略
  • Tomcat Container容器之Engine:StandardEngine _
  • 场外个股期权权利金怎么看?从结构、期限到风险边界全面解析

日新闻

  • Android逆向分析全能助手:集成化工具链与自动化工作流设计
  • 面搜索(Faceted Search)原理与工程实践指南
  • 神经网络调参避坑指南:从5个常见Loss曲线形态定位超参数问题

周新闻

  • 基于YOLOv12的番茄成熟度智能检测系统开发
  • 终极RimWorld模组管理指南:用RimSort告别模组冲突烦恼
  • AI Agent框架开发:从理论到实践的完整指南

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号