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
楼主才疏学浅,希望大家多多指教!

原创粉丝点击