Java中介者设计模式
定义
中介者模式(Mediator Pattern)是一种行为设计模式,它通过封装一系列对象之间的交互,将对象之间的通信集中处理,从而降低对象之间的耦合度。
在中介者模式中,一个中介者对象封装了一系列对象之间的交互关系。中介者使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
对应角色
- 抽象中介者角色(Mediator):它是中介者的接口,提供了同事对象注册与转发同事对象信息的抽象方法。
- 具体中介者角色(Concrete Mediator):实现中介者接口,定义一个 List 来管理同事对象,协调各个同事角色之间的交互关系,因此它依赖于同事角色。
- 同事角色(Colleague):定义各个同事类公有的方法,并声明一些抽象方法来供子类实现公有方法,同时保存一个中介者对象,用于与中介者进行通信。
优缺点
优点
文章来源:https://www.toymoban.com/news/detail-570075.html
- 降低了对象之间的耦合性,使得对象易于独立地被复用。
- 将对象间的一对多关系变成一对一关系,避免了同事类之间的紧密耦合。
- 减少了子类生成,中介者将原本分布于多个对象间的行为集中在一起,改变了对象间的继承关系,这样同事类就可以不必定义自己的行为,只需实现与中介者协调相关的行为即可。
缺点
文章来源地址https://www.toymoban.com/news/detail-570075.html
- 中介者会庞大,变得复杂难以维护。
- 中介者模式将原本分散在多个对象间的行为集中在一起,把原本不容易出错的代码变得复杂难以维护。
- 中介者模式需要中介者对象的存在,因此系统会新增一个对象,系统复杂性可能会增加。
应用场景
- 当对象之间的交互操作很多且每个对象的行为操作都依赖彼此时,为防止在修改一个对象的行为时,同时涉及修改很多其他对象的行为,可以采用中介者模式,将各个对象间的交互操作分离出来,由中介者来负责。
- 当对象之间存在很多的关联关系,这些关系导致系统结构复杂且难以理解时,可以采用中介者模式来简化对象之间的关系。
- 当一个对象引用很多其他对象并直接与这些对象通信,导致难以复用该对象时,可以采用中介者模式,将该对象与其他对象解耦,使其更容易被复用。
实例
import java.util.ArrayList;
import java.util.List;
//抽象中介者
abstract class Mediator {
public abstract void send(String message, Colleague colleague);
}
//具体中介者
class ConcreteMediator extends Mediator {
private List<Colleague> colleagues = new ArrayList<>();
public void register(Colleague colleague) {
colleagues.add(colleague);
}
public void send(String message, Colleague sender) {
for (Colleague colleague : colleagues) {
if (colleague != sender) {
colleague.receive(message);
}
}
}
}
//抽象同事
abstract class Colleague {
protected Mediator mediator;
public Colleague(Mediator mediator) {
this.mediator = mediator;
}
public abstract void send(String message);
public abstract void receive(String message);
}
//具体同事
class ConcreteColleague1 extends Colleague {
public ConcreteColleague1(Mediator mediator) {
super(mediator);
}
public void send(String message) {
mediator.send(message, this);
}
public void receive(String message) {
System.out.println("ConcreteColleague1 received: " + message);
}
}
class ConcreteColleague2 extends Colleague {
public ConcreteColleague2(Mediator mediator) {
super(mediator);
}
public void send(String message) {
mediator.send(message, this);
}
public void receive(String message) {
System.out.println("ConcreteColleague2 received: " + message);
}
}
public class MediatorPatternDemo {
public static void main(String[] args) {
ConcreteMediator mediator = new ConcreteMediator();
ConcreteColleague1 colleague1 = new ConcreteColleague1(mediator);
ConcreteColleague2 colleague2 = new ConcreteColleague2(mediator);
mediator.register(colleague1);
mediator.register(colleague2);
colleague1.send("Hello, World!");
}
}
到了这里,关于Java中介者设计模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!