zoukankan      html  css  js  c++  java
  • 中介者模式

    中介者模式(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个人都可以交互--------------");
        }
    
    }
  • 相关阅读:
    希望走过的路成为未来的基石
    第三次个人作业--用例图设计
    第二次结对作业
    第一次结对作业
    第二次个人编程作业
    第一次个人编程作业(更新至2020.02.07)
    Springboot vue 前后分离 跨域 Activiti6 工作流 集成代码生成器 shiro权限
    springcloud 项目源码 微服务 分布式 Activiti6 工作流 vue.js html 跨域 前后分离
    spring cloud springboot 框架源码 activiti工作流 前后分离 集成代码生成器
    java代码生成器 快速开发平台 二次开发 外包项目利器 springmvc SSM后台框架源码
  • 原文地址:https://www.cnblogs.com/ccgjava/p/7168210.html
Copyright © 2011-2022 走看看