ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

设计模式行为型——中介者模式

设计模式行为型——中介者模式 目录中介者模式的定义中介者模式的实现中介者模式角色中介者模式类图中介者模式代码实现中介者模式的特点优点缺点使用场景注意事项实际应用中介者模式的定义中介者模式Mediator Pattern属于行为型模式是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类该类通常处理不同类之间的通信并支持松耦合使代码易于维护。用一个中介者对象来封装一系列的对象交互中介者使各对象不需要显示地相互引用且可以独立地改变它们之间的交互。中介者模式又叫调停者模式是一种对象行为型模式。中介者模式的实现中介者模式角色抽象中介者角色Mediator抽象中介者角色定义统一的接口以及一个或者多个事件方法用于各同事角色之间的通信。具体中介者角色ConcreteMediator实现了抽象中介者所声明的事件方法协调各同事类之间的行为持有所有同事类对象的引用。抽象同事角色Colleague定义了抽象同事类持有抽象中介者对象的引用。具体同事角色ConcreteColleague继承抽象同事类实现自己业务通过中介者跟其他同事类进行通信都需要认识中介者。中介者模式类图中介者模式代码实现抽象中介者角色package com.common.demo.pattern.mediator; /** * author Evan Walker 昂焱数据: https://www.ayshuju.com * version 1.0 * desc 具体中介角色 具体中介者 * date 2023/08/04 09:27:57 */ public class ConcreteMediator extends Mediator{ Override public void operation(Colleague colleague) { if(colleague instanceof ConcreteColleagueA) { colleagues.get(0).update(); }else if(colleague instanceof ConcreteColleagueB) { colleagues.get(1).update(); } } }具体中介者角色package com.common.demo.pattern.mediator; /** * author Evan Walker 昂焱数据: https://www.ayshuju.com * version 1.0 * desc 具体中介角色 具体中介者 * date 2023/08/04 09:27:57 */ public class ConcreteMediator extends Mediator{ Override public void operation(Colleague colleague) { if(colleague instanceof ConcreteColleagueA) { colleagues.get(0).update(); }else if(colleague instanceof ConcreteColleagueB) { colleagues.get(1).update(); } } }抽象同事角色package com.common.demo.pattern.mediator; /** * author Evan Walker 昂焱数据: https://www.ayshuju.com * version 1.0 * desc 抽象同事角色 抽象同事类 * date 2023/08/04 09:21:50 */ public abstract class Colleague { /** * 抽象中介者引用 */ protected Mediator mediator; public Colleague(Mediator mediator) { this.mediator mediator; } /** * 数据更新方法 */ public abstract void update(); /** * 数据更改方法 */ public abstract void changed(); }具体同事角色package com.common.demo.pattern.mediator; /** * author Evan Walker 昂焱数据: https://www.ayshuju.com * version 1.0 * desc 具体同事角色 具体同事小A * date 2023/08/04 09:24:46 */ public class ConcreteColleagueA extends Colleague{ public ConcreteColleagueA(Mediator mediator) { super(mediator); } Override public void update() { System.out.println(更新同事小A); } Override public void changed() { System.out.println(同事小A数据更改); mediator.operation(this); } } package com.common.demo.pattern.mediator; /** * author Evan Walker 昂焱数据: https://www.ayshuju.com * version 1.0 * desc 具体同事角色 具体同事小B * date 2023/08/04 09:24:46 */ public class ConcreteColleagueB extends Colleague{ public ConcreteColleagueB(Mediator mediator) { super(mediator); } Override public void update() { System.out.println(更新同事小B); } Override public void changed() { System.out.println(同事小B数据更改); mediator.operation(this); } }测试代码package com.common.demo.pattern.mediator; /** * author Evan Walker 昂焱数据: https://www.ayshuju.com * version 1.0 * desc 具体中介角色 具体中介者 * date 2023/08/04 09:27:57 */ public class ConcreteMediator extends Mediator{ Override public void operation(Colleague colleague) { if(colleague instanceof ConcreteColleagueA) { colleagues.get(0).update(); }else if(colleague instanceof ConcreteColleagueB) { colleagues.get(1).update(); } } }测试截图中介者模式的特点优点解耦对象之间的交互中介者模式将对象间的交互逻辑封装到中介者对象中使得各个对象之间的关系变得松耦合减少了对象之间的直接依赖。集中控制交互逻辑中介者模式通过集中控制对象间的交互逻辑使得代码更加清晰可维护易于扩展和修改。简化对象间的通信中介者模式将对象间的通信封装到中介者对象中对象只需要关注自身的业务逻辑无需了解其它对象的具体实现细节。缺点中介者对象过于复杂随着系统的复杂性增加中介者对象可能会变得庞大复杂维护和理解起来相对困难。增加了系统的单一点故障中介者对象负责协调对象之间的交互一旦中介者对象出现问题可能会影响系统的稳定性。使用场景多个对象之间存在复杂的交互关系当对象之间存在复杂的交互逻辑并且彼此之间的依赖关系较高时可以考虑使用中介者模式。需要集中控制对象间交互逻辑的情况当需要集中管理和控制多个对象的交互逻辑时可以使用中介者模式简化系统的设计。注意事项中介者模式需要注意中介者对象的设计和组织方式以及与其他对象的交互关系避免中介者对象过于庞大和复杂。不要滥用中介者模式只有在对象间的交互逻辑较为复杂、耦合度较高时才考虑使用中介者模式。实际应用聊天室聊天室中的用户可以通过中介者对象发送消息和接收消息中介者负责将消息传递给其他用户。MVC框架在MVC框架中控制器作为中介者对象接收用户的请求并协调模型和视图之间的交互。航空管制系统航空管制系统中的空中交通管制中心可以看作是中介者负责协调各个飞机的航行和地面设施之间的交互。
返回列表