zoukankan      html  css  js  c++  java
  • [一天一个设计模式]-[中介者模式]

    中介者模式(Mediator Pattern)定义:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式,它是一种对象行为型模式。

    与代理模式的区别,代理模式主要是代理某一类对象,中介模式是中介了一组对象,代理模式主要是控制真实对象的访问,中介模式主要是将调用者和被调用者解耦

    中介者模式包含以下主要角色。

    1. 抽象中介者(Mediator)角色:它是中介者的接口,提供了同事对象注册与转发同事对象信息的抽象方法。
    2. 具体中介者(ConcreteMediator)角色:实现中介者接口,定义一个 List 来管理同事对象,协调各个同事角色之间的交互关系,因此它依赖于同事角色。
    3. 抽象同事类(Colleague)角色:定义同事类的接口,保存中介者对象,提供同事对象交互的抽象方法,实现所有相互影响的同事类的公共功能。
    4. 具体同事类(Concrete Colleague)角色:是抽象同事类的实现者,当需要与其他同事对象交互时,由中介者对象负责后续的交互。

    举个栗子,qq群聊,qq就相当于中介者,群成员就是同事类

    
    interface QqMediator{
        void register(User user);
        void showMessage(User user,String msg);
    }
    
    class QqMediatorImpl implements QqMediator{
        
        List<User> users = new ArrayList<>();
        
        @Override
        public void register(User user){
            users.add(user);
            user.setMediator(this);
        }
        
        @Override
        public void showMessage(User user,String msg){
            sout(user.getName()+":"+msg);
        }
    }
    
    interface User{
        
        String getName();
        void setMediator(QqMediator mediator);
        void send(String msg);
    }
    
    class UserA implements User{
        String name="A";
        QqMediator mediator;
        
        @Override
        public String getName(){
            return this.name;
        }
        
        @Override
        public void setMediator(QqMediator mediator){
            this.mediator = mediator;
        }
        
        @Override
        public void send(String msg){
            mediator.showMessage(this,msg);
        }
    }
    
    class UserB implements User{
        String name="B";
        QqMediator mediator;
        
        @Override
        public String getName(){
            return this.name;
        }
        
        @Override
        public void setMediator(QqMediator mediator){
            this.mediator = mediator;
        }
        
        @Override
        public void send(String msg){
            mediator.showMessage(this,msg);
        }
    }
    
    
    
    main(){
        QqMediator mediator=new QqMediatorImpl();
        User a = new UserA();
        User b = new UserB();
        
        mediator.register(a);
        mediator.register(b);
        
        a.send("I'm A");
        
        b.send("I'm B");
        
        
    }
    
  • 相关阅读:
    python3写的exe小工具的准备事项
    信息网站罗列
    you-get下载视频
    sprintboot入门
    linux 常用指令nfs,根据时间删除文件,路由router
    ubuntu下adsl拨号设置
    Hadoop的Archive归档命令使用指南
    MVC5 + EF6 完整入门教程三:EF来了
    MVC5 + EF6 入门完整教程二:从前端的UI开始
    MVC5 + EF6 入门完整教程一:从0开始
  • 原文地址:https://www.cnblogs.com/A-yes/p/12026930.html
Copyright © 2011-2022 走看看