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

  • 相关阅读:
    解决在SQLPLUS中无法使用方向键、退格键问题
    Oracle 11g R2手动配置EM(转)
    为什么JDK代码这样写?final ReentrantLock takeLock = this.takeLock
    使用CompletableFuture实现业务服务的异步调用实战代码
    SpringBoot项目从Git拉取代码并完成编译打包启动的sh自动脚本
    SpringBoot项目实现配置实时刷新功能
    (8)Flask微电影项目会员中心其他页面搭建
    (7)Flask微电影之会员中心页面搭建
    (6)Flask项目之会员注册页面
    (5)Flask项目会员登录页
  • 原文地址:https://www.cnblogs.com/itTeacher/p/2805286.html
Copyright © 2011-2022 走看看