中介者模式就是利用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地互相引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。

就像租房的中介系统,房主跟租房者不需要知道彼此只需要,只要在中介系统发布消息。

如此房主跟租房者之间不需要建立复杂关系,他们都只需要跟中介建立关系。

通常在以下情况下考虑使用中介者模式:

(1)系统中对象之间存在复杂的引用关系,产生的相互依赖关系结构混乱且难以理解。

(2)一组对象以定义良好但是复杂的方式进行通信。产生的相互依赖关系结构混乱且难以理解。

(3)一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象。

(4)想通过一个中间类来封装多各类中的行为,而又不想生成太多的子类,可以通过引入中介者类来实现,在中介者中定义多个对象交互的公共行为,如果改变行为则可以增加新的中介者类。

(5)欲使一个后端数据模型能够被多个前端用户界面连接

抽象中介者:

 public abstract class Meditor {
abstract void Send(String message,Person person);
abstract void SetRenter(Person renter);
abstract void SetLandlord(Person landlord);
}

抽象同事类:

 public abstract class Person {
Meditor m_Meditor;// person 内部需要有一个中介者
abstract void SetMeditor(Meditor meditor);// 为 meditor 初始化
abstract void SendMessage(String message);//发送租房信息
abstract void GetMessage(String message);//获取租房信息
}

具体中介者:

 public class HouseMeditor extends Meditor {
private Person renter,landlord;
@Override
void Send(String message, Person person) {
if (person.equals(renter)) {
landlord.GetMessage(message);
}else {
renter.GetMessage(message);
}
} @Override
void SetRenter(Person renter) {
this.renter = renter;
} @Override
void SetLandlord(Person landlord) {
this.landlord = landlord;
} }

具体同事类:

房主:

 public class Landlord extends Person {

     @Override
void SetMeditor(Meditor meditor) {
m_Meditor = meditor;
} @Override
void SendMessage(String message) {
m_Meditor.Send(message, this);
} @Override
void GetMessage(String message) {
System.out.println("房东收到信息:" + message);
} }

租房者:

 public class Renter extends Person{

     @Override
void GetMessage(String message) {
System.out.println("租房者收到信息:" + message);
} @Override
void SetMeditor(Meditor meditor) {
m_Meditor = meditor;
} @Override
void SendMessage(String message) {
m_Meditor.Send(message, this);
} }

客户测试类:

 public class MeditorPattern {
public static void main(String[] args) { Meditor meditor = new HouseMeditor(); Person renter = new Renter();
Person landlord = new Landlord(); meditor.SetRenter(renter);
meditor.SetLandlord(landlord); renter.SetMeditor(meditor);
landlord.SetMeditor(meditor); renter.SendMessage("我想租套房子!");
landlord.SendMessage("我要出租房子!");
}
}

运行结果:

房东收到信息:我想租套房子!
租房者收到信息:我要出租房子!

中介者模式(Mediator、ConcreteMediator、Colleague Class)(租房中介)的更多相关文章

  1. 设计模式系列之中介者模式(Mediator Pattern)——协调多个对象之间的交互

    说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...

  2. 二十四种设计模式:中介者模式(Mediator Pattern)

    中介者模式(Mediator Pattern) 介绍用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 示例有一个Messa ...

  3. 【转】设计模式 ( 十五 ) 中介者模式Mediator(对象行为型)

    设计模式 ( 十五 ) 中介者模式Mediator(对象行为型) 1.概述 在面向对象的软件设计与开发过程中,根据"单一职责原则",我们应该尽量将对象细化,使其只负责或呈现单一的职 ...

  4. 设计模式 ( 十五 ) 中介者模式Mediator(对象行为型)

    设计模式 ( 十五 ) 中介者模式Mediator(对象行为型) 1.概述 在面向对象的软件设计与开发过程中,根据“单一职责原则”,我们应该尽量将对象细化,使其只负责或呈现单一的职责,即将行为分布到各 ...

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

    原文:乐在其中设计模式(C#) - 中介者模式(Mediator Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 中介者模式(Mediator Pattern) 作者:weba ...

  6. 设计模式 笔记 中介者模式 Mediator

    //---------------------------15/04/27---------------------------- //Mediator 中介者模式----对象行为型模式 /* 1:意 ...

  7. 设计模式之中介者模式(Mediator)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程.它们帮助一个系统独立于怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  8. 中介者模式(Mediator Pattern)

    用于减少多个对象或类之间的通信复杂性. 此模式提供了一个中介类,它通常处理不同类之间的所有通信,并支持通过松散耦合来维护代码.中介者模式属于行为模式类别. 实现实例 在这里通过一个聊天室的示例来演示中 ...

  9. 23种设计模式--中介者模式-Mediator Pattern

    一.中介者模式的介绍     中介者模式第一下想到的就是中介,房子中介,婚姻中介啊等等,当然笔者也希望来个婚姻中介给我介绍一个哈哈哈,,回归正题中介者模式分成中介者类和用户类,根据接口编程的方式我们再 ...

随机推荐

  1. 报javax.servlet.ServletException: Servlet.init() for servlet [springmvc] threw exception的解决记录

    1.异常详情: 2.异常分析: 从异常的详情中看出:companyService未找到,出现这种情况的愿意可能是companyServiceImpl类没有交给IOC容器管理,但是经过我已经在该类上打了 ...

  2. 利用IDEA构建springboot应用--controller例子

    微服务 微服务是一个新兴的软件架构,就是把一个大型的单个应用程序和服务拆分为数十个的支持微服务.一个微服务的策略可以让工作变得更为简便,它可扩展单个组件而不是整个的应用程序堆栈,从而满足服务等级协议. ...

  3. Android基础控件RatingBar星级评分条的使用

    1.简介 RatingBar继承ProgressBar,除了ProgressBar的属性外还有特有属性: android:isIndicator:是否用作指示,用户无法更改,默认false andro ...

  4. 局域网下共享 MySQL 数据库连接

    转载自:https://blog.csdn.net/larger5/article/details/96974554 一.前言 在使用公司的一些开发框架,需要特定的 MySQL 版本,还要做一些配置操 ...

  5. {Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解)

    {Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解)   Django基础七之 ...

  6. 简单数论 | Day3 部分题解

    A - The Euler function 来源:HDU 2824 计算[a,b]区间内的整数的欧拉函数值,需要掌握单个欧拉函数和函数表的使用. #include <iostream> ...

  7. myeclipse 无法部署项目到jboss服务器 部署不上去

    关于myeclipse部署项目到jboss点击add deployments没有反应的问题,如图 此处点击右键,选择add deployments没有反应,原因是默认的web-root folder为 ...

  8. 【error】vue-style-loader didn't discriminate between server and client

    出现这个bug的时候,设置为false

  9. P1009阶乘之和

    n=int(input()) ans=0 for i in range(1,n+1): t=1 for j in range(1,i+1): t*=j; ans+=t; print(ans)

  10. centos7服务器常见安装包准备

    内核相关配置 https://github.com/digoal/blog/blob/master/201611/20161121_01.md# vi /etc/sysctl.conf # add b ...