打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
无废话设计模式(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、当一个对象需要引用很多其他对象并与这些对象通讯时;

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
JPA事务总结
JAVA语言中的反射机制
Nhibernate入门 - dinghao - 博客园
Hibernate实体规则、对象状态、session缓存、事务
JPA对数据库常用操作方法
高级框架-springDate-JPA 第二天【悟空教程】
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服