zoukankan      html  css  js  c++  java
  • 无废话设计模式(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、当一个对象需要引用很多其他对象并与这些对象通讯时;

  • 相关阅读:
    "less is more",用"less”命令查看linux文本文件
    Linux命令"ls"进阶说明
    Linux文件权限说明
    Ubuntu14.04安装Ruby2.2方法
    Ubuntu查找软件命令
    Using If/Truth Statements with pandas
    Categorical Data
    DataFrame.loc的区间
    pandas学习(一)
    JDBC编程之事务处理
  • 原文地址:https://www.cnblogs.com/yanghj/p/13450978.html
Copyright © 2011-2022 走看看