zoukankan      html  css  js  c++  java
  • Java设计模式十二: 中介者模式(Mediator Pattern)

    中介者模式是行为模式之一。定义一个中介对象来封装系列对象之间的交互。中介者使各个对象不需要显示地相互引用,从而使其耦合性松散

    ,而且可以独立地改变他们之间的交互。

    类图:



    实例:生产者、消费者、代理商
    public abstract class PersonColleague
    {
        protected Mediator mediator;

        public Mediator getMediator()
        {
            return mediator;
        }

        public void setMediator(final Mediator mediator)
        {
            this.mediator = mediator;
        }

        protected abstract void message(String context);

    }

    public class Mediator
    {
        private PersonColleague consumer = null;
        private ProducerColleague producer = null;

        public ProducerColleague getProducer()
        {
            return producer;
        }

        public void setProducer(final ProducerColleague producer)
        {
            this.producer = producer;
        }

        public PersonColleague getConsumer()
        {
            return consumer;
        }

        public void setConsumer(final PersonColleague consumer)
        {
            this.consumer = consumer;
        }

        public Mediator()
        {
        }

        public synchronized void message(final String context)
        {
            if (consumer != null)
            {
                System.out.println(context);
            }
            else if (producer != null)
            {
                System.out.println(context);
            }
        }
    }

    public class ConsumerColleague extends PersonColleague
    {
        public ConsumerColleague(final Mediator mediator)
        {
            this.mediator = mediator;
        }

        @Override
        protected void message(final String context)
        {
            this.mediator.setConsumer(this);
            this.mediator.message("hello! i am a consumer");
        }
    }

    public class ProducerColleague extends PersonColleague
    {
        public ProducerColleague(final Mediator mediator)
        {
            this.mediator = mediator;
        }

        @Override
        protected void message(final String context)
        {
            this.mediator.setProducer(this);
            this.mediator.message(context);
        }
    }

    public class Client
    {
        public static void main(final String[] args)
        {
            final Mediator mediator = new Mediator();
            final PersonColleague person = new ConsumerColleague(mediator);
            final PersonColleague person1 = new ProducerColleague(mediator);

            person.message("I am a consumer");
            person1.message("I am a producer");
        }
    }

    结果:
    hello! i am a consumer
    I am a producer

  • 相关阅读:
    php 7.1 openssl_decrypt() 代替 mcrypt_module_open() 方法
    关于Http_build_query的用法
    git fetch 和git pull 的差别
    PhpStorm 头部注释、类注释和函数注释的设置
    输出信息log4j.properties的作用与使用方法
    字段设置ALV中下拉列表列的实现
    遍历中序C语言实现二叉树的递归遍历与非递归遍历
    搜索中文Solr Analysis And Solr Query Solr分析以及查询
    记忆指向指针常量 常量指针 常量指针常量
    匹配位置KMP算法深入浅出
  • 原文地址:https://www.cnblogs.com/itTeacher/p/2805286.html
Copyright © 2011-2022 走看看