java23种设计模式(3)-中介者模式
很多应聘者在自己的简历上会点明,自己的合作能力不错。沟通能力不错!
现在,我们写的程序之间的沟通是怎么样的呢?沟通可能不是很好理解,但是调用大部分程序员都知道吧!
不知道大家遇到过还是没有遇到过!在公司工作的时候,有时候会遇到这种情况!在我们自己的多个工程里面调用了别人的服务。但是突然有一天服务方的负责人告诉你。下周一这个服务不再提供了,我们换了个名字,同时优化了效率!让你们去替换一下。黑人问号???什么还有这种操作!不是说好不能换的吗?
这个时候,你需要做什么呢?首先,把我们所有调用了这个服务的工程全部拉一个分支,修改然后上线!这一天下来。你发现自己一直在上线!因为自己有10个工程要上线!!!!
那么,有没有办法可以解决这个问题呢?答案是肯定的。不然我说出来来干哈!
这里就牵扯到一个设计模式,叫做中介者模式。
中介者模式:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
那么,中介者模式用图例来看就是这种!
如果没有中介者就是以下这种情况了
所以中介者最重要的将以前的网状结构改为了现在的星状结构!降低了代码的维护成本!
不过,这样中介者的压力是很大的,所以服务的健壮性要做好哟!
talk is cheap, show your code!
package com.mediator.example.service;
import lombok.Data;
/**
* 服务方A
*/
@Data
public class AService {
private String message;
public void doSomeThing(){
System.out.println("A服务做了一些事情!");
}
}
package com.mediator.example.service;
import lombok.Data;
/**
* 服务方B
* */
@Data
public class BService {
private String message;
public void doSomeThingB(){
System.out.println("B服务做了一些事情!");
}
}
package com.mediator.example.transfer;
import com.mediator.example.Mediator;
import lombok.Data;
/**
* 调用方A
* */
@Data
public class ATransfer {
private Mediator mediator;
public void testA(){
mediator.doSomeThingB();
}
}
package com.mediator.example.transfer;
import com.mediator.example.Mediator;
import lombok.Data;
/**
* 调用方B
* */
@Data
public class Btransfer {
private Mediator mediator;
public void test(){
mediator.doSomeThing();
mediator.doSomeThingB();
}
}
package com.mediator.example;
import com.mediator.example.service.AService;
import com.mediator.example.service.BService;
/**
* 中介者,负责提供所有的服务方的接口给调用方!
* */
public class Mediator {
private BService bService;
private AService aService;
public void setbService(BService bService) {
this.bService = bService;
}
public void setaService(AService aService) {
this.aService = aService;
}
public void doSomeThing(){
System.out.println("Mediator.doSomeThing");
aService.doSomeThing();
}
public void doSomeThingB(){
System.out.println("Mediator.doSomeThingB");
bService.doSomeThingB();
}
}
package com.mediator.example;
import com.mediator.example.service.AService;
import com.mediator.example.service.BService;
import com.mediator.example.transfer.ATransfer;
import com.mediator.example.transfer.Btransfer;
/**
* 这里的中介者应该不需要这里初始化才对,不过这只是一个测试能说明问题就可以了!
* */
public class Example {
public static void main(String[] args) {
Mediator mediator = new Mediator();
mediator.setaService(new AService());
mediator.setbService(new BService());
ATransfer aTransfer = new ATransfer();
Btransfer btransfer = new Btransfer();
aTransfer.setMediator(mediator);
btransfer.setMediator(mediator);
aTransfer.testA();
btransfer.test();
}
}
老规矩最后是GitHub地址:
https://github.com/yunzhifei/designPatterns.git
楼主才疏学浅,希望大家多多指教!