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

    模式介绍

    中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。

    模式优点

    1、简化了对象之间的关系,将系统的各个对象之间的相互关系进行封装,将各个同事类解耦,使得系统变为松耦合。
    2、提供系统的灵活性,使得各个同事对象独立而易于复用。

    模式缺点

    1、中介者模式中,中介者角色承担了较多的责任,所以一旦这个中介者对象出现了问题,整个系统将会受到重大的影响。
    2、新增加一个同事类时,不得不去修改抽象中介者类和具体中介者类,此时可以使用观察者模式和状态模式来解决这个问题。

    使用场景

    1、系统中对象之间存在比较复杂的引用关系,导致它们之间的依赖关系结构混乱而且难以复用该对象。
    2、想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。

    系统建模

    1、利用中介者模式,实现市场的买卖交易系统。
    2、系统中涉及市场,买家,卖家。

    系统实现

    /**
     * 交易者抽象类
     */
    public abstract class Participant {
        protected Mediary mediary;
    
        void sendMessage(String message) {}
    }
    
    /**
     * 卖方
     */
    public class Solder extends Participant {
        public Solder(Mediary mediary) {
            this.mediary = mediary;
        }
    
        @Override
        void sendMessage(String message) {
            super.sendMessage(message);
            this.mediary.sendMessage(message,this);
        }
    }
    
    /**
     * 买方
     */
    public class Buyer extends Participant {
        public Buyer(Mediary mediary) {
            this.mediary = mediary;
        }
    
        @Override
        void sendMessage(String message) {
            super.sendMessage(message);
            this.mediary.sendMessage(message,this);
        }
    }
    
    /**
     * 中介者抽象类
     */
    public abstract class Mediary {
        void sendMessage(String message,Participant participant) {}
    }
    
    /**
     * 中介者类
     */
    public class Market extends Mediary {
        private Participant buyer;
        private Participant solder;
    
        public void setBuyer(Participant buyer) {
            this.buyer = buyer;
        }
    
        public void setSolder(Participant solder) {
            this.solder = solder;
        }
    
        @Override
        void sendMessage(String message,Participant participant) {
            super.sendMessage(message,participant);
            if (participant == buyer) {
                System.out.println("卖家:" + message);
            } else {
                System.out.println("买家:" + message);
            }
        }
    }
    
    /**
     * 客户端
     */
    public class Client{
        public static void main(String[] args) {
            Market market = new Market();
            Solder solder = new Solder(market);
            Buyer buyer = new Buyer(market);
            market.setBuyer(buyer);
            market.setSolder(solder);
            solder.sendMessage("大哥,要盘吗?");
            buyer.sendMessage("滚!");
        }
    }
    结果:
    买家:大哥,要盘吗?
    卖家:滚!
    
  • 相关阅读:
    T- SQL性能优化详解
    C# 路径
    sql2000无法打开1433端口及解决方法
    MySQL:创建、修改和删除表
    mysql 授权 打开全部
    Mvc多级Views目录 asp.net mvc4 路由重写及 修改view 的寻找视图的规则
    asp.net 捕获全局未处理异常的几种方法
    无线路由器WDS设置方法图解_无线桥接设置
    100个直接可以拿来用的JavaScript实用功能代码片段
    ocx控件针对网页刷新和关闭分别进行区分处理
  • 原文地址:https://www.cnblogs.com/feiqiangsheng/p/12239962.html
Copyright © 2011-2022 走看看