`

3. 行为型模式 (10) 中介者模式

阅读更多
3. 行为型模式 (10) 中介者模式

中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。

提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。

优点:
1. 降低了类的复杂度,将一对多转化成了一对一。
2. 各个类之间的解耦。
3. 符合迪米特原则。

缺点:
1. 中介者会庞大,变得复杂难以维护。


1. 中介者模式

package com.andrew.pattern0310.mediator.model01;
import java.util.Date;
public class ChatRoom {
    public static void showMessage(User user, String message) {
        System.out.println(new Date().toString() + " [" + user.getName() +"] : " + message);
    }
}


package com.andrew.pattern0310.mediator.model01;
public class User {
    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public User(String name) {
        this.name  = name;
    }
    public void sendMessage(String message) {
        ChatRoom.showMessage(this,message);
    }
}


package com.andrew.pattern0310.mediator.model01;
/**
 * 1. 中介者模式
 * 
 * @author andrew
 * @date 2018/11/08
 */
public class Client {
    public static void main(String[] args) {
        User robert = new User("Robert");
        User john = new User("John");
        robert.sendMessage("Hi! John!");
        john.sendMessage("Hello! Robert!");
    }
}
运行结果:
Thu Nov 08 09:14:09 CST 2018 [Robert] : Hi! John!
Thu Nov 08 09:14:09 CST 2018 [John] : Hello! Robert!


角色:
1. 抽象中介者:定义好同事类对象到中介者对象的接口,用于各个同事类之间的通信。一般包括一个或几个抽象的事件方法,并由子类去实现。
2. 中介者实现类:从抽象中介者继承而来,实现抽象中介者中定义的事件方法。从一个同事类接收消息,然后通过消息影响其他同时类。
3. 同事类:如果一个对象会影响其他的对象,同时也会被其他对象影响,那么这两个对象称为同事类。在类图中,同事类只有一个,这其实是现实的省略,在实际应用中,同事类一般由多个组成,他们之间相互影响,相互依赖。同事类越多,关系越复杂。并且,同事类也可以表现为继承了同一个抽象类的一组实现组成。在中介者模式中,同事类之间必须通过中介者才能进行消息传递。


2. 中介者模式

package com.andrew.pattern0310.mediator.model02;
public abstract class AbstractColleague {
    protected int number;
    public int getNumber() {
        return number;
    }
    public void setNumber(int number) {
        this.number = number;
    }
    public abstract void setNumber(int number, AbstractMediator am);
}

package com.andrew.pattern0310.mediator.model02;
public class ColleagueA extends AbstractColleague {
    public void setNumber(int number, AbstractMediator am) {
        this.number = number;
        am.AaffectB();
    }
}

package com.andrew.pattern0310.mediator.model02;
public class ColleagueB extends AbstractColleague {
    public void setNumber(int number, AbstractMediator am) {
        this.number = number;
        am.BaffectA();
    }
}


package com.andrew.pattern0310.mediator.model02;
public abstract class AbstractMediator {
    protected AbstractColleague A;
    protected AbstractColleague B;
    public AbstractMediator(AbstractColleague a, AbstractColleague b) {
        A = a;
        B = b;
    }
    public abstract void AaffectB();
    public abstract void BaffectA();
}


package com.andrew.pattern0310.mediator.model02;
public class Mediator extends AbstractMediator {
    public Mediator(AbstractColleague a, AbstractColleague b) {
        super(a, b);
    }
    @Override
    public void AaffectB() {
        int number = A.getNumber();
        B.setNumber(number*100);
    }
    @Override
    public void BaffectA() {
        int number = B.getNumber();
        A.setNumber(number/100);
    }
}


package com.andrew.pattern0310.mediator.model02;
/**
 * 2. 中介者模式
 * 
 * @author andrew
 * @date 2018/11/08
 */
public class Client {
    public static void main(String[] args) {
        AbstractColleague collA = new ColleagueA();
        AbstractColleague collB = new ColleagueB();
        AbstractMediator am = new Mediator(collA, collB);
        System.out.println("==========通过设置A影响B==========");
        collA.setNumber(1000, am);
        System.out.println("collA的number值为:"+collA.getNumber());
        System.out.println("collB的number值为A的10倍:"+collB.getNumber());
        System.out.println("==========通过设置B影响A==========");
        collB.setNumber(1000, am);
        System.out.println("collB的number值为:"+collB.getNumber());
        System.out.println("collA的number值为B的0.1倍:"+collA.getNumber());
    }
}
运行结果:
==========通过设置A影响B==========
collA的number值为:1000
collB的number值为A的10倍:100000
==========通过设置B影响A==========
collB的number值为:1000
collA的number值为B的0.1倍:10
分享到:
评论

相关推荐

    (行为型模式) Mediator 中介者模式

    C#面向对象设计模式 (行为型模式) Mediator 中介者模式 视频讲座下载

    JAVA-设计模式-行为型模式-中介者模式

    JAVA-设计模式-行为型模式-中介者模式

    [行为型模式] 中介者模式的理解

    中介者模式是一种行为设计模式,它用于减少多个对象之间的复杂交互,将这些对象间的相互依赖关系解耦,使得对象之间通过中介者进行通信。在软件工程中,当类的数量因为复杂的交互关系而增加时,中介者模式可以提供一...

    c++设计模式-行为型模式-中介者模式

    c++设计模式-行为型模式-中介者模式;qt工程;c++简单源码; 中介者(Mediator)模式的定义:定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式...

    java 23种设计模式.zip

    设计模式主要分为三大类: 1.创建型模式:工厂模式、抽象...4.行为型模式:模板方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。

    C#面向对象设计模式纵横谈(17):(行为型模式) Mediator 中介者模式

    标题和描述均提到了"C#面向对象设计模式纵横谈(17):(行为型模式) Mediator 中介者模式",这明确指向了一个特定的设计模式——中介者模式(Mediator Pattern),并且是在C#语言环境下的应用。下面将详细阐述这一设计...

    设计模式_行为型_中介者模式.md

    中介者模式(Mediator)是一种行为型设计模式,其核心思想在于通过引入一个中介者对象来封装一系列对象间的交互关系。在软件工程中,这种模式主要用于减少类之间复杂的直接通信,从而降低系统间的耦合性,提高可维护...

    23种设计模式 (创建型,结构型,行为型)

    中介者模式(Mediator Pattern) 19. 职责链模式(Chain of Responsibility Pattern) 20. 备忘录模式(Memento Pattern) 21. 策略模式(Strategy Pattern) 22. 访问者模式(Visitor Pattern) 23. 状态模式...

    23种设计模式,创建型模式共5种,结构型模式7种,行为型模式11种

    设计模式分为三大类:创建型模式、结构型模式和行为型模式。 **创建型模式**关注的是对象的创建。共有五种创建型模式: 1. **工厂方法模式**:它定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法...

    设计模式 - 中介者模式

    中介者模式是一种行为设计模式,它用于减少多个对象之间的复杂交互,将这些对象通过一个共同的对象——中介者联系起来,使得各对象之间不再直接引用,而是通过中介者进行通信。这种模式降低了对象间的耦合度,提高了...

    设计模式之中介者模式(Mediator Pattern)

    中介者模式是行为设计模式之一,其主要目的是降低多个对象之间的复杂性,通过引入一个中介对象来协调这些对象的交互。这种模式有助于减少对象之间的耦合,使得各个对象可以独立地进行修改和扩展。 **概念理解** 1....

    C#面向对象设计模式纵横谈(17):(行为型模式) Mediator 中介者模式 (Level 300)

    **中介者模式(Mediator Pattern)**是一种行为设计模式,其主要目的是降低多个对象之间的通信复杂性,将这些对象的直接交互转化为与一个中心对象——中介者的交互。在C#中,中介者模式的应用能够有效地减少类之间的...

    java常用设计模式-中介者模式

    中介者模式(Mediator Pattern)是一种行为设计模式,它允许对象之间通过中介者对象进行通信,从而避免对象之间的直接耦合。中介者模式将对象之间的复杂关系转化为中介者和对象之间的简单关系,从而提高了系统的灵活...

    Java 23种设计模式21中介者模式.pdf

    3. **Colleague(抽象同事类)**:定义同事对象的行为,同事对象必须知道中介者对象,以便将消息发送给中介者而非直接发送给其他同事。 4. **Concrete Colleague(具体同事类)**:实现抽象同事类接口,具体同事类...

    中介者模式逻辑关系

    中介者模式是一种设计模式,它的主要目的是降低对象之间的耦合度,使得对象之间的交互更加清晰。在实际的应用中,当多个对象需要频繁交互且关系复杂时,直接的相互依赖会导致系统结构变得难以理解和维护。中介者模式...

    中介者模式demo

    中介者模式是一种设计模式,它在软件工程中用于降低多个对象之间的复杂交互。在iOS开发中,当多个视图控制器或其他组件之间存在复杂的通信关系时,中介者模式可以帮助我们简化这种关系,避免对象间的直接耦合。这个...

    java设计模式之中介者模式

    中介者模式是一种行为设计模式,它用于简化多个对象之间的交互,通过引入一个中介对象来解耦原本直接相互作用的对象。在Java编程中,这种模式尤其有用,因为它可以帮助我们减少类之间的耦合,提高代码的可读性和可...

    c#设计模式 行为型模式 实验报告+源代码

    c#设计模式 行为型模式 包括8个设计模式的实验报告+源代码。实验报告包括实验类图和个人总结的一些小技巧,源代码...包括:职责链模式、命令模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式

Global site tag (gtag.js) - Google Analytics