cuốn sách gpt4 ai đã làm

Thiết kế khung EDA đồng bộ

In lại Tác giả: Người biết Thời gian cập nhật: 2024-03-13 17:24:03 33 4
mua khóa gpt4 Nike

Bắt mắt một chút

1 tin nhắn

Trong hệ thống dựa trên Thông báo, mỗi Sự kiện cũng có thể được gọi là Thông báo là một bản tóm tắt Sự kiện ở cấp độ cao hơn. Mỗi Thông báo có một Loại cụ thể được sử dụng để liên kết với Trình xử lý tương ứng. Nó là một loại dữ liệu.

2 Chanel

Thay đổi được sử dụng để nhận các tin nhắn được phân phối từ Vòng lặp sự kiện. Mỗi Kênh chịu trách nhiệm xử lý một loại tin nhắn. Đó là việc xử lý dữ liệu.

3Bộ định tuyến động

Chức năng của nó tương tự như Event Loop. Nó chủ yếu giúp Sự kiện tìm Kênh thích hợp và truyền đến Kênh đó. Nó là cầu nối giữa Sự kiện và Kênh.

4 sự kiện

Sự kiện là cách triển khai Tin nhắn đơn giản nhất trong lần sử dụng tiếp theo, Sự kiện có thể được sử dụng trực tiếp làm lớp cơ sở của các Tin nhắn khác.

5Người điều phối sự kiện

EventDispatcher là cách triển khai cơ bản nhất của DynamicRouter, phù hợp để sử dụng trong tình huống đơn luồng, do đó không cần phải xem xét các vấn đề về an toàn luồng.

6 hạng mục kiểm tra

Kết nối các thành phần trên để hoàn thành bài kiểm tra.

2 mã

1 tin nhắn

gói được đồng bộ hóa; giao diện công cộng Message { // Trả về loại Message Class

2 Chanel

gói synceda; giao diện công cộng Kênh { // Chịu trách nhiệm gửi tin nhắn void Dispatch(E tin nhắn);

3Bộ định tuyến động

package synceda; public giao diện DynamicRouter { // Đăng ký Kênh liên quan cho từng loại Thông báo. Chỉ khi tìm thấy Kênh phù hợp thì Thông báo mới được xử lý void registerChannel(Class messageType, Channel kênh); // Gán tin nhắn cho kênh void Dispatch(E message) tương ứng;

4 sự kiện

gói được đồng bộ hóa; lớp công khai Triển khai sự kiện Tin nhắn { @Override public Class

5Người điều phối sự kiện

gói synceda; nhập java.util.HashMap; nhập java.util.Map; /** * @className: EventDispatcher * @description: Lớp này không phải là lớp an toàn theo luồng * @date: 2022/5/18 * @author : cakin */ public class EventDispatcher triển khai DynamicRouter{ // Được sử dụng để lưu mối quan hệ giữa Kênh và Tin nhắn riêng tư cuối cùng Map(); } @Override public void registerChannel(Class messageType, Channel kênh) { this.routerTable.put(messageType,channel) ; } @Override public void Clark(Message message) { if(routerTable.containsKey(message.getType())){ // Lấy trực tiếp Kênh tương ứng để xử lý Tin nhắn routerTable.get(message.getType()).dispatch(message); } else { ném MessageMatcherException("không thể khớp kênh cho loại ["+message.getType()+"]");

6 lớp ngoại lệ

gói được đồng bộ hóa; lớp công khai MessageMatcherException mở rộng RuntimeException { public MessageMatcherException(String message) { super(message);

lớp kiểm tra 7

package synceda; public class EventDispatcherExample { // Hai thuộc tính X và Y được định nghĩa trong inputEvent, chủ yếu được sử dụng cho các phần tử trong các Kênh khác static class inputEvent mở rộng Event { private Final int x; int y) { this.x = x; this.y = y } public int getX() { return x } public int getY() { return y; } } // Sự kiện được sử dụng để lưu trữ kết quả lớp tĩnh ResultEvent mở rộng Sự kiện { public Final int result; public ResultEvent(int result) { this.result = result; } public int getResult() { return result } } // Process ResultEvent Handler (Kênh), chỉ cần xuất kết quả tính toán ra bảng điều khiển lớp tĩnh ResultEventHandler thực hiện Channel { @Override public void Dispatch(ResultEvent message) { System.out.println("Kết quả là: " + message.getResult()); } } // inputEventHandler cần gửi Sự kiện đến Bộ định tuyến, vì vậy lớp tĩnh Dispatcher cần được chuyển vào trong quá trình thực hiện xây dựng inputEventHandler triển khai Channel { bộ điều phối EventDispatcher cuối cùng riêng tư; public inputEventHandler(bộ điều phối EventDispatcher) { this.dispatcher = người điều phối; } //Tạo kết quả được tính toán thành một Sự kiện mới và gửi nó tới Bộ định tuyến @Override public voiddispatch(InputEvent message) { System.out.printf("X:%d,Y:%d\n " , message.getX(), message.getY()); int result = message.getX() + message.getY(); Dispatch(new ResultEvent(result)); } public static void main(String[] args) { EventDispatcher bộ điều phối = new EventDispatcher(); // Đăng ký mối quan hệ ràng buộc giữa Sự kiện và Trình xử lý (Kênh) với bộ điều phối DisPatcher.registerChannel(InputEvent.class, new inputEventHandler(dispatcher)); .registerChannel(ResultEvent.class, new ResultEventHandler()); bộ điều phối.dispatch(mới) Sự kiện đầu vào(1, 2)); } } }

Ba kết quả kiểm tra

X:1,Y:2

Kết quả là: 3

33 4 0
Xem sitemap của VNExpress