• Java设计模式之代表模式


    代表模式(Mediator Pattern)是一种行为型设计模式,它通过封装一组对象之间的交互方式,使得这些对象之间的通信变得松散耦合,从而降低了对象之间的直接依赖关系。代表模式通过引入一个中介者(Mediator)对象,将对象之间的通信集中处理,从而减少了对象之间的相互依赖,使得系统更加灵活和可扩展。

    在代表模式中,中介者对象充当了对象之间的调度者和协调者的角色,它封装了对象之间的通信逻辑,负责接收和发送消息,并将消息传递给相关的对象。对象之间不再直接相互引用,而是通过中介者对象进行通信,从而达到松散耦合的效果。

    以下是一个示例,展示了代表模式的应用场景和代码实现:

    // 中介者接口
    interface Mediator {
        void sendMessage(String message, Colleague colleague);
    }
    
    // 具体中介者
    class ConcreteMediator implements Mediator {
        private Colleague colleague1;
        private Colleague colleague2;
    
        public void setColleague1(Colleague colleague1) {
            this.colleague1 = colleague1;
        }
    
        public void setColleague2(Colleague colleague2) {
            this.colleague2 = colleague2;
        }
    
        @Override
        public void sendMessage(String message, Colleague colleague) {
            if (colleague == colleague1) {
                colleague2.receiveMessage(message);
            } else if (colleague == colleague2) {
                colleague1.receiveMessage(message);
            }
        }
    }
    
    // 抽象同事类
    abstract class Colleague {
        protected Mediator mediator;
    
        public Colleague(Mediator mediator) {
            this.mediator = mediator;
        }
    
        public abstract void send(String message);
    
        public abstract void receiveMessage(String message);
    }
    
    // 具体同事类
    class ConcreteColleague1 extends Colleague {
        public ConcreteColleague1(Mediator mediator) {
            super(mediator);
        }
    
        @Override
        public void send(String message) {
            mediator.sendMessage(message, this);
        }
    
        @Override
        public void receiveMessage(String message) {
            System.out.println("ConcreteColleague1 received message: " + message);
        }
    }
    
    // 具体同事类
    class ConcreteColleague2 extends Colleague {
        public ConcreteColleague2(Mediator mediator) {
            super(mediator);
        }
    
        @Override
        public void send(String message) {
            mediator.sendMessage(message, this);
        }
    
        @Override
        public void receiveMessage(String message) {
            System.out.println("ConcreteColleague2 received message: " + message);
        }
    }
    
    // 测试代码
    public class MediatorPatternExample {
        public static void main(String[] args) {
            ConcreteMediator mediator = new ConcreteMediator();
    
            ConcreteColleague1 colleague1 = new ConcreteColleague1(mediator);
            ConcreteColleague2 colleague2 = new ConcreteColleague2(mediator);
    
            mediator.setColleague1(colleague1);
            mediator.setColleague2(colleague2);
    
            colleague1.send("Hello from colleague1!");
            colleague2.send("Hi from colleague2!");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90

    在上面的示例中,Mediator 接口定义了中介者的操作,ConcreteMediator 是具体的中介者实现。Colleague 是抽象同事类,ConcreteColleague1ConcreteColleague2 是具体的同事类实现。

    MediatorPatternExample 类中,我们创建了一个中介者对象 ConcreteMediator,并创建了两个同事对象 ConcreteColleague1ConcreteColleague2。然后,通过调用 setColleague1setColleague2 方法将同事对象注册到中介者中。

    最后,我们通过调用同事对象的 send 方法发送消息,消息会经过中介者进行转发,最终到达目标同事对象,从而实现了对象之间的通信。

    推荐一个ChatGPT使用渠道:点击直达
  • 相关阅读:
    【C语言】字符串左旋
    docker入门配置
    如何使用 WPF 应用程序连接 FastReport报表
    Java 开发常用的 Linux 命令
    意外发现腾讯T4手码《SpringMVC源码解析》,如获至宝,果断收藏
    C++智能指针之weak_ptr
    【MAVEN依赖冲突如何解决】
    使用VS Code 进行.NET 开发
    【Qt】QTextEdit/QPlainTextEdit 实现 Tab 键多行缩进与反缩进
    Android 设置系统的时间
  • 原文地址:https://blog.csdn.net/kkwyting/article/details/133875634