Mediator Pattern
Mediator Pattern được sử dụng để cung cấp nền tảng truyền thông tập trung giữa các đối tượng khác nhau trong hệ thống. Mediator Pattern rất hữu dụng trong các ứng dụng doanh nghiệp nơi nhiều đối tượng tương tác lẫn nhau. Nếu các đối tượng tương các với mỗi tượng khác một cách trực tiếp thì các thành phần của hệ thống sẽ gắn đôi chặt chẽ (tightly-coupled). Điều này sẽ làm cho chi phí duy trì hệ thống tăng cao và không linh hoạt khi mở rộng. Mediator Pattern chú trọng vào việc cung cấp một mediator giữa các đối tượng để truyền thông và giúp thực thi lose-coupling giữa các đối tượng.
Bộ điều khiển không lưu là ví dụ cụ thể về Mediator Pattern nơi phòng điều khiển không lưu hoạt động như là một Mediator giúp truyền thông giữa các chuyến bay khác nhau. Mediator làm việc như là một bộ định tuyến giữa các đối tượng và nó có logic riêng của mình để cung cấp các phương thức truyền thông.
Trong ví dụ sau, chúng ta sẽ xây dựng một ứng dụng chat nơi mà người dùng có thể tham gia chat theo nhóm. Người dùng được xác định theo tên và họ có thể gửi - nhận các thông điệp. Thông điệp do một người gửi sẽ được tất cả các thành viên trong nhóm nhận.
1. Mediator Pattern Interface
ChatMediator.java
package com.journaldev.design.mediator; public interface ChatMediator { public void sendMessage(String msg, User user); void addUser(User user); }
2. Mediator Pattern Colleague Interface
User.javapackage com.journaldev.design.mediator; public abstract class User { protected ChatMediator mediator; protected String name; public User(ChatMediator med, String name){ this.mediator=med; this.name=name; } public abstract void send(String msg); public abstract void receive(String msg); }
3. Concrete Mediator
ChatMediatorImpl.javapackage com.journaldev.design.mediator; import java.util.ArrayList; import java.util.List; public class ChatMediatorImpl implements ChatMediator { private List<User> users; public ChatMediatorImpl(){ this.users=new ArrayList<>(); } @Override public void addUser(User user){ this.users.add(user); } @Override public void sendMessage(String msg, User user) { for(User u : this.users){ //message should not be received by the user sending it if(u != user){ u.receive(msg); } } } }
4. Mediator Design Pattern Concrete Colleague
UserImpl.javapackage com.journaldev.design.mediator; public class UserImpl extends User { public UserImpl(ChatMediator med, String name) { super(med, name); } @Override public void send(String msg){ System.out.println(this.name+": Sending Message="+msg); mediator.sendMessage(msg, this); } @Override public void receive(String msg) { System.out.println(this.name+": Received Message:"+msg); } }
5. Mediator Pattern Example Client Program Code
ChatClient.javapackage com.journaldev.design.mediator; public class ChatClient { public static void main(String[] args) { ChatMediator mediator = new ChatMediatorImpl(); User user1 = new UserImpl(mediator, "Pankaj"); User user2 = new UserImpl(mediator, "Lisa"); User user3 = new UserImpl(mediator, "Saurabh"); User user4 = new UserImpl(mediator, "David"); mediator.addUser(user1); mediator.addUser(user2); mediator.addUser(user3); mediator.addUser(user4); user1.send("Hi All"); } }
Kết quả hiển thị
Pankaj: Sending Message=Hi All Lisa: Received Message:Hi All Saurabh: Received Message:Hi All David: Received Message:Hi All
Sơ đồ UML

No comments :
Post a Comment