前言:【模式总览】——————————by xingoo

  模式意图

  使用一个中介的对象,封装一组对象之间的交互,这样这些对象就可以不用彼此耦合。

  这个中介者常常起着中间桥梁的作用,使其他的对象可以利用中介者完成某些行为活动,因此它必须对所有的参与活动的对象了如指掌!

  应用场景

  1 当一组对象要进行沟通或者业务上的交互,但是其关系却又很复杂混乱时,可以采用此模式。

  2 当一个对象与其他的对象要进行紧密的交互,但又想服用该对象而不依赖其他的对象时。

  3 想创造一个运行于多个类之间的对象,又不想生成新的子类时。

  模式结构

  

  Mediator 抽象的中介者,定义中介的规范

interface Mediator{public void colleagueChanged(Colleague c);
}

  ConcreteMediator 具体的中介者,通常内部依赖于多个业务对象

class ConcreteMediator implements Mediator{private Colleague1 col1;private Colleague2 col2;public void colleagueChanged(Colleague c) {col1.action();col2.action();}public void createConcreteMediator() {col1 = new Colleague1(this);col2 = new Colleague2(this);}private Colleague1 getCol1() {return col1;}public Colleague2 getCol2() {return col2;}
}

  Colleague 抽象的业务角色

abstract class Colleague{private Mediator mediator;public Colleague(Mediator mediator){this.mediator = mediator;}public Mediator getMediator() {return mediator;}public abstract void action();public void change(){mediator.colleagueChanged(this);}
}

  Colleague1 Colleague2 具体的业务角色

class Colleague1 extends Colleague{public Colleague1(Mediator m){super(m);}public void action(){System.out.println("this is an action from Colleague1");}
}
class Colleague2 extends Colleague{public Colleague2(Mediator m){super(m);}public void action(){System.out.println("this is an action from Colleague2");}
}

  全部代码

 1 package com.xingoo.test.design.mediator;
 2 abstract class Colleague{
 3     private Mediator mediator;
 4
 5     public Colleague(Mediator mediator){
 6         this.mediator = mediator;
 7     }
 8
 9     public Mediator getMediator() {
10         return mediator;
11     }
12
13     public abstract void action();
14
15     public void change(){
16         mediator.colleagueChanged(this);
17     }
18 }
19 class Colleague1 extends Colleague{
20     public Colleague1(Mediator m){
21         super(m);
22     }
23     public void action(){
24         System.out.println("this is an action from Colleague1");
25     }
26 }
27 class Colleague2 extends Colleague{
28     public Colleague2(Mediator m){
29         super(m);
30     }
31     public void action(){
32         System.out.println("this is an action from Colleague2");
33     }
34 }
35 interface Mediator{
36     public void colleagueChanged(Colleague c);
37 }
38 class ConcreteMediator implements Mediator{
39     private Colleague1 col1;
40     private Colleague2 col2;
41
42     public void colleagueChanged(Colleague c) {
43         col1.action();
44         col2.action();
45     }
46
47     public void createConcreteMediator() {
48         col1 = new Colleague1(this);
49         col2 = new Colleague2(this);
50     }
51
52     private Colleague1 getCol1() {
53         return col1;
54     }
55
56     public Colleague2 getCol2() {
57         return col2;
58     }
59
60 }
61
62 public class Client {
63     public static void main(String[] args) {
64         ConcreteMediator mediator = new ConcreteMediator();
65         mediator.createConcreteMediator();
66         Colleague1 col1 = new Colleague1(mediator);
67 //        Colleague2 col2 = new Colleague2(mediator);
68         mediator.colleagueChanged(col1);
69     }
70 }

View Code

  运行结果

this is an action from Colleague1
this is an action from Colleague2

  生活中的设计模式

  

  毕业的同学们,第一个要解决的问题就是租房子,当白富美高富帅出没社会后,穷屌丝没了生存之地。但是只要勤劳,一样有饭吃有房住!

  这里房屋中介好比是一个中介者,它知道每个租客的身份信息,当有房屋出租后,它会发送给每一个租客消息。

  这样,租客们中有一个变化活动时,都会利用房屋中介,发送消息到其他的租客。下面就是模仿的一个过程。

  房屋中介代码如下:

 1 interface StateMediator{
 2     public void sell(Tenant tenant);
 3 }
 4 class RealEstateAgents implements StateMediator{
 5     private TenantA teA;
 6     private TenantB teB;
 7     private TenantC teC;
 8
 9     public void sell(Tenant tenant) {
10         System.out.println("海景洋房 已经租出去了!");
11         if(tenant instanceof TenantA){
12             teB.crying();
13             teC.crying();
14         }else if(tenant instanceof TenantB){
15             teA.crying();
16             teC.crying();
17         }else if(tenant instanceof TenantC){
18             teB.crying();
19             teA.crying();
20         }
21     }
22
23     public void createAgents(){
24         teA = new TenantA(this);
25         teB = new TenantB(this);
26         teC = new TenantC(this);
27     }
28 }

  租客的代码如下:

 1 abstract class Tenant{
 2     private RealEstateAgents agent;
 3     public Tenant(RealEstateAgents agent) {
 4         this.agent = agent;
 5     }
 6     public abstract void crying();
 7     public void renting(){
 8         agent.sell(this);
 9     }
10 }
11 class TenantA extends Tenant{
12     public TenantA(RealEstateAgents agent) {
13         super(agent);
14     }
15     public void crying() {
16         System.out.println("我是高富帅 TenantA!哎呀我想要!");
17     }
18 }
19 class TenantB extends Tenant{
20     public TenantB(RealEstateAgents agent) {
21         super(agent);
22     }
23     public void crying() {
24         System.out.println("我是白富美 TenantB!哎呀我想要!");
25     }
26 }
27 class TenantC extends Tenant{
28     public TenantC(RealEstateAgents agent) {
29         super(agent);
30     }
31     public void crying() {
32         System.out.println("我是穷屌丝 TenantC!哎呀我想要!");
33     }
34 }

  产生的业务活动如下:

 1 public class ClientTest {
 2     public static void main(String[] args) {
 3         RealEstateAgents agent = new RealEstateAgents();
 4         agent.createAgents();
 5
 6         System.out.println("TeA 抢到了房子了!");
 7         agent.sell(new TenantA(agent));
 8
 9         System.out.println("过了两个月 TeB 抢到了房子了!");
10         agent.sell(new TenantB(agent));
11     }
12 }

  运行结果

