中介模式(行爲型)

 

設計模式的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源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。對象

相關文章
相關標籤/搜索