成品网站短视频源码搭建免费,投资公司投资项目流程,wordpress获取api密钥,重庆设计公司有哪些目录 1.概述2.结构3.案例实现3.1.抽象中介类3.2.抽象同事类3.3.具体同事类3.4.具体中介类3.5.测试 4.优缺点5.使用场景 1.概述
#xff08;1#xff09;一般来说#xff0c;同事类之间的关系是比较复杂的#xff0c;多个同事类之间互相关联时#xff0c;他们之间的关系会… 目录 1.概述2.结构3.案例实现3.1.抽象中介类3.2.抽象同事类3.3.具体同事类3.4.具体中介类3.5.测试 4.优缺点5.使用场景 1.概述
1一般来说同事类之间的关系是比较复杂的多个同事类之间互相关联时他们之间的关系会呈现为复杂的网状结构这是一种过度耦合的架构即不利于类的复用也不稳定。例如在下左图中有 6 个同事类对象假如对象 1 发生变化那么将会有 4 个对象受到影响。如果对象 2 发生变化那么将会有 5 个对象受到影响。也就是说同事类之间直接关联的设计是不好的。
2如果引入中介者模式那么同事类之间的关系将变为星型结构从下右图中可以看到任何一个类的变动只会影响的类本身以及中介者这样就减小了系统的耦合。一个好的设计必定不会把所有的对象关系处理逻辑封装在本类中而是使用一个专门的类来管理那些不属于自己的行为。 3中介者模式 (Mediator Pattern) 是一种行为型设计模式它允许对象通过一个中介对象来进行协作而不是直接相互引用从而降低对象之间的耦合度同时提高代码的可维护性和可扩展性。
2.结构
中介者模式包含以下主要角色
抽象中介者 (Mediator) 角色它是中介者的接口提供了同事对象注册与转发同事对象信息的抽象方法。具体中介者 (Concrete Mediator) 角色实现中介者接口定义一个 List 来管理同事对象协调各个同事角色之间的交互关系因此它依赖于同事角色。抽象同事类 (Colleague) 角色定义同事类的接口保存中介者对象提供同事对象交互的抽象方法实现所有相互影响的同事类的公共功能。具体同事类 (Concrete Colleague) 角色是抽象同事类的实现者当需要与其他同事对象交互时由中介者对象负责后续的交互。
3.案例实现
【例】租房现在租房基本都是通过房屋中介房主将房屋托管给房屋中介而租房者从房屋中介获取房屋信息。房屋中介充当租房者与房屋所有者之间的中介者。其类图下 具体实现代码如下
3.1.抽象中介类
Mediator.java
//抽象中介者类
public abstract class Mediator {public abstract void constact(String message, Person person);
}3.2.抽象同事类
Person.java
//抽象同事类
public abstract class Person {protected String name;protected Mediator mediator;public Person(String name, Mediator mediator) {this.name name;this.mediator mediator;}
}3.3.具体同事类
//租房者
public class Tenant extends Person{public Tenant(String name, Mediator mediator) {super(name, mediator);}//和中介沟通的方法public void constact(String message){mediator.constact(message, this);}//获取信息public void getMessage(String message){System.out.println(租房者 name 获取到的信息是 message);}
}HouseOwner.java
//房主类
public class HouseOwner extends Person{public HouseOwner(String name, Mediator mediator) {super(name, mediator);}//和中介沟通的方法public void constact(String message){mediator.constact(message,this);}//获取信息public void getMessage(String message){System.out.println(房主 name 获取到的信息是 message);}
}3.4.具体中介类
MediatorStructure.java
//具体的中介者角色类
public class MediatorStructure extends Mediator {//聚合房主和具体的租房者对象private HouseOwner houseOwner;private Tenant tenant;public HouseOwner getHouseOwner() {return houseOwner;}public void setHouseOwner(HouseOwner houseOwner) {this.houseOwner houseOwner;}public Tenant getTenant() {return tenant;}public void setTenant(Tenant tenant) {this.tenant tenant;}Overridepublic void constact(String message, Person person) {if (person houseOwner) {tenant.getMessage(message);} else {houseOwner.getMessage(message);}}
}3.5.测试
Client.java
public class Client {public static void main(String[] args) {//创建中介者对象MediatorStructure mediator new MediatorStructure();//创建租房者对象Tenant tenant new Tenant(李四, mediator);//创建房主对象HouseOwner houseOwner new HouseOwner(张三, mediator);//中介者要知道具体的房主和租房者mediator.setTenant(tenant);mediator.setHouseOwner(houseOwner);tenant.constact(我要租三室的房子);houseOwner.constact(我这里有三室的房子你要租吗);}
}输出结果如下
房主张三获取到的信息是我要租三室的房子
租房者李四获取到的信息是我这里有三室的房子你要租吗4.优缺点
1中介者模式的优点包括
减少对象之间的直接耦合通过引入中介者对象各个对象不再直接相互引用而是通过中介者来协调和管理交互从而降低了对象之间的依赖程度。简化对象的交互逻辑中介者模式将对象之间的交互行为集中在中介者对象中实现各个对象只需要与中介者进行通信不需要了解其他对象的具体细节从而简化了对象之间的交互逻辑。提高系统的可维护性和可扩展性通过降低对象之间的耦合度中介者模式使系统更加灵活和易于维护。当系统需要新增一些交互行为时只需要修改中介者对象即可无需修改各个同事对象。促进代码重用中介者模式可以将对象之间公共的交互行为抽象到中介者对象中从而可以更好地复用代码。
2中介者模式的缺点包括
中介者对象可能会变得复杂随着系统中的对象和交互行为增多中介者对象可能会承担过多的责任变得复杂和庞大。中介者模式可能导致性能问题因为所有的交互行为都通过中介者进行所以中介者可能成为系统的瓶颈导致性能问题。增加了系统的复杂性中介者模式增加了一个新的抽象层次引入了中介者对象使系统的架构更加复杂对于简单的交互行为并不适用。
3所以在使用中介者模式时需要权衡其优势和缺点并根据具体情况进行选择。它适用于对象之间的交互关系复杂、需要集中管理和协调的场景但对于简单的交互行为可能会过于繁琐和不必要。
5.使用场景
1中介者模式适用于以下场景
对象之间的交互关系复杂当系统中的对象之间存在复杂的交互关系很难直接进行管理和协调时可以引入中介者模式来简化和集中管理对象之间的交互行为。需要减少对象之间的耦合度当对象之间的直接引用和依赖关系较多难以维护和扩展时可以使用中介者模式来解耦对象之间的关系通过统一的中介者来进行交互。多个对象共享一些公共行为或信息当多个对象需要共享某些公共行为或信息并且希望集中管理和协调这些行为或信息时可以使用中介者模式。多个对象之间的交互频繁当多个对象之间频繁进行交互且存在复杂的交互逻辑时可以使用中介者模式来简化交互过程提高代码的可维护性和可扩展性。
2一些常见的应用中介者模式的场景包括
图形界面中的 MVC 模式在 MVC 模式中中介者模式用于协调视图、模型和控制器之间的交互。多人在线游戏系统在多人在线游戏中中介者模式可以用于处理玩家之间的交互、通信和协作。航空管制系统在航空管制系统中中介者模式可以用于协调不同飞机之间的通信、路径规划和冲突解决。UI 组件库在构建 UI 组件库或框架时中介者模式可以用于统一管理组件之间的交互行为从而提供统一的接口和规范。
3总之中介者模式适用于需要集中管理和协调对象之间交互关系的复杂场景以提高系统的灵活性、可维护性和可扩展性。