java23种设计模式(3)-中介者模式
来源:互联网 发布:淘宝导航设置颜色代码 编辑:程序博客网 时间:2024/05/20 10:20
java23种设计模式(3)-中介者模式
很多应聘者在自己的简历上会点明,自己的合作能力不错。沟通能力不错!
现在,我们写的程序之间的沟通是怎么样的呢?沟通可能不是很好理解,但是调用大部分程序员都知道吧!
不知道大家遇到过还是没有遇到过!在公司工作的时候,有时候会遇到这种情况!在我们自己的多个工程里面调用了别人的服务。但是突然有一天服务方的负责人告诉你。下周一这个服务不再提供了,我们换了个名字,同时优化了效率!让你们去替换一下。黑人问号???什么还有这种操作!不是说好不能换的吗?
这个时候,你需要做什么呢?首先,把我们所有调用了这个服务的工程全部拉一个分支,修改然后上线!这一天下来。你发现自己一直在上线!因为自己有10个工程要上线!!!!
那么,有没有办法可以解决这个问题呢?答案是肯定的。不然我说出来来干哈!
这里就牵扯到一个设计模式,叫做中介者模式。
中介者模式:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
那么,中介者模式用图例来看就是这种!
如果没有中介者就是以下这种情况了
所以中介者最重要的将以前的网状结构改为了现在的星状结构!降低了代码的维护成本!
不过,这样中介者的压力是很大的,所以服务的健壮性要做好哟!
talk is cheap, show your code!
package com.mediator.example.service;import lombok.Data;/** * 服务方A */@Datapublic class AService { private String message; public void doSomeThing(){ System.out.println("A服务做了一些事情!"); }}
package com.mediator.example.service;import lombok.Data;/** * 服务方B * */@Datapublic 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 * */@Datapublic class ATransfer { private Mediator mediator; public void testA(){ mediator.doSomeThingB(); }}
package com.mediator.example.transfer;import com.mediator.example.Mediator;import lombok.Data;/** * 调用方B * */@Datapublic 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
楼主才疏学浅,希望大家多多指教!
- java23种设计模式(3)-中介者模式
- Java23种设计模式——中介者模式
- Java23种设计模式
- JAVA23种设计模式
- JAVA23种设计模式
- JAVA23种设计模式
- JAVA23种设计模式
- JAVA23种设计模式
- JAVA23种设计模式
- java23种设计模式
- Java23种设计模式
- java23种设计模式
- java23种设计模式
- java23种设计模式
- java23种设计模式
- java23种设计模式
- Java23种设计模式
- java23种设计模式
- 广东工业大学2017新生赛(决赛)-网络同步赛 1007 白色相簿的季节【全错位排列】
- LDM和STM指令
- springmvc controller @requestMapping 完成url请求通配
- IntelliJ IDEA
- 学习小结
- java23种设计模式(3)-中介者模式
- hdoj 1018 Big Number
- mysql--高级操作
- 堆和栈的区别整理
- Storm集群环境安装
- 使用java.util.List.subList时最好小心点
- linux内核中用C语言实现面向对象思想
- 封装Servlet,跳过service,doPost,doGet直接写方法
- 欢迎使用CSDN-markdown编辑器