简说中介者模式

设计模式之中介者模式

定义

调停者模式(中介者模式)是软件设计模式的一种,用于模块间解耦,通过避免对象互相显式的指向对方从而降低耦合。—— [ 百度百科 ]

解释说明

在中介者模式中,中介者的存在,主要是为了处理对象与对象之间复杂的关系。如果对象与对象之间的关联关系由自身去维护,那么当对象数量庞大的时候,他们之间的关系势必形成错综复杂的网状结构,这无疑增加了代码的复杂度以及理解上的难度。所以,就需要中介者的出现,讲对象与对象之间的联动关系交由中介者处理,大大的减轻了对象自身的代码复杂度。

代码块
//中介者模式
public class Test {
    //抽象中介者
    abstract class AbstractMediator{
        public People man;
        public People women;
        public void manDo(int age) {
        }
        public void womenDo(int age) {
        }
    }
    //具体实现中介者
    class MediatorA extends AbstractMediator{
        public MediatorA(People man, People women){
            this.man = man;
            this.women = women;
        }
        @Override
        public void manDo(int age) {
            man.setAge(age + 5);
        }
        @Override
        public void womenDo(int age) {
            women.setAge(age - 5);
        }
    }
    //人
    class People{
        public int age;     
        public int getAge() {
            return age;
        }       
        public void setAge(int age) {
            this.age = age;
        }
    }
    //男人
    class Man extends People{
        public void setAge(int age, AbstractMediator mediator) {
            this.age = age;
            mediator.womenDo(age);
        }
    }
    //女人
    class Women extends People{
        public void setAge(int age, AbstractMediator mediator) {
            this.age = age;
            mediator.manDo(age);
        }
    }
    //测试
    public static void main(String[] args) {
        Man man = new Test().new Man();
        Women women = new Test().new Women();
        AbstractMediator mediatorA = new Test().new MediatorA(man, women);
        man.setAge(30, mediatorA);
        System.out.println("男人年龄:" + man.getAge() + "女人年龄:" + women.getAge());
        women.setAge(40, mediatorA);
        System.out.println("男人年龄:" + man.getAge() + "女人年龄:" + women.getAge());
    }
}

: 以上就是中介者模式的完整代码。首先,我们抽象出中介者父类,在其中定义了相互关系的对象,并且声明了对象之间发生变化的时候需要作出反应的方法manDo,womenDo,子类则是实现这两个方法。在上述代码中男人和女人之间的关系是:男人的年龄总是比女人的大5岁,于是当男人年龄变化时,相应的女人的年龄也发生变化,反之亦然。

总结

优点
  1. 降低了类的复杂度,将一对多转化成了一对一。
  2. 各个类之间的解耦。
  3. 符合迪米特原则。
缺点
  1. 中介者会庞大,变得复杂难以维护。
试用场景
  1. 系统中对象之间存在比较复杂的引用关系,导致它们之间的依赖关系结构混乱而且难以复用该对象。
  2. 想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值