当前位置: 首页 > news >正文

网站建设提供ftpwordpress做一个审核程序

网站建设提供ftp,wordpress做一个审核程序,发布设计任务的网站,软文写作的技巧Java设计模式之中介者模式详解 一、中介者模式核心思想 核心目标#xff1a;通过中介对象封装一组对象间的交互#xff0c;将网状的对象关系转变为星型结构。如同机场控制塔协调所有飞机的起降#xff0c;避免飞机之间直接通信导致的混乱。 二、中介者模式类图#xff08;…Java设计模式之中介者模式详解 一、中介者模式核心思想 核心目标通过中介对象封装一组对象间的交互将网状的对象关系转变为星型结构。如同机场控制塔协调所有飞机的起降避免飞机之间直接通信导致的混乱。 二、中介者模式类图Mermaid #mermaid-svg-gWBG7DyS3G7a67LW {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-gWBG7DyS3G7a67LW .error-icon{fill:#552222;}#mermaid-svg-gWBG7DyS3G7a67LW .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-gWBG7DyS3G7a67LW .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-gWBG7DyS3G7a67LW .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-gWBG7DyS3G7a67LW .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-gWBG7DyS3G7a67LW .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-gWBG7DyS3G7a67LW .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-gWBG7DyS3G7a67LW .marker{fill:#333333;stroke:#333333;}#mermaid-svg-gWBG7DyS3G7a67LW .marker.cross{stroke:#333333;}#mermaid-svg-gWBG7DyS3G7a67LW svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-gWBG7DyS3G7a67LW g.classGroup text{fill:#9370DB;fill:#131300;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-gWBG7DyS3G7a67LW g.classGroup text .title{font-weight:bolder;}#mermaid-svg-gWBG7DyS3G7a67LW .nodeLabel,#mermaid-svg-gWBG7DyS3G7a67LW .edgeLabel{color:#131300;}#mermaid-svg-gWBG7DyS3G7a67LW .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-gWBG7DyS3G7a67LW .label text{fill:#131300;}#mermaid-svg-gWBG7DyS3G7a67LW .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-gWBG7DyS3G7a67LW .classTitle{font-weight:bolder;}#mermaid-svg-gWBG7DyS3G7a67LW .node rect,#mermaid-svg-gWBG7DyS3G7a67LW .node circle,#mermaid-svg-gWBG7DyS3G7a67LW .node ellipse,#mermaid-svg-gWBG7DyS3G7a67LW .node polygon,#mermaid-svg-gWBG7DyS3G7a67LW .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-gWBG7DyS3G7a67LW .divider{stroke:#9370DB;stroke:1;}#mermaid-svg-gWBG7DyS3G7a67LW g.clickable{cursor:pointer;}#mermaid-svg-gWBG7DyS3G7a67LW g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-gWBG7DyS3G7a67LW g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-gWBG7DyS3G7a67LW .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-gWBG7DyS3G7a67LW .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-gWBG7DyS3G7a67LW .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-gWBG7DyS3G7a67LW .dashed-line{stroke-dasharray:3;}#mermaid-svg-gWBG7DyS3G7a67LW #compositionStart,#mermaid-svg-gWBG7DyS3G7a67LW .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-gWBG7DyS3G7a67LW #compositionEnd,#mermaid-svg-gWBG7DyS3G7a67LW .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-gWBG7DyS3G7a67LW #dependencyStart,#mermaid-svg-gWBG7DyS3G7a67LW .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-gWBG7DyS3G7a67LW #dependencyStart,#mermaid-svg-gWBG7DyS3G7a67LW .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-gWBG7DyS3G7a67LW #extensionStart,#mermaid-svg-gWBG7DyS3G7a67LW .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-gWBG7DyS3G7a67LW #extensionEnd,#mermaid-svg-gWBG7DyS3G7a67LW .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-gWBG7DyS3G7a67LW #aggregationStart,#mermaid-svg-gWBG7DyS3G7a67LW .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-gWBG7DyS3G7a67LW #aggregationEnd,#mermaid-svg-gWBG7DyS3G7a67LW .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-gWBG7DyS3G7a67LW .edgeTerminals{font-size:11px;}#mermaid-svg-gWBG7DyS3G7a67LW :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 协调 协调 通信 «interface» Mediator notify(Component, String) ConcreteMediator -componentA: ComponentA -componentB: ComponentB notify(Component, String) «abstract» Component -mediator: Mediator setMediator(Mediator) notifyMediator(String) ComponentA operationA() reactToB() ComponentB operationB() reactToA() 三、代码实现示例 1. 聊天室场景 // 中介者接口 interface ChatMediator {void sendMessage(String msg, User user);void addUser(User user); }// 具体中介者聊天室 class ChatRoom implements ChatMediator {private ListUser users new ArrayList();public void addUser(User user) {users.add(user);}public void sendMessage(String msg, User sender) {for (User user : users) {if (user ! sender) { // 不发送给自己user.receive(msg);}}} }// 抽象组件 abstract class User {protected ChatMediator mediator;protected String name;public User(String name, ChatMediator mediator) {this.name name;this.mediator mediator;}public abstract void send(String msg);public abstract void receive(String msg); }// 具体组件聊天用户 class ChatUser extends User {public ChatUser(String name, ChatMediator mediator) {super(name, mediator);}public void send(String msg) {System.out.println(name 发送: msg);mediator.sendMessage(msg, this);}public void receive(String msg) {System.out.println(name 收到: msg);} }// 客户端调用 public class Client {public static void main(String[] args) {ChatMediator chatRoom new ChatRoom();User alice new ChatUser(Alice, chatRoom);User bob new ChatUser(Bob, chatRoom);User charlie new ChatUser(Charlie, chatRoom);chatRoom.addUser(alice);chatRoom.addUser(bob);chatRoom.addUser(charlie);alice.send(大家好);/* 输出Alice 发送: 大家好Bob 收到: 大家好Charlie 收到: 大家好 */} }四、模式优缺点分析 ✅ 优势 解耦对象关系组件间无需直接引用简化交互协议统一通过中介者通信集中控制逻辑交互规则在中介者中维护减少子类数量避免为不同交互创建大量子类 ❌ 缺点 中介者可能复杂随着交互增加中介者可能成为上帝对象性能瓶颈所有通信经过中介者可能成为系统瓶颈过度设计风险简单交互场景不适用 五、典型应用场景 GUI组件交互表单验证输入框、按钮、标签联动聊天系统群聊消息分发航空管制协调飞机起降分布式系统服务注册与发现如Eureka工作流引擎任务节点间的协调游戏开发NPC行为协调 六、Mermaid序列图交互流程 #mermaid-svg-GLbgDzbRYWfQwA0c {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLbgDzbRYWfQwA0c .error-icon{fill:#552222;}#mermaid-svg-GLbgDzbRYWfQwA0c .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-GLbgDzbRYWfQwA0c .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-GLbgDzbRYWfQwA0c .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-GLbgDzbRYWfQwA0c .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-GLbgDzbRYWfQwA0c .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-GLbgDzbRYWfQwA0c .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-GLbgDzbRYWfQwA0c .marker{fill:#333333;stroke:#333333;}#mermaid-svg-GLbgDzbRYWfQwA0c .marker.cross{stroke:#333333;}#mermaid-svg-GLbgDzbRYWfQwA0c svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-GLbgDzbRYWfQwA0c .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-GLbgDzbRYWfQwA0c text.actortspan{fill:black;stroke:none;}#mermaid-svg-GLbgDzbRYWfQwA0c .actor-line{stroke:grey;}#mermaid-svg-GLbgDzbRYWfQwA0c .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-GLbgDzbRYWfQwA0c .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-GLbgDzbRYWfQwA0c #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-GLbgDzbRYWfQwA0c .sequenceNumber{fill:white;}#mermaid-svg-GLbgDzbRYWfQwA0c #sequencenumber{fill:#333;}#mermaid-svg-GLbgDzbRYWfQwA0c #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-GLbgDzbRYWfQwA0c .messageText{fill:#333;stroke:#333;}#mermaid-svg-GLbgDzbRYWfQwA0c .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-GLbgDzbRYWfQwA0c .labelText,#mermaid-svg-GLbgDzbRYWfQwA0c .labelTexttspan{fill:black;stroke:none;}#mermaid-svg-GLbgDzbRYWfQwA0c .loopText,#mermaid-svg-GLbgDzbRYWfQwA0c .loopTexttspan{fill:black;stroke:none;}#mermaid-svg-GLbgDzbRYWfQwA0c .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-GLbgDzbRYWfQwA0c .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-GLbgDzbRYWfQwA0c .noteText,#mermaid-svg-GLbgDzbRYWfQwA0c .noteTexttspan{fill:black;stroke:none;}#mermaid-svg-GLbgDzbRYWfQwA0c .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-GLbgDzbRYWfQwA0c .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-GLbgDzbRYWfQwA0c .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-GLbgDzbRYWfQwA0c .actorPopupMenu{position:absolute;}#mermaid-svg-GLbgDzbRYWfQwA0c .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-GLbgDzbRYWfQwA0c .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-GLbgDzbRYWfQwA0c .actor-man circle,#mermaid-svg-GLbgDzbRYWfQwA0c line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-GLbgDzbRYWfQwA0c :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} ComponentA Mediator ComponentB ComponentC 通知事件X 处理事件X 处理事件X 完成 完成 反馈结果 ComponentA Mediator ComponentB ComponentC 七、中介者模式 vs 其他模式 对比模式核心区别观察者模式单向通知不处理响应外观模式简化子系统接口不处理组件间交互代理模式控制单个对象访问 八、实际框架应用案例 1. Java Message Service (JMS) classDiagramclass ConnectionFactoryclass Connectionclass Sessionclass MessageProducerclass MessageConsumerConnectionFactory -- Connection : 创建Connection -- Session : 创建Session -- MessageProducer : 创建Session -- MessageConsumer : 创建MessageProducer -- Message : 发送MessageConsumer -- Message : 接收note for ConnectionFactory 作为中介者协调\n生产者与消费者2. Spring框架中的ApplicationContext Component class ServiceA {Autowired private ApplicationContext context; // 中介者public void doSomething() {// 通过中介者获取其他组件ServiceB serviceB context.getBean(ServiceB.class);serviceB.process();} }九、高级应用技巧 1. 中介者分层设计 #mermaid-svg-SRstf0WKi0CFFZ5l {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SRstf0WKi0CFFZ5l .error-icon{fill:#552222;}#mermaid-svg-SRstf0WKi0CFFZ5l .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-SRstf0WKi0CFFZ5l .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-SRstf0WKi0CFFZ5l .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-SRstf0WKi0CFFZ5l .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-SRstf0WKi0CFFZ5l .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-SRstf0WKi0CFFZ5l .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-SRstf0WKi0CFFZ5l .marker{fill:#333333;stroke:#333333;}#mermaid-svg-SRstf0WKi0CFFZ5l .marker.cross{stroke:#333333;}#mermaid-svg-SRstf0WKi0CFFZ5l svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-SRstf0WKi0CFFZ5l g.classGroup text{fill:#9370DB;fill:#131300;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-SRstf0WKi0CFFZ5l g.classGroup text .title{font-weight:bolder;}#mermaid-svg-SRstf0WKi0CFFZ5l .nodeLabel,#mermaid-svg-SRstf0WKi0CFFZ5l .edgeLabel{color:#131300;}#mermaid-svg-SRstf0WKi0CFFZ5l .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-SRstf0WKi0CFFZ5l .label text{fill:#131300;}#mermaid-svg-SRstf0WKi0CFFZ5l .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-SRstf0WKi0CFFZ5l .classTitle{font-weight:bolder;}#mermaid-svg-SRstf0WKi0CFFZ5l .node rect,#mermaid-svg-SRstf0WKi0CFFZ5l .node circle,#mermaid-svg-SRstf0WKi0CFFZ5l .node ellipse,#mermaid-svg-SRstf0WKi0CFFZ5l .node polygon,#mermaid-svg-SRstf0WKi0CFFZ5l .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-SRstf0WKi0CFFZ5l .divider{stroke:#9370DB;stroke:1;}#mermaid-svg-SRstf0WKi0CFFZ5l g.clickable{cursor:pointer;}#mermaid-svg-SRstf0WKi0CFFZ5l g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-SRstf0WKi0CFFZ5l g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-SRstf0WKi0CFFZ5l .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-SRstf0WKi0CFFZ5l .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-SRstf0WKi0CFFZ5l .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-SRstf0WKi0CFFZ5l .dashed-line{stroke-dasharray:3;}#mermaid-svg-SRstf0WKi0CFFZ5l #compositionStart,#mermaid-svg-SRstf0WKi0CFFZ5l .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-SRstf0WKi0CFFZ5l #compositionEnd,#mermaid-svg-SRstf0WKi0CFFZ5l .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-SRstf0WKi0CFFZ5l #dependencyStart,#mermaid-svg-SRstf0WKi0CFFZ5l .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-SRstf0WKi0CFFZ5l #dependencyStart,#mermaid-svg-SRstf0WKi0CFFZ5l .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-SRstf0WKi0CFFZ5l #extensionStart,#mermaid-svg-SRstf0WKi0CFFZ5l .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-SRstf0WKi0CFFZ5l #extensionEnd,#mermaid-svg-SRstf0WKi0CFFZ5l .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-SRstf0WKi0CFFZ5l #aggregationStart,#mermaid-svg-SRstf0WKi0CFFZ5l .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-SRstf0WKi0CFFZ5l #aggregationEnd,#mermaid-svg-SRstf0WKi0CFFZ5l .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-SRstf0WKi0CFFZ5l .edgeTerminals{font-size:11px;}#mermaid-svg-SRstf0WKi0CFFZ5l :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 协调 协调 GlobalMediator ModuleAMediator ModuleBMediator ComponentA1 ComponentA2 2. 事件总线简化版 class EventBusMediator {private MapClass?, ListConsumerObject handlers new HashMap();public T void subscribe(ClassT eventType, ConsumerT handler) {handlers.computeIfAbsent(eventType, k - new ArrayList()).add((ConsumerObject) handler);}public void publish(Object event) {ListConsumerObject eventHandlers handlers.get(event.getClass());if (eventHandlers ! null) {eventHandlers.forEach(handler - handler.accept(event));}} }// 使用示例 EventBusMediator bus new EventBusMediator(); bus.subscribe(String.class, msg - System.out.println(处理字符串: msg)); bus.publish(测试消息);十、常见问题解答 Q1如何避免中介者变成上帝对象 职责拆分创建多个专业中介者如登录中介者、支付中介者使用状态模式让中介者根据状态改变行为结合命令模式将操作封装为命令对象 Q2中介者模式如何支持异步 class AsyncMediator {private Executor executor Executors.newCachedThreadPool();public void mediate(Runnable task) {executor.execute(task);} }Q3如何处理组件间的双向通信 在中介者中实现回调机制 interface Callback {void onComplete(Object result); }class ComponentA {void request(Mediator mediator, Callback callback) {mediator.processRequest(this, callback);} }class Mediator {void processRequest(ComponentA comp, Callback callback) {// 处理请求...callback.onComplete(result);} }如果你觉得文章对你有帮助的话请帮忙点点关注吧谢谢啦
http://www.pierceye.com/news/186950/

