java23种设计模式(3)-中介者模式

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值