码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式-行为型模式-中介者模式

时间:2016-03-26 20:23:44      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:

中介者要解决的问题

中介者模式(Mediator Pattern)是用来降低多个对象和类之间通信的复杂度。这种模式提供了一个中介类,该类通常用来处理不同类之间的通信。中介者模式符合迪米特原则,即一个类应当尽量减少与其他类的联系。

实例描述

在我们现实生活中就有这样的例子,你如果去租房,你可能会在网站上找一些发布租房的信息,找到对应的房东。为了能够找到性价比高的房子,你可能找好多家,那么你都要和这些房东打交道,留下电话啥的。有时候房子不好出租的情况下,房东还会主动联系你,就有了下面这幅图:

技术分享

我们可以看到每个房客(对象)都要和房东(类)打交道,违背了迪米特原则,于是在某种驱动下(可以是利益),中介者的角色产生了

技术分享

房客只需要把自己想租房子的类型(价格,位置。。)告诉中介,房东只需要把房子出租的信息在中介那里备案,那么我们可以看到在这里房东对房客是不可见的,也就减少了依赖,房东和房客只需要关注中介就好了,我们在这里加入观察者模式就能起到通知房客和房东的功能。

下面是我根据这种情景写的Demo,只是简单的演示,设计模式只可意会不可言传

抽象Person类,房客和房东都继承自Person

public abstract class Person {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    abstract void say();
}

房东类Landlord

public class Landlord extends Person {
    public Landlord() {
    }

    public Landlord(String name) {
        this.setName(name);
    }

    @Override
    void say() {
        System.out.println(String.format("I am Landlord, my name is ? I have two rooms, each 800$...", this.getName()));
    }

}

房客类Renter

public class Renter extends Person {

    public Renter() {}

    public Renter(String name) {
        this.setName(name);
    }
    @Override
    void say() {
        System.out.println(String.format("I am Renter, my name is ?, I only want to rent a room less than 500$", this.getName()));
    }

}

中介者接口

public interface IMediator {
    void showMessage(Person person);
}

中介者的具体实现

public class Mediator implements IMediator{

    @Override
    public void showMessage(Person person) {
        person.say();
    }
}

具体调用

    public static void executeMediatorPattern() {
        System.out.println("Mediator Design Pattern:");
        Landlord landlord = new Landlord("Fang Da Da");
        Renter renter = new Renter("Zhu Fang Fang");
        IMediator mediator = new Mediator();

        mediator.showMessage(landlord);
        mediator.showMessage(renter);
        System.out.println("End...................");
    }

 

 

设计模式-行为型模式-中介者模式

标签:

原文地址:http://www.cnblogs.com/chenyongblog/p/5322988.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!