以下StatusPoller类的行为最符合哪种设计模式?
设计模式判断解答
1. 中介者模式的判断是否准确
该判断不准确,当前代码并不符合中介者模式的定义:
- 中介者模式的核心是封装多个对等业务对象之间的交互逻辑,所有需要互相通信的对象(也称同事类)仅持有中介者的引用,不会直接耦合其他交互对象,所有通信请求都通过中介者转发。
- 这段
StatusPoller的代码只是按固定顺序调用了OAuth认证、状态拉取、数据存储、消息分发几个独立子模块,这些子模块之间没有互相通信的需求,也不需要感知StatusPoller的存在,本质只是封装了一段固定的业务执行流程,并没有解决多对象耦合通信的问题,因此不属于中介者模式。
你给出的参考代码如下:
public class StatusPoller { public void Poll() { foreach(User user in users) { string accessToken = oAuthClient.Authenticate(user); // 认证 List<status> statuses = pollingClient.PollStatus(accessToken); // 拉取状态 Store(statuses); // 状态存入数据库 } Message.Dispatch(5) // 延迟分发新消息 } }
2. 更匹配的设计模式
当前代码更符合两种模式的特征:
- 门面(Facade)模式:属于GoF 23种设计模式中的结构型模式,核心是为多个复杂的子系统提供统一的对外访问入口。你代码中的
Poll()方法就是把认证、状态拉取、存储、消息分发这几个独立子能力的调用逻辑封装起来,对外只暴露Poll()这一个入口,调用方不需要感知内部的执行步骤和依赖的子模块,完全符合门面模式的设计目标。 - 事务脚本(Transaction Script)模式:属于企业应用架构模式,核心是用单个过程处理一个业务请求的全部逻辑,适合流程固定的简单业务场景,这段按顺序执行的轮询全流程逻辑,也完全匹配事务脚本的特征。
内容的提问来源于stack exchange,提问作者Cole
相关产品推荐
相关产品推荐

