SpringCloud整合Dubbo3实战高并发下的微服务架构设计无密

#1

download:SpringCloud整合Dubbo3实战高并发下的微服务架构设计无密

行为设计模型的中介模型
中介模式
中介模式,又称介体模式或介体模式,属于行为模式。它封装了一系列对象与中间对象的交互。中介使对象之间相互作用而不显示,从而使它们的耦合变松,独立地改变它们的相互作用。

Mediator模式包装了一系列对象交互的方式,使得这些对象不必明显地相互交互。以便它们可以松散耦合。当一些对象之间的交互发生变化时,不会立即影响其他对象之间的交互。确保这些功能可以相互独立地更改。其核心思想是通过中介解耦系统,层次对象的所有外部依赖通信都由中介转发。

中介者模式通过提供一个中介类,将系统各级对象之间的多对多关系变为一对多关系,将复杂的网络结构变为以中介者为中心的星型结构,从而降低系统的复杂性,提高可扩展性。
应用场景
当多个类相互耦合形成一个网络结构时,可以考虑使用mediator模式进行优化。

1.系统中对象之间存在复杂的引用关系,导致它们的依赖结构混乱,难以重用。

2.我想通过一个中间类将行为封装在多个类中,但又不想生成太多子类。
飞行员之间不会互相沟通来决定下一架要降落的飞机。所有的通讯都是通过控制塔。
主要角色
1.抽象调停者(调停者)

定义了统一的接口,用于同事角色之间的交流。

2.特定中介(混凝土中介)

接收来自特定同事的消息,向特定同事发出命令,并协调同事之间的协作。

3.抽象的同事类(同事)

每一个同事对象都需要依靠中介的作用,在与其他同事交流时,交给中介进行转发合作。

4.特定同事(混凝土同事)

负责实现自身方法和转发依赖方法。
优点和缺点
优势:

1.减少类间依赖,将多对多依赖转化为一对多,从而减少类间耦合;

2.每个类都有自己的功能,符合迪米特里定律。
缺点:

1.在仲裁者模式下,多个对象原来的直接依赖关系,变成了仲裁者和多个同事的依赖关系。同事多了,中介就会变得臃肿,复杂,难以维护。
基本用途
创建一个抽象的中介
公共抽象类仲裁者{
受保护的混凝土;
受保护的混凝土同事b同事b;

public void setColleageA(ConcreteColleagueA同事){
this.colleagueA =同事;
}

public void setColleageB(concretecolleageb同事){
this.colleagueB =同事;
}

//中间业务逻辑
公共抽象void transferA();

公共抽象void transfer b();
}

创建一个具体的中介。
公共类ConcreteMediator扩展了Mediator {
/**
*由特定同事类A,向特定同事对象b发送指令
*/
@覆盖
公共void transferA() {
this . colleague b . self methodb();
}

/**
*由特定同事类b,向特定同事对象a发出指令
*/
@覆盖
public void transferB() {
this . colleague a . self methoda();
}
}

创建抽象同事类
公共抽象类同事{
受保护的调解人;

公共同事(调解人调解人){
this.mediator = mediator
}
}

创建特定的同事类
公共课ConcreteColleagueA扩展同事{
public ConcreteColleagueA(调解员)
超级(调解员);
this . mediator . setcolleagea(this);
}

/**
*自己的方法
*/
public void selfMethodA() {
system . out . println(this . getclass()。GetSimpleName ()+“收到中介协作通知后,selfMethodA有自己的方法来执行”);
}

/**
*从属方法
*/
public void depMethodA() {
system . out . println(this . getclass()。GetSimpleName ()+"Dep Methoda通知中介转发合作));
//中介执行转发协作。
this . mediator . transfera();
}
}

public class ConcreteColleagueB扩展同事{
public ConcreteColleagueB(调解员)
超级(调解员);
this . mediator . setcolleageb(this);
}

/**
*自己的方法
*/
public void selfMethodB() {
system . out . println(this . getclass()。GetSimpleName ()+“收到中介协作通知后,selfMethodB自有方法执行”);
}

/**
*从属方法
*/
public void depMethodB() {
system . out . println(this . getclass()。GetSimpleName ()+"DepMethodB通知中介转发合作));
//中介执行转发协作。
this . mediator . transferb();
}
}

客户端执行
复制
公共静态void main(String[] args) {
//创建一个抽象中介
mediator mediator = new concrete mediator();
//特定同事类
ConcreteColleagueA colleagueA = new ConcreteColleagueA(mediator);
concretecolleaguib colleaguib = new concretecolleaguib(mediator);
//中介进行转发合作,A转发给b。
colleague a . depmethoda();
system . out . println("-");
//中介进行转发合作,B转发给a。
colleague b . depmethodb();
}