ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

设计模式——行为型之中介者模式

2021-01-14 11:02:09  阅读:226  来源: 互联网

标签:调用者 paramA IObject receive mediator 模式 中介 设计模式 public


设计模式——行为型之中介者模式


将服务提供方的接口重新封装成一个新类,服务调用方通过新类的方法间接调用原始接口,这样的行为叫中介者模式

中介者模式适合多个不同类型的一类实例互相调用的情况,将调用和执行解耦,实际上是调用者将请求委托给中介者调用

中介者模式由3部分组成:

  • 调用者/接收者的抽象类,抽象出不同接收者的相同点
  • 调用者/接收者,实现具体的执行逻辑
  • 中介者,代替调用者调用接收者

抽象类:

public abstract class IObject {

    protected Mediator mediator;

    public IObject(Mediator mediator) {
        this.mediator = mediator;
    }

    protected abstract void receive(String paramA);

    public abstract void tellSb(IObject iObject,String paramA);

}

调用者/接收者(B、C省略):

public class ObjectA extends IObject{

    public ObjectA(Mediator mediator) {
        super(mediator);
    }
		//作为调用者时执行
    @Override
    public void tellSb(IObject iObject, String paramA) {
        mediator.handleEvent(iObject,paramA);
    }
		//作为接收者时之行
    @Override
    public void receive(String paramA) {
        System.out.println("A receive "+paramA);
    }
}

中介者:

public class Mediator {

    public void handleEvent(IObject iObject,String param){
        iObject.receive(param);
    }

}

使用:

public static void main(String[] args) {
        final Mediator mediator = new Mediator();
        final IObject objectA = new ObjectA(mediator);
        final IObject objectB = new ObjectB(mediator);
        final IObject objectC = new ObjectC(mediator);
        objectA.tellSb(objectB,"abc");
        objectA.tellSb(objectC,"def");
        objectB.tellSb(objectA,"hij");
        objectC.tellSb(objectA,"klm");
    }
B receive abc
C receive def
A receive hij
A receive klm

标签:调用者,paramA,IObject,receive,mediator,模式,中介,设计模式,public
来源: https://blog.csdn.net/weixin_39841589/article/details/112597287

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有