中介者模式

中介者模式

定义:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以改变他们之间的交互。比方说,甲和乙沟通交流,甲乙之间是直接交流,但是交流对象并不局限于两者之间,可以扩展为一人与多人对话,如此交互对象类之间则形成强耦合,改善方法则是,新建一个中介者,把交互行为转移到中介者类

UML类图

在这里插入图片描述

使用示例

  • Mediator 抽象中介者

  • DemoMediator 具体中介者

  • User 抽象交互者

  • DemoUser DemoUser1 具体交互者

    中介者设置所有具体交互者为成员变量,从而完成对象之间的交互,交互者也需要设置自己的中介者,需要交互时,可调用中介者完成交互

    package demo;
    
    /**
     * @author 州牧
     * @description
     * @since 2022-04-22 19:21
     */
    public abstract class Mediator {
        public abstract void send(String msg,User user);
    }
    
    package demo;
    
    /**
     * @author 州牧
     * @description
     * @since 2022-04-22 19:25
     */
    public class DemoMediator extends Mediator{
    
        private DemoUser demoUser;
    
        private DemoUser1 demoUser1;
    
        public void setDemoUser(DemoUser demoUser) {
            this.demoUser = demoUser;
        }
    
        public void setDemoUser1(DemoUser1 demoUser1) {
            this.demoUser1 = demoUser1;
        }
    
        @Override
        public void send(String msg, User user) {
            if(user== demoUser){
                demoUser1.notify(msg);
            }else{
                demoUser.notify(msg);
            }
        }
    }
    
    
    
    package demo;
    
    /**
     * @author 州牧
     * @description
     * @since 2022-04-22 19:24
     */
    public abstract class User {
    
        protected Mediator mediator;
    
        public User(Mediator mediator) {
            this.mediator = mediator;
        }
    
    
    }
    
    
    package demo;
    
    /**
     * @author 州牧
     * @description
     * @since 2022-04-22 19:25
     */
    public class DemoUser extends User{
        public DemoUser(Mediator mediator) {
            super(mediator);
        }
    
        public void send(String msg){
            mediator.send("DemoUser1 send:"+ msg,this);
        }
    
        public void notify(String msg){
            System.out.println("DemoUser1 recieve:"+ msg);
        }
    }
    
    
    package demo;
    
    /**
     * @author 州牧
     * @description
     * @since 2022-04-22 19:26
     */
    public class DemoUser1 extends User{
        public DemoUser1(Mediator mediator) {
            super(mediator);
        }
    
        public void send(String msg){
            mediator.send("DemoUser2 send:"+ msg,this);
        }
    
        public void notify(String msg){
            System.out.println("DemoUser2 recieve:"+ msg);
        }
    }
    
    
    package demo;
    
    /**
     * @author 州牧
     * @description
     * @since 2022-04-22 19:33
     */
    public class Client {
        public static void main(String[] args) {
    
            DemoMediator mediator = new DemoMediator();
            DemoUser  user1 = new DemoUser(mediator);
            DemoUser1  user2 = new DemoUser1(mediator);
    
            mediator.setDemoUser(user1);
            mediator.setDemoUser1(user2);
    
            user1.send("什么模式?");
            user2.send("中介者模式");
        }
    }
    
    /*
    DemoUser2 recieve:DemoUser1 send:什么模式?
    DemoUser1 recieve:DemoUser2 send:中介者模式
    */
    

    中介者的优点和缺点

    很明显,中介者是将交互的行为集中了,减少了交互对象之间的耦合。因此可以对交互对象和中介者对象进行独立的改变和复用。但是这同样也是缺点,此模式把交互对象之间的复杂性转移到了中介者,使用时需要考虑。

    中介者模式一般应用于一组对象以定义良好但是以复杂的方式进行通信的场合,以及定制一个分布在多个类的行为,又不想生成太多的子类。GUI编程是个经典的例子。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值