相关文章:

  • 网站开发与网站建设网站上的聊天框怎么做的
  • 任务网站(做任务学技能的)开发公司宣传册
  • 织梦搭建商城网站高端网站建设深圳
  • 做网站排名优化的公司无需下载直接登录qq手机版
  • 网站不备案不能访问吗wordpress主题开发404页面
  • 工作总结个人总结自动app优化下载
  • 网站开发推荐书籍比较大的外贸网站
  • 上饶建设网站郑州网
  • 做淘宝客网站一定要备案吗没有网站域名备案
  • 用QQ群做网站排名慈溪网站制作哪家最好
  • 兴宁市网站建设手工艺品网站建设策划书
  • flash做网站导航网站品牌建设流程
  • 公司建设网站属于什么费用网站打模块
  • 网站建设应注意的问题网站备案验证码错误
  • 网站核验点网站自己怎么做的
  • 购物网站建设平台canvas可画网页版
  • 企业信息平台系统网站推广优化建设
  • 免费网站模板制作自助建站上建的网站免费吗
  • 深圳市网站建设外包公司门户网站代码结构
  • 昆明做网站建设找谁最新版在线 网
  • 东昌府聊城网站建设网站广告做的好的企业案例分析
  • asp三层架构做网站网站开发前端基础
  • 医院网站建设方案策划书把网站做成app的软件下载
  • 网站建设实践报告3000字wordpress消息提示插件
  • 网站制作的评价标准做网站后台需要什么
  • 学院网站建设服务宗旨实惠的网站建设产品
  • 网站改名 备案影视制作
  • 网站开发亿码酷技术网站建设选谋者
  • 智能家居网站模板怎样做网站标题优化
  • 深圳制作网站制作公司哪家好最简洁 wordpress主题