Vâng mỗi chúng ta đang chứng kiến và trải qua thời khắc lịch sử của nhân loại khi mà cơ bão Covid-19 đang hoành hành khắp mọi nơi. Nhưng những gì liên quan đến nó cũng là nguồn cảm hứng để mình dùng giải thích vấn đề có lẽ mà lập trình viên nào cũng muốn giải quyết trọn vẹn. Đó chính là việc làm sao để 2 object liên lạc với nhau (1 object truyền thông tin, 1 object thực thi dựa trên thông tin đó). Trong tầm hiểu biết hạn hẹp và kinh nghiệm sử dụng thì mình tạm thời liệt kê ra 4 phương pháp sau. (Do các tài liệu viết về các phương pháp này cũng có rất nhiều trên mạng, nên để có 1 cách trình bày trực quan dễ hiểu hơn thì mình sẽ lấy ví dụ tương đồng qua các hiện tượng xảy ra trong thực tế. Nếu bạn nào thấy không hợp thì cũng đừng nói lời cay đắng nhé :d)
Phương pháp Delegate(sử dụng uỷ quyền)
- Trong thời điểm dịch covid hoành hành tại tp.HCM, chúng ta có nghe 1 câu chuyện vô cùng thú vị ở khu cách ly KTX ĐHQG TP.HCM, chuyện là có 1 cậu bé 19t đêm không ngủ được nên đã bảo mẹ mình mang gấu bông vào trong cho dễ ngủ. Trong trường hợp này object1 là khu cách ly, object2 là người mẹ. Đã là khu cách ly rồi thì làm sao để người mẹ đưa gấu bông vào trong đây. Và lúc này phương pháp Delegate đã được sử dụng.
1 protocol (giao thức – phương thức giao tiếp) được tạo ra, trong đó có khai báo 1 chức năng là vận chuyển đồ từ ngoài khu cách ly vào trong. Và người mẹ đã sử dụng phương thức giao tiếp đó để thực hiện chức năng vận chuyển gấu bông giùm mình. Nhưng làm sao để khu cách ly hiểu được là cần phải vận chuyển gấu bông của bà mẹ vào trong cho con bà ý đây? Ban quản lý khu cách ly sẽ đứng ra thực hiện chức năng bằng cách chấp nhận uỷ quyền thuộc về mình: Bà mẹ.delegate = khu cách ly. BQL cử 1 người ra nhận gấu bông và sau đó xử lý tiếp theo như thế nào là việc của BQL.
Phương pháp Delegate cũng được ứng dụng khá rộng rãi trong các tổ chức hay doanh nghiệp, ở những nơi mà có sự phân lớp giữa các bộ phận. Ví dụ tại 1 công ty A, ông giám đốc muốn giao việc cho các nhân viên ở bộ phận B, nhưng vì ông giám đốc không trực tiếp quản lý các nhân viên đó nên đã uỷ quyền cho trưởng phòng – người trực tiếp quản lý các nhân viên ở bộ phận B.
Phương pháp Closure(Đóng gói)
- Có lẽ sau sự kiện trên, BQL đề phòng là sẽ còn nhiều trường hợp như vậy. Nên đã đóng gói các hành động trên thành dịch vụ với tên là: “Dịch vụ vận chuyển đồ từ ngoài vào trong”. 1 bà mẹ khác sau khi biết được dịch vụ trên cũng muốn chuyển chút đồ ăn uống vào trong cho con của mình. Bà mẹ bắt đầu làm đơn đăng kí dịch vụ, để không bị nhầm lẫn với con người khác bà cần truyền thêm 1 số tham số vào đơn đăng kí để BQL có thể nhận diện con bà. Thủ tục xong xuôi, bà ra về và lúc này BQL sẽ thực hiện những hành động được đóng gói trong dịch vụ trên dựa trên những món đồ bà gửi gắm và thông tin cung cấp trên tờ đăng kí.
Phương pháp Closure cũng được ứng dụng khá rộng rãi hiện nay: Ví dụ các công ty du lịch tung ra các Tour trọn gói, người dùng chỉ quan tâm tới mô tả của gói và cung cấp cho công ty đó những tham số cần thiết (và quan trọng nhất là trả tiền ^^), mọi thực thi về sau công ty đó sẽ đảm nhiệm.
Sử dụng Notification
- Ngoài biện pháp sàng lọc những người có nguy cơ lây nhiễm vào khu cách ly, thì chính phủ cũng ban hành các biện pháp giãn cách xã hội, như cấm tụ tập, hội hè… trong đó có việc đóng cửa tất cả các dịch vụ không cần thiết từ ngày 11/05/2021 Vậy làm sao để có thể thực hiện các biện pháp trên 1 cách triệt để? UBND TP.Hà Nội đã sử dụng phương pháp Notification. 1 tổng đài tiếp nhận cuộc gọi từ người dân được thiết lập (tương đương 1 biến toàn cục). UBND TP.Hà Nội đóng vai trò là observer(đối tượng quan sát), sẽ tiếp nhận các cuộc gọi với nội dung “Phát hiện chỗ đông người”. Nếu bất kì người dân nào phát hiện ra chỗ tụ họp đông người, họ sẽ nhờ tổng đài phát ra tín hiệu (NotificationCenter.default.post) đó là 1 cuộc gọi với nội dung “Phát hiện chỗ đông người” kèm theo địa chỉ. UBND tiếp nhận thông báo trên và sẽ có các biện pháp xử lý về sau.
Sử dụng Subject (Observable vs Observer)
Phần này khá dài nên mình sẽ trình bày trong bài viết khác.
Thank you for your reading!
Nguồn: viblo.asia