Saturday, November 26, 2016

[Behavioral Pattern] Observer pattern trong Objective-C

Dạo này mình bận công chuyện nên không có thời gian viết blog. Hôm nay rảnh mình sẽ viết tiếp bài  Observer Pattern trong loại bài Design Pattern mà mình đã viết trước đây. Rất mong sự ủng hộ của các bạn để mình có động lực viết loại bài về chủ đề Design Pattern.

Trong những loại Design Pattern mà các bạn làm trên iOS chắc chắn đây là loại pattern bạn dùng nhiều nhất. Nó rất hữu ích cho việc xử lý bất đồng bộ khi bạn gọi những request lên server, bạn không cần phải chờ mỗi khi gói tin được gởi từ server về. Và pattern này cũng là pattern chủ đạo trong khái niệm lập trình cấu trúc MVC và Reactive Programming.

Khái niệm: Là loại pattern chỉ sự phụ thuộc và hành vi giữa đối tượng cha và đối tượng con. Nếu đối tượng cha đăng ký observer pattern này với đối tượng con, thì khi đối tượng con xử lý những hành vi nào đó sẽ thông báo cho đối tượng cha ứng với id của observer đó, biết để xử lý tiếp công việc đó.

Cấu trúc lớp:
Sơ đồ UML Class Diagram của Observer Pattern



Cách sử dụng: Cách sử dụng loại pattern này tương đối dễ nhưng hãy cẩn thận vì nếu bạn đăng ký observer pattern sau khi sử dụng xong mà không xóa chúng đi sẽ gây ra việc memory leak ( tràn bộ nhớ). Hoặc mỗi khi thoát khỏi màn hình đó các bạn có thể remove chúng trong hàm dealloc đi cũng được.
Trong iOS pattern này được đóng gói trong đối tượng NSNotificationCenter. Cách sử dụng chúng như sau:
 
// Cách đăng ký observer pattern
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(didUpdated) // method name
                                             name:UserDidSaveNotification // id 
                                           object:nil]; 

// Sau khi sử dụng xong, cách xóa observer đi như sau:
[[NSNotificationCenter defaultCenter] removeObserver:self 
                                                name:UserDidSaveNotification object:nil];

Ví dụ: Giả sử mình có đối tượng Application và User. Mỗi khi User lưu thành công thì sẽ báo cho Application biết. Với sơ đồ Class Diagram như sau:

Code mẫu đối tượng Application và User như sau:


Tài liệu tham khảo: 

- Observer Pattern.


No comments:

Post a Comment

Note: Only a member of this blog may post a comment.