设计模式之中介者模式

来源:互联网 发布:sql服务器名称是什么 编辑:程序博客网 时间:2024/05/15 01:24

设计模式目录
http://blog.csdn.net/fenglailea/article/details/52733435
风.fox

中介者模式 Mediator patten

用一个中介对象封装一系列的对象交互,中介者是各个对象不需要显示地相互作用,从而使其耦合松散,而且可以独立地改变他们之间的交互

通用类图

中介者模式

组成

  • 抽象中介者角色 Mediator
    抽象中介者角色定义统一接口,用于各同事角色之间的通信
  • 具体中介者角色 Concrete Mediator
    具体中介者角色通过协调各同事角色实现协作行为,因此它必须依赖于各个同事角色
  • 同事角色 Colleague
    每一个同事角色都知道中介者角色,而且与其他的同事角色通信时候,一定要通过中介者角色协作。

案例

JAVA

// 抽象中介者public abstract class Mediator{    // 定义同事类    protected ConcreteColleague1 c1;    protected ConcreteColleague2 c2;    // 通过getter/setter方法把同事类注入进来    public ConcreteColleague1 getc1(){        return c1;    }    public ConcreteColleague2 getc2(){        return c2;    }    public void setC1(ConcreteColleague1 c1){        this.c1=c1;    }    public void setC2(ConcreteColleague2 c2){        this.c2=c2;    }    // 中介者模式的业务逻辑    public abstract void doSomething1();    public abstract void doSomething2();}//中介者public class ConcreteMediator extends Mediator{    // 中介者模式的业务逻辑    public abstract void doSomething1(){        super.c1.selfMethod1();        super.c2.selfMethod2();    }    public abstract void doSomething2(){        super.c1.selfMethod1();        super.c2.selfMethod2();    }}// 抽象同事类public abstract class Colleague{    protected Mediator mediator;    public Colleague(Mediator _mediator){        this.mediator=_mediator;    }}// 同事类public class ConcreteColleague1 extends Colleague{    //通过构造函数传递中介者    pubic ConcreteColleague1(Mediator _mediator)){        super(_mediator);    }    //自有方法    public void selfMethod1(){        ...    }    // 依赖方法    public void depMethod1(){        ...        // 自己不能处理的业务逻辑,委托给中介者处理        super.mediator.doSomething();    }}public class ConcreteColleague2 extends Colleague{    //通过构造函数传递中介者    pubic ConcreteColleague2(Mediator _mediator)){        super(_mediator);    }    //自有方法    public void selfMethod2(){        ...    }    // 依赖方法    public void depMethod2(){        ...        // 自己不能处理的业务逻辑,委托给中介者处理        super.mediator.doSomething();    }}

优点

就是减少类间的依赖,把原有的一对多的依赖变成了一对一的依赖,同事类只能依赖中介者,减少了依赖,当然同时也降低了类间的耦合

缺点

中介者会膨胀得很大,而且逻辑复杂,原本N个对象直接的相互依赖关系转换为中介者和同事类的依赖关系,同事类越多,中介者的逻辑就越复杂

使用场景

中介者模式适用于多个对象之间紧密耦合的情况,紧密耦合的标准是:在类图中出现了蜘蛛网结构。在这种情况下一定要考虑使用中介者模式,这有利于把蜘蛛网梳理为星型结构,使原本复杂混乱的关系变得更清晰简单

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 新鲜鸡肉有点臭怎么办 手机屏幕自己乱点怎么办 电脑开机出现f1f2怎么办 普通话证书身份证号有误怎么办 湖南身份证在深圳怎么办 超市快过期东西怎么办 超市打碎了东西怎么办 毕业证与身份证号不符怎么办 家里电路坏了怎么办 深圳户口没房怎么办 深圳租凭合同怎么办 房屋续租水电费怎么办 二手房买到凶宅怎么办 公租房退休之后怎么办 深圳公务员无房怎么办 深圳安居房回执遗失怎么办 社保网注册不了怎么办 深圳怎么办少儿医保卡 少儿没缴纳医保怎么办 上海辞职后社保怎么办 辞职去上学社保怎么办 辞职后异地社保怎么办 个人不想交社保怎么办 离职去异地社保怎么办 离职到外省社保怎么办 辞职去外省社保怎么办 永康光伏补贴怎么办? 找到工作后档案怎么办 夫妻离婚后户口怎么办 异地档案辞职后怎么办 去网吧没有招聘怎么办 建筑工地老板不给钱怎么办 2018高压电工证怎么办 深圳户口怎么办户口卡 在深圳找不到工作怎么办 亲戚户口不迁出怎么办 深圳集体户口准生证怎么办 天津集体户口怎么办准生证 深圳集体户离职户口怎么办 解析包出现错误怎么办 信息登记号没有怎么办