中介者模式(租房中介)

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

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

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

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

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

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

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

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

抽象中介者:

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

 

抽象同事类:

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

 

具体中介者:

 1 public class HouseMeditor extends Meditor {
 2 private  Person renter,landlord;
 3     @Override
 4     void Send(String message, Person person) {
 5          if (person.equals(renter)) {
 6          landlord.GetMessage(message);
 7          }else {
 8          renter.GetMessage(message);
 9         }
10     }
11 
12     @Override
13     void SetRenter(Person renter) {
14            this.renter  = renter;
15     }
16 
17     @Override
18     void SetLandlord(Person landlord) {
19         this.landlord = landlord;
20     }
21 
22 }

 

具体同事类:

房主:

 1 public class Landlord extends Person {
 2 
 3     @Override
 4     void SetMeditor(Meditor meditor) {
 5        m_Meditor = meditor;
 6     }
 7 
 8     @Override
 9     void SendMessage(String message) {
10         m_Meditor.Send(message, this);
11     }
12 
13     @Override
14     void GetMessage(String message) {
15          System.out.println("房东收到信息:" + message);
16     }
17 
18 }

 

租房者:

 1 public class Renter extends Person{
 2 
 3     @Override
 4     void GetMessage(String message) {
 5         System.out.println("租房者收到信息:" + message);
 6     }
 7 
 8     @Override
 9     void SetMeditor(Meditor meditor) {
10         m_Meditor = meditor;
11     }
12 
13     @Override
14     void SendMessage(String message) {
15         m_Meditor.Send(message, this);
16     }
17 
18 }

 

客户测试类:

 1 public class MeditorPattern {
 2 public static void main(String[] args) {
 3     
 4     Meditor meditor = new HouseMeditor();
 5     
 6     Person renter = new Renter();
 7     Person landlord = new Landlord();
 8     
 9     meditor.SetRenter(renter);
10     meditor.SetLandlord(landlord);
11     
12     renter.SetMeditor(meditor);
13     landlord.SetMeditor(meditor);
14     
15     renter.SendMessage("我想租套房子!");
16     landlord.SendMessage("我要出租房子!");
17 }
18 }

 

运行结果:

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

 

转载于:https://www.cnblogs.com/the-wang/p/7291117.html

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值