TeA 抢到了房子了!
海景洋房 已经租出去了!
我是白富美 TenantB!哎呀我想要!
我是穷屌丝 TenantC!哎呀我想要!
过了两个月 TeB 抢到了房子了!
海景洋房 已经租出去了!
我是高富帅 TenantA!哎呀我想要!
我是穷屌丝 TenantC!哎呀我想要!

【设计模式】—— 中介者模式Mediator相关推荐

  1. 设计模式-中介者模式(Mediator Pattern)

    设计模式-中介者模式(Mediator Pattern) 文章目录 设计模式-中介者模式(Mediator Pattern) 一.定义 二.概念解释 三.场景 四.实现 1.类图 2.代码实现 五.总 ...

  2. 设计模式.中介者模式Mediator

    定义 中介者模式(Mediator pattern) : 使用中介者模式来集中相关对象之间复杂的沟通和控制方式,使得这些对象不必相互明显引用.从而使它们可以较松散地耦合.当这些对象中的某些对象之间的相 ...

  3. 14.设计模式--中介者模式(Mediator模式)

    1.定义 中介者模式是一种行为型模式,是为了解决对象之间错综复杂的调用关系的一种设计模式,这种错综复杂的调用关系采用一个中介类来进行帮忙调用,所有的调用者只是需要关心中介者,而不需要进行互相依赖. 例 ...

  4. 设计模式--中介者模式(Mediator)

    中介者模式 概述 用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 适用性 1.一组对象以定义良好但是复杂的方式进行通信. ...

  5. java mediator_浅谈Java设计模式——中介者模式(Mediator)

    一.概述 用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互.中介对象用来封装对象之间的关系,各个对象可以不需要知道具体的信息 ...

  6. java mediator_关于Java 设计模式 中介者模式 Mediator

    1.Order.java package com.ssm.cts.pattern.mediator; public class Order { public void buyBar(int numbe ...

  7. 乐在其中设计模式(C#) - 中介者模式(Mediator Pattern)

    [索引页] [源码下载] 乐在其中设计模式(C#) - 中介者模式(Mediator Pattern) 作者:webabcd 介绍 用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互 ...

  8. 设计模式(10):行为型-中介者模式(Mediator)

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...

  9. PHP设计模式之中介者模式(Mediator Pattern)了解下

    咱们先来看下中介者模式(Mediator Pattern)的定义,它就是,用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互, ...

  10. Python设计模式-中介者模式

    Python设计模式-中介者模式 代码基于3.5.2,代码如下; #coding:utf-8 #中介者模式class colleague():mediator = Nonedef __init__(s ...

最新文章

  1. sass @function,@for,@mixin 的应用
  2. Servlet简介与Servlet和HttpServlet运行的流程
  3. p1044与p1898
  4. python双等号怎么输入_python中的星号‘*’和双星号‘**’的解说
  5. 【OpenCV 例程200篇】13. 图像的加法运算(cv2.add)
  6. 面试官系统精讲Java源码及大厂真题 - 14 简化工作:Guava Lists Maps 实际工作运用和源码
  7. APP版本管理SDK项目实战-准备篇
  8. 远程ykvm 插件移值java_远程管理KVM,命令行控制KVM,console连接,透传
  9. Asp.Net高级知识回顾_HttpModule及应用程序生命周期_1
  10. 【MyEcplise SVN】myEcplise上安装SVN的多种方式
  11. OpenCV-图像处理- Java(读取与显示图片)
  12. 机器人技术基础pdf
  13. 如何看懂公司的财务报表(2)
  14. 20155310《网络对抗》免杀原理与实践
  15. 如何修改jadx的默认内存
  16. Enolsoft PDF Converter with OCR mac(带有OCR的PDF转换器)
  17. 入驻csdn的自我介绍
  18. 基于支持向量机的谐波分析研究与实现
  19. DJI OSDK和DJI Onboard-SDK-ROS
  20. php ean13,php生成EAN_13标准条形码实例_PHP教程

热门文章

  1. 记一次Sentry部署过程
  2. Java Observer Pattern(观察者模式)
  3. 5、Hive的自定义UDF函数
  4. 数据库编程1 Oracle 过滤 函数 分组 外连接 自连接
  5. 实例讲解——系统登录
  6. 《硝烟中的Scrum和XP》书摘(1)
  7. 构建Windows Server 2008虚拟实验室
  8. 洛谷P2587 [ZJOI2008] 泡泡堂
  9. java学习(七)java中抽象类及 接口
  10. oracle处理考勤时间,拆分考勤时间段的sql语句