zoukankan      html  css  js  c++  java
  • GoF23种设计模式之行为型模式之中介者模式

    一、概述

            使用一个中介对象来封装一系列的对象交互。中介者让各个对象无需显式地相互引用,从而达到解耦的效果。并且可以独立地改变它们之间的交互。
    二、适用性
    1.当一组对象以定义良好但复杂通信的时候。产生的相互依赖关系结构混乱且难以理解。
    2.当一个对象引用其他许多对象并且直接与这些对象通信的时候。会导致难以复用该对象。
    3.当需要定制一个分布在多个类中的行为,而又不想生成过多的子类的时候。
    三、参与者
    1.Mediator:中介者定义一个接口用于与各个同事(Colleague)对象通信。
    2.ConcreteMediator:具体中介者通过协调各同事对象实现协作行为。了解并维护它的各个同事。
    3.Colleagueclass:每一个同事类都知道它的中介者对象。每一个同事对象在需与其他的同事通信的时候,与它的中介者通信
    四、类图

    五、示例

    Mediator

    [java] view plain copy
     
     print?
    1. package cn.lynn.mediator;  
    2.   
    3. public abstract class Mediator {  
    4.   
    5.     public abstract void notice(String content);  
    6.   
    7. }  

    ConcreteMediator

    [java] view plain copy
     
     print?
    1. package cn.lynn.mediator;  
    2.   
    3. public class ConcreteMediator extends Mediator {  
    4.   
    5.     private Front front;  
    6.   
    7.     private Engineer engineer;  
    8.   
    9.     public ConcreteMediator() {  
    10.         front = new Front();  
    11.         engineer = new Engineer();  
    12.     }  
    13.   
    14.     @Override  
    15.     public void notice(String content) {  
    16.         if (content.equals("boss")) {  
    17.             engineer.action();  
    18.         } else if (content.equals("client")) {  
    19.             front.action();  
    20.         }  
    21.     }  
    22.   
    23. }  

    Colleagueclass

    [java] view plain copy
     
     print?
    1. package cn.lynn.mediator;  
    2.   
    3. public abstract class Employee {  
    4.   
    5.     public abstract void action();  
    6.   
    7. }  
    [java] view plain copy
     
     print?
    1. package cn.lynn.mediator;  
    2.   
    3. public class Engineer extends Employee {  
    4.   
    5.     @Override  
    6.     public void action() {  
    7.         System.out.println("工程师努力工作!");  
    8.     }  
    9.   
    10. }  
    [java] view plain copy
     
     print?
    1. package cn.lynn.mediator;  
    2.   
    3. public class Front extends Employee {  
    4.   
    5.     @Override  
    6.     public void action() {  
    7.         System.out.println("前台接待客人!");  
    8.     }  
    9.   
    10. }  

    Client

    [java] view plain copy
     
     print?
    1. package cn.lynn.mediator;  
    2.   
    3. public class Client {  
    4.   
    5.     public static void main(String[] args) {  
    6.         Mediator mediator = new ConcreteMediator();  
    7.         mediator.notice("boss"); // 老板来了,赶紧的  
    8.         mediator.notice("client"); // 客户到访, 接待啊  
    9.     }  
    10. }  

    Result

    [java] view plain copy
     
     print?
      1. 工程师努力工作!  
      2. 前台接待客人!  
  • 相关阅读:
    python爬取二手房库存,存数据库,生成折线图(下)
    python爬取二手房库存,存数数据库,生成折线图(上)
    python爬取二手房库存,存数据库,生成折线图(中)
    vue input 复制后无法修改
    js对象应用问题
    redis5.0集群搭建
    查看java 字节码的方式
    python 运行js
    对java基本对象的构想
    学习第39天
  • 原文地址:https://www.cnblogs.com/huangwentian/p/7471492.html
Copyright © 2011-2022 走看看