中介模式(行为型)

 

设计模式的3个分类:建立型模式、结构型模式、行为型模式java

中介模式定义:设计模式

在软件工程领域,中介者模式定义了一个中介者对象,该对象封装了系统中对象间的交互方式。因为它能够在运行时改变程序的行为,这种模式是一种行为型模式。ide

 

中介模式图示:this

 

 

 

代码实现:.net

/**
 * 中介接口
 */
public interface IChatRoom {

    void sendMessage(String msg, String userId);

    void addUser(User user);
}

/**
 * 抽象用户类
 */
public abstract class User {

    private IChatRoom mediator;

    private String id;
    private String name;

    public User(IChatRoom mediator, String id, String name) {
        this.mediator = mediator;
        this.id = id;
        this.name = name;
    }

    public abstract void send(String msg, String userId);
    public abstract void receive(String msg);

    public IChatRoom getMediator() {
        return mediator;
    }

    public String getId() {
        return id;
    }

    public String getName() {
        return name;
    }
}

/**
 * 具体的中介类
 */
public class ChatRoom implements IChatRoom {

    private Map<String, User> usersMap = new HashMap<>();

    @Override
    public void sendMessage(String msg, String userId) {
        User u = usersMap.get(userId);
        u.receive(msg);
    }

    @Override
    public void addUser(User user) {
        usersMap.put(user.getId(), user);
    }
}

/**
 * 具体用户类
 */
public class ChatUser extends User{

    public ChatUser(IChatRoom mediator, String id, String name) {
        super(mediator, id, name);
    }

    @Override
    public void send(String msg, String userId) {
        System.out.println(this.getName() + " Sending Message: " + msg);
        this.getMediator().sendMessage(msg, userId);//经过中介对象发送信息
    }

    @Override
    public void receive(String msg) {
        System.out.println(this.getName() + " Received Message: " + msg);
    }
}

/**
 * Test
 */
public class MediatorPatternDemo {

    public static void main(String[] args) {


        IChatRoom chatRoom = new ChatRoom();

        User user1 = new ChatUser(chatRoom, "1", "Kobe");
        User user2 = new ChatUser(chatRoom, "2", "James");
        User user3 = new ChatUser(chatRoom, "3", "077");
        User user4 = new ChatUser(chatRoom, "4", "YueG7");

        chatRoom.addUser(user1);
        chatRoom.addUser(user2);
        chatRoom.addUser(user3);
        chatRoom.addUser(user4);

        user3.send("Hello YueG7", "4");
        System.out.println();
        user4.send("别来无恙", "3");
    }
}

//output
077 Sending Message: Hello YueG7
YueG7 Received Message: Hello YueG7

YueG7 Sending Message: 别来无恙
077 Received Message: 别来无恙

 

参考:设计

Mediator Design Pattern: https://howtodoinjava.com/design-patterns/behavioral/mediator-pattern/
code

 

 

本文同步分享在 博客“黑冰台”(CNBlog)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。对象

相关文章
相关标签/搜索