• 中介者模式


    中介者模式(Mediator),用一个中介对象来封装一系列的对象交互。中介对象使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

    Mediator类

    package mediator;
    /**
     * 抽象中介者类
     * 原来是同事A、B、C、D之间直接发送消息的
     * 现在模式是:同事A、B、C、D不直接交互,而是通过中介者来传递消息
     * 所以抽象中介者要在方法中表明是谁发出消息,由谁来接受消息
     * @author 煞笔
     *
     */
    public abstract class Mediator {
        //方法中指出那个同事是发出消息的,那位同事来接受消息
        public abstract void send(String message, Colleague send_colleague,Colleague accept_colleague);
    }

    ConcreteMediator类

    package mediator;
    /**
     * 具体中介者类
     * 中介者要在方法中表明是谁发出消息,由谁来接受消息
     * @author 煞笔
     *
     */
    public class ConcreteMediator extends Mediator {
        @Override                                                
        public void send(String message, Colleague send_colleague,Colleague accept_colleague) {
            //接受者收到发送者发出的消息
            accept_colleague.accept(message,send_colleague);
        }
    }

    Colleague类

    package mediator;
    /**
     * 抽象同事类
     * 同事A、B、C、D不直接交互,而是通过中介者来传递消息
     * 要达到这种效果,同事们都需要认识中介者
     * 每位同事都具有发出消息,接收消息的功能
     * @author 煞笔
     *
     */
    public abstract class Colleague {
        protected Mediator mediator;//认识中介者
        private String name;
    
        public Colleague(Mediator mediator,String name) {
            this.mediator = mediator;
            this.name = name;
        }
        
        public String getName() {
            return name;
        }
    
    
        public void setName(String name) {
            this.name = name;
        }
    
        /**
         * 发送消息给接受同事
         * @param message
         * @param colleague
         */
        public abstract void send(String message,Colleague accept_colleague);
        
        /**
         * 从发出消息的同事那里接收到消息
         * @param message
         * @param from_colleague
         */
        public abstract void accept(String message,Colleague send_colleague);
    }

    ConcreateColleagueA类

    package mediator;
    
    public class ConcreateColleagueA extends Colleague {
    
    
        public ConcreateColleagueA(Mediator mediator, String name) {
            super(mediator, name);
        }
    
        @Override
        public void send(String message,Colleague accept_colleague) {
            System.out.println(message);
            mediator.send(message, this,accept_colleague);
        }
    
        @Override
        public void accept(String message,Colleague send_colleague) {
            System.out.println("接受者A收到信息了,消息来自"+send_colleague.getName());
        }
    
    }

    ConcreateColleagueB类

    package mediator;
    
    public class ConcreateColleagueB extends Colleague {
    
    
        public ConcreateColleagueB(Mediator mediator, String name) {
            super(mediator, name);
        }
    
        @Override
        public void send(String message,Colleague accept_colleague) {
            System.out.println(message);
            mediator.send(message, this,accept_colleague);
        }
    
        @Override
        public void accept(String message,Colleague send_colleague) {
            System.out.println("接受者B收到信息了,消息来自"+send_colleague.getName());
        }
    
    }

    ConcreateColleagueC类

    package mediator;
    
    public class ConcreateColleagueC extends Colleague {
    
    
        public ConcreateColleagueC(Mediator mediator, String name) {
            super(mediator, name);
        }
    
        @Override
        public void send(String message,Colleague accept_colleague) {
            System.out.println(message);
            mediator.send(message, this,accept_colleague);
        }
    
        @Override
        public void accept(String message,Colleague send_colleague) {
            System.out.println("接受者C收到信息了,消息来自"+send_colleague.getName());
        }
    
    }

    ConcreateColleagueD类

    package mediator;
    
    public class ConcreateColleagueD extends Colleague {
    
    
        public ConcreateColleagueD(Mediator mediator, String name) {
            super(mediator, name);
        }
    
        @Override
        public void send(String message,Colleague accept_colleague) {
            System.out.println(message);
            mediator.send(message, this,accept_colleague);
        }
    
        @Override
        public void accept(String message,Colleague send_colleague) {
            System.out.println("接受者D收到信息了,消息来自"+send_colleague.getName());
        }
    
    }

    Business类

    package mediator;
    
    public class Business {
    
        public static void main(String[] args) {
            ConcreteMediator mediator = new ConcreteMediator();
            Colleague colleagueA = new ConcreateColleagueA(mediator,"A");
            Colleague colleagueB = new ConcreateColleagueB(mediator,"B");
            Colleague colleagueC = new ConcreateColleagueC(mediator,"C");
            Colleague colleagueD = new ConcreateColleagueD(mediator,"D");
            colleagueA.send("我是A,讲个美人鱼故事,B接受的到了吗",colleagueB);
            System.out.println("---------1个发送接受过程结束--------------");
            colleagueB.send("我是B,早上路上较堵,注意安全,A接受的到了吗",colleagueA);
            System.out.println("---------2个发送接受过程结束--------------");
            colleagueC.send("我是C,我有话对说,B接受的到了吗",colleagueB);
            System.out.println("---------3个发送接受过程结束--------------");
            colleagueD.send("我是D,周末出去玩吗,A接受的到了吗",colleagueA);
            System.out.println("---------4个发送接受过程结束--------------");
            colleagueA.send("我是A,讲个美人鱼故事,C接受的到了吗",colleagueC);
            System.out.println("---------5个发送接受过程结束--------------");
            colleagueB.send("我是B,早上路上较堵,注意安全,D接受的到了吗",colleagueD);
            System.out.println("---------6个发送接受过程结束,后面还有很多组合,4个人,随意其中2个人都可以交互--------------");
        }
    
    }
  • 相关阅读:
    牛客练习赛83题解
    1525 F. Goblins And Gnomes (最小顶点覆盖输出方案)
    hash表
    欧拉回路输出方案
    dp优化
    1
    fwt原理学习和一些拓展
    SpringBoot在IDEA中的配置
    ES: memory locking requested for elasticsearch process but memory is not locked
    Prometheus监控大数据
  • 原文地址:https://www.cnblogs.com/ccgjava/p/7168210.html
Copyright © 2020-2023  润新知