• 无废话设计模式(17)行为型模式--中介者模式


    0-前言

      中介者模式定义(Mediator):

             用一个中介对象来封装一系列的对象交互。

             中介者对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。

    1-实现

    1-1、简单UML图

    1-2、代码实现

    //1、中介者抽象父类(客服父类)-----------------------------------------
    abstract class CustomerServer
    {
        abstract void Communicate(String message,Communicator communicator);
    }
    //1-1、具体中介者(客服MM)
    class CustomerServerMM extends CustomerServer
    {
        //A、设置客服服务的对象
        private Customer customer;
        private Technician technician;
    
        public void setCustomer(Customer _customer)
        {
            this.customer = _customer;
        }
    
        public void setTechnician(Technician _technician)
        {
            this.technician = _technician;
        }
    
        //B、客服开始沟通
        @Override
       public void Communicate(String message, Communicator communicator)
        {
            if (communicator ==customer) //顾客
            {
                technician.GetMessage(message);
            }
            else
            {
                customer.GetMessage(message);
            }
        }
    }
    
    //2、服务对象抽象父类-------------------------------------------------
    abstract  class Communicator
    {
        protected  CustomerServer customerServer; //中介者
        public Communicator(CustomerServer _customerServer)
        {
            this.customerServer = _customerServer;
        }
    }
    
    //2-1、服务对象具体类(顾客)
    class Customer extends Communicator
    {
        public Customer(CustomerServer customerServer)
        {
            super(customerServer);
        }
    
        //A、咨询
        public  void Ask(String message)
        {
            customerServer.Communicate(message,this);
        }
    
        //B、获得回复
        public void  GetMessage(String message)
        {
            System.out.println("顾客得到技术人员的回复:"+message);
        }
    }
    
    //2-2、服务对象具体类(维修技术人员)
    class Technician extends Communicator
    {
        public Technician(CustomerServer customerServer)
        {
            super(customerServer);
        }
    
        //A、回复
        public  void Anser(String message)
        {
            customerServer.Communicate(message,this);
        }
    
        //B、获得问题
        public void  GetMessage(String message)
        {
            System.out.println("技术人员接收到顾客的问题:"+message);
        }

    客户端

            CustomerServerMM csMM = new CustomerServerMM();
    
            Customer customer = new Customer(csMM);
            Technician technician = new Technician(csMM);
    
            csMM.setCustomer(customer);
            csMM.setTechnician(technician);
    
            customer.Ask("为什么我的电脑开不了机");
            technician.Anser("电池没插电源没插,开啥机!");

    运行结果

    2-应用场景简单总结

    1、当一组对象以定义良好但是复杂的方式进行相互通讯时;

    2、当一个对象需要引用很多其他对象并与这些对象通讯时;

  • 相关阅读:
    怎样的配色能让你的作品高端!上档次呢?
    响应式布局的9项基本原则
    SOHO设计师如何保障自己的权益
    加载动态设计--等待的艺术创作思维
    初学者所必备的设计类网站
    网页设计师该向印刷设计学习的3个规则
    [并发编程] -- 内存模型(针对JSR-133内存模型)篇
    [并发编程] -- 线程池篇
    [并发编程] -- 容器和框架篇
    [并发编程] -- 工具类篇
  • 原文地址:https://www.cnblogs.com/yanghj/p/13450978.html
Copyright © 2020-2023  润新知