• 【设计模式】17、中介者模式


     1 package com.shejimoshi.behavioral.Mediator;
     2 
     3 
     4 /**
     5  * 功能:领导者接口
     6  * 时间:2016年3月5日下午10:41:35
     7  * 作者:cutter_point
     8  */
     9 public interface Leader
    10 {
    11     //寝室长负责调解
    12     public void adjust(Colleague c1, Colleague c2, String message);
    13 }
     1 package com.shejimoshi.behavioral.Mediator;
     2 
     3 
     4 /**
     5  * 功能:寝室长
     6  * 时间:2016年3月5日下午10:48:20
     7  * 作者:cutter_point
     8  */
     9 public class DormitoryLeader implements Leader
    10 {
    11     private Colleague1 colleague1;
    12     private Colleague2 colleague2;
    13     
    14     @Override
    15     public void adjust(Colleague c1, Colleague c2, String message)
    16     {
    17         if(c1 == colleague1)
    18         {
    19             colleague1.getMessage(message);
    20         }
    21         else
    22         {
    23             colleague2.getMessage(message);
    24         }
    25         
    26         System.out.print("	同意和解与	");
    27         
    28         if(c2 == colleague2)
    29         {
    30             colleague2.getMessage(message);
    31         }
    32         else
    33         {
    34             colleague1.getMessage(message);
    35         }
    36     }
    37 
    38     public Colleague1 getColleague1()
    39     {
    40         return colleague1;
    41     }
    42 
    43     public void setColleague1(Colleague1 colleague1)
    44     {
    45         this.colleague1 = colleague1;
    46     }
    47 
    48     public Colleague2 getColleague2()
    49     {
    50         return colleague2;
    51     }
    52 
    53     public void setColleague2(Colleague2 colleague2)
    54     {
    55         this.colleague2 = colleague2;
    56     }
    57     
    58 }
     1 package com.shejimoshi.behavioral.Mediator;
     2 
     3 
     4 /**
     5  * 功能:同事接口
     6  * 时间:2016年3月5日下午10:49:16
     7  * 作者:cutter_point
     8  */
     9 public abstract class Colleague
    10 {
    11     protected Leader mediator;    //中介者
    12     
    13     public Colleague(Leader l)
    14     {
    15         this.mediator = l;
    16     }
    17 }
     1 package com.shejimoshi.behavioral.Mediator;
     2 
     3 
     4 
     5 /**
     6  * 功能:同事类
     7  * 时间:2016年3月5日下午10:51:31
     8  * 作者:cutter_point
     9  */
    10 public class Colleague1 extends Colleague
    11 {
    12     public Colleague1(Leader l)
    13     {
    14         super(l);
    15     }
    16     
    17     //争吵
    18     public void quarrel(String message, Colleague c1)
    19     {
    20         //和c1进行争吵
    21         this.mediator.adjust(this, c1, message);
    22     }
    23     
    24     //得到劝解
    25     public void getMessage(String message)
    26     {
    27         System.out.println("colleague1" + message);
    28     }
    29 }
     1 package com.shejimoshi.behavioral.Mediator;
     2 
     3 
     4 /**
     5  * 功能:同事2
     6  * 时间:2016年3月5日下午11:07:50
     7  * 作者:cutter_point
     8  */
     9 public class Colleague2 extends Colleague
    10 {
    11 
    12     public Colleague2(Leader l)
    13     {
    14         super(l);
    15     }
    16     
    17     //争吵
    18     public void quarrel(String message, Colleague c2)
    19     {
    20         //和c1进行争吵
    21         this.mediator.adjust(this, c2, message);
    22     }
    23     
    24     //得到劝解
    25     public void getMessage(String message)
    26     {
    27         System.out.println("colleague2" + message);
    28     }
    29 
    30 }
     1 package com.shejimoshi.behavioral.Mediator;
     2 
     3 
     4 /**
     5  * 功能:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互
     6  * 适用:一组对象以定义良好但是复杂的方式进行通信。产生的相互的依赖关系结构混乱且难以理解
     7  *              一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象
     8  *         想定制一个分布在多个类中的行为,而又不想生成太多子类。
     9  * 时间:2016年3月5日下午8:24:26
    10  * 作者:cutter_point
    11  */
    12 public class Test
    13 {
    14     public static void main(String[] args)
    15     {
    16         //创建寝室长
    17         DormitoryLeader dl = new DormitoryLeader();
    18         //创建两个在寝室中的同事
    19         Colleague1 c1 = new Colleague1(dl);
    20         Colleague2 c2 = new Colleague2(dl);
    21         
    22         dl.setColleague1(c1);
    23         dl.setColleague2(c2);
    24         
    25         c1.quarrel("乱扔垃圾", c2);
    26         c2.quarrel("没有扔垃圾", c1);
    27         
    28     }
    29 }
    colleague1乱扔垃圾
    	同意和解与	colleague2乱扔垃圾
    colleague2没有扔垃圾
    	同意和解与	colleague1没有扔垃圾
  • 相关阅读:
    codeblocks 配置
    2020-7-28
    echarts markPoint在极坐标散点图中不显示value值
    Oracle cve 2020-14644 分析利用以及回显思路
    Openfire Admin Console SSRF&任意文件读取漏洞 CVE-2019-18394 CVE-2019-18393 poc
    Shiro 回显利用工具(burp
    java反序列化提取payload之Xray高级版的shiro回显poc的提取过程
    CVE-2020-3452 CISCO ASA远程任意文件读取 poc
    记事本陈列-历届数学建模大赛优秀论文(含国赛、美赛、研赛)目录
    懒人必备 |通过爬虫 筛选以及查看CSDN 满足相应积分的资源列表 简单好用
  • 原文地址:https://www.cnblogs.com/cutter-point/p/5246269.html
Copyright © 2020-2023  润新知