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

    定义(并非来自百度百科,百度没收录此词条...):
           用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
    中介者模式又称为调停者模式,它是一种对象行为型模式。

    UML类图:

    具体代码:

    abstract public class Mediator {
        protected ArrayList<Colleague> colleagues;
    
        public void register(Colleague colleague) {
            colleagues.add(colleague);
        }
    
        public abstract void operation();
    }
    
    public class ConcreteMediator extends Mediator {
        @Override
        public void operation() {
            System.out.println("123");
            ((Colleague)(colleagues.get(0))).method1();
        }
    }
    
    abstract public class Colleague {
        protected Mediator mediator;
    
        public Colleague(Mediator mediator) {
            this.mediator=mediator;
        }
    
        public abstract void method1();
    
        public void method2() {
            mediator.operation();
        }
    }
    
    public class ConcreteColleague extends Colleague {
        public ConcreteColleague(Mediator mediator) {
            super(mediator);
        }
    
        @Override
        public void method1() {
    
        }
    }

    模块说明:
    Mediator:该接口用于与各同事对象之间进行通信
    ConcreteMediator:抽象中介者的子类,通过协调各个同事对象来实现协作行为,它维持了对各个同事对象的引用
    Colleague:定义各个同事类公有的方法,并声明了一些抽象方法来供子类实现,同时它维持了一个对抽象中介者类的引用,其子类可以通过该引用来与中介者通信
    ConcreteColleague:它是抽象同事类的子类;每一个同事对象在需要和其他同事对象通信时,
    先与中介者通信,通过中介者来间接完成与其他同事类的通信;在具体同事类中实现了在抽象同事类中声明的抽象方法

    适用场景:
    解决一系列对象之间复杂的耦合关系,这一系列对象往往是“多对多”的耦合关系。

    优缺点:
    优点:
    简化了对象之间的交互
    可将各同事对象解耦
    减少子类生成

    缺点:
    中介者类中包含了大量同事之间的交互细节,可能会导致具体中介者类非常复杂,不易维护

    总结:
    中介者模式的本质就是封装各个同事部分的交互,统一由中介者管理

  • 相关阅读:
    axios
    vue-cli-service 报错
    避免大型、复杂的布局和布局抖动
    vue 父子通信
    == 区别 === ,!= 区别 !==
    全选/取消全选
    vue 注意
    pyparsing:自定义一个属于你的语法解析器(更新中)
    《python解释器源码剖析》第11章--python虚拟机中的控制流
    collections:内建模块,提供额外的集合类
  • 原文地址:https://www.cnblogs.com/daily-note/p/7444771.html
Copyright © 2011-2022 走看看