• 中介者模式


    模式介绍

    中介者模式(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("滚!");
        }
    }
    结果:
    买家:大哥,要盘吗?
    卖家:滚!
    
  • 相关阅读:
    教你用笔记本破解无线路由器password
    EJB究竟是什么,真的那么神奇吗??
    Hibernate的介绍
    编程基本功训练:流程图画法及练习
    一年成为Emacs高手(像神一样使用编辑器)
    MfC 进度条控件
    最小生成树(普利姆算法、克鲁斯卡尔算法)
    创建与删除索引
    hdu 4876 ZCC loves cards(暴力)
    springMVC3学习(二)--ModelAndView对象
  • 原文地址:https://www.cnblogs.com/feiqiangsheng/p/12239962.html
Copyright © 2020-2023  润新知