Dahua Design Pattern - Intermediary

5. Mediator

Intent

Centralize complex communication and control methods between related objects.

Class Diagram

  • Mediator: Mediator, defines an interface for communicating with each colleague (Colleague) object.
  • Colleague: colleagues, related objects

Implementation

Alarm (alarm clock), CoffeePot (coffee pot), Calendar (calendar), and Sprinkler (sprinkler) are a group of related objects. When an event of an object occurs, other objects need to be operated, forming the following dependency structure:


Use the mediator pattern to turn complex dependency structures into a star structure:


public abstract class Colleague {
    
    
    public abstract void onEvent(Mediator mediator);
}
public class Alarm extends Colleague {
    
    

    @Override
    public void onEvent(Mediator mediator) {
    
    
        mediator.doEvent("alarm");
    }

    public void doAlarm() {
    
    
        System.out.println("doAlarm()");
    }
}
public class CoffeePot extends Colleague {
    
    
    @Override
    public void onEvent(Mediator mediator) {
    
    
        mediator.doEvent("coffeePot");
    }

    public void doCoffeePot() {
    
    
        System.out.println("doCoffeePot()");
    }
}
public class Calender extends Colleague {
    
    
    @Override
    public void onEvent(Mediator mediator) {
    
    
        mediator.doEvent("calender");
    }

    public void doCalender() {
    
    
        System.out.println("doCalender()");
    }
}
public class Sprinkler extends Colleague {
    
    
    @Override
    public void onEvent(Mediator mediator) {
    
    
        mediator.doEvent("sprinkler");
    }

    public void doSprinkler() {
    
    
        System.out.println("doSprinkler()");
    }
}
public abstract class Mediator {
    
    
    public abstract void doEvent(String eventType);
}
public class ConcreteMediator extends Mediator {
    
    
    private Alarm alarm;
    private CoffeePot coffeePot;
    private Calender calender;
    private Sprinkler sprinkler;

    public ConcreteMediator(Alarm alarm, CoffeePot coffeePot, Calender calender, Sprinkler sprinkler) {
    
    
        this.alarm = alarm;
        this.coffeePot = coffeePot;
        this.calender = calender;
        this.sprinkler = sprinkler;
    }

    @Override
    public void doEvent(String eventType) {
    
    
        switch (eventType) {
    
    
            case "alarm":
                doAlarmEvent();
                break;
            case "coffeePot":
                doCoffeePotEvent();
                break;
            case "calender":
                doCalenderEvent();
                break;
            default:
                doSprinklerEvent();
        }
    }

    public void doAlarmEvent() {
    
    
        alarm.doAlarm();
        coffeePot.doCoffeePot();
        calender.doCalender();
        sprinkler.doSprinkler();
    }

    public void doCoffeePotEvent() {
    
    
        // ...
    }

    public void doCalenderEvent() {
    
    
        // ...
    }

    public void doSprinklerEvent() {
    
    
        // ...
    }
}
public class Client {
    
    
    public static void main(String[] args) {
    
    
        Alarm alarm = new Alarm();
        CoffeePot coffeePot = new CoffeePot();
        Calender calender = new Calender();
        Sprinkler sprinkler = new Sprinkler();
        Mediator mediator = new ConcreteMediator(alarm, coffeePot, calender, sprinkler);
        // 闹钟事件到达,调用中介者就可以操作相关对象
        alarm.onEvent(mediator);
    }
}
doAlarm()
doCoffeePot()
doCalender()
doSprinkler()

JDK

Guess you like

Origin blog.csdn.net/weixin_42917352/article/details/131227634