软件设计模式之中介者模式实验

软件设计模式之中介者模式实验

一、实验目的

掌握软件设计模式中的中介者模式,能够用中介者模式编写程序,解决实际问题。

二、实验内容与要求

内容:有个租房中介为房主和租赁人提供租房服务,请用中介者模式对租房中介的工作进行模拟,程序设计语言可自由选择。
要求:需要用“文字+代码+截图”的形式对实验的主要代码和运行结果进行展示和描述。

三、实验方法

  1. 抽象中介者:定义了同事对象到中介者对象的接口
package com.middleman.java;

public abstract class Mediator {
    /**
     * 注册同事方法
     */
    public abstract void register(String key, Colleague colleague);
    /**
     * 发送消息
     */
    public abstract void sendMessage(String key);
}
  1. 抽象同事类
package com.middleman.java;

public abstract class Colleague {
    /**
     * 发送消息
     */
    public abstract void sendMessage();
    /**
     * 接收消息
     */
    public abstract void receiveMessage();
}
  1. 具体同事类:持有抽象中介者角色引用
    房东类:
package com.middleman.java;

public class Landlord extends Colleague {
    private static final String USER_A_REGISTER_KEY = "userA";
    private static final String USER_B_REGISTER_KEY = "userB";
    /**
     * 持有一个抽象中介者对象引用
     */
    private Mediator mediator;
 
    public Landlord(Mediator mediator) {
        this.mediator = mediator;
        mediator.register(USER_A_REGISTER_KEY, this);
    }
 
    @Override
    public void sendMessage() {
        System.out.println("房东向中介发出出租和房间的具体情况信息");
        mediator.sendMessage(USER_B_REGISTER_KEY);
    }
 
    @Override
    public void receiveMessage() {
        System.out.println("房东从中介收到租客发出的比较匹配的租房信息");
    }
}

租客类:

package com.middleman.java;

public class Renter extends Colleague {
    /**
     * 持有一个抽象中介者对象引用
     */
    private Mediator mediator;
    private static final String USER_A_REGISTER_KEY = "userA";
    private static final String USER_B_REGISTER_KEY = "userB";
 
    public Renter(Mediator mediator) {
        this.mediator = mediator;
        mediator.register(USER_B_REGISTER_KEY, this);
    }
 
    @Override
    public void sendMessage() {
        System.out.println("租客向中介发出租房信息和具体要求");
        mediator.sendMessage(USER_A_REGISTER_KEY);
    }
 
    @Override
    public void receiveMessage() {
        System.out.println("租客从中介收到符合条件的房东出租信息");
    }
}
  1. 具体中介者
package com.middleman.java;

import java.util.HashMap;
import java.util.Map;

public class Institution extends Mediator {
	 
    /**
     * 具体中介者类持有多个同事类对象引用
     * 这里使用Map保存,当然也可以使用List或者其他集合进行保存
     */
    private Map<String, Colleague> colleagueMap = new HashMap<>();
 
    @Override
    public void register(String key, Colleague colleague) {
        colleagueMap.put(key, colleague);
    }
 
    @Override
    public void sendMessage(String key) {
        Colleague colleague = colleagueMap.get(key);
        if (null != colleague) {
            colleague.receiveMessage();
        }
    }
}
  1. 客户端
package com.middleman.java;

public class Client {
    public static void main(String[] args) {
        Mediator qqServer = new Institution();
        Colleague userA = new Landlord(qqServer);
        Colleague userB = new Renter(qqServer);
        //房东向中介发出出租消息
        userA.sendMessage();
 
        System.out.println("***************************");
 
        //租客向中介发出租房消息
        userB.sendMessage();
    }
}

四 、实验结果

  1. 实验截图:
    软件设计模式之中介者模式实验_第1张图片

  2. 实验中把房产中介当做中介者,通过具体中介者对象,解耦了各个同事类之间相互依赖的场景,使同事类直接都与中介者对象发生关联。

  3. 中介者模式虽然降低了对象之间的耦合性,使得对象易于独立地被复用,并且将对象间的一对多关联转变为一对一的关联,提高系统的灵活性,使得系统易于维护和扩展。

  4. 但是,我认为具体中介者角色承担了较多的职责,其他对象都通过中介者来进行关联,一旦中介者出现了问题,整个系统将会受到重大的影响,还是要具体情况具体分析,中介者模式不一定适用于所有场景。

你可能感兴趣的:(软件设计模式,java,设计模式,算法)