2010-10-28 23 views
6

Tôi đã tìm thấy các cách triển khai khác nhau của mẫu quan sát viên tại Delphi, như: Sourcemaking Design PatternsDelphi Hobbyist.Cách tốt nhất để triển khai mẫu quan sát viên tại Delphi

Nói chung, cách tốt nhất để triển khai người quan sát ở Delphi là gì?
Tôi sẽ nói sử dụng giao diện vì mã dễ đọc hơn.

+0

Giao diện không quá nhiều vì mã trở nên dễ đọc hơn, nhưng vì mã trở nên/được tách riêng hơn. –

+0

Dưới đây là một triển khai khác để giữ tiện dụng: http://blogs.teamb.com/joannacarter/2004/06/30/690 –

Trả lời

7

Không có "tốt" hay cách "tốt nhất" để thực hiện mô hình.
Triển khai bạn chọn tùy thuộc vào cách bạn muốn sử dụng.

Ví dụ: bạn cũng có thể sử dụng tính năng generics (có sẵn từ Delphi 2009) để đơn giản hóa việc sử dụng nhiều mẫu.

Và nếu bạn sử dụng phiên bản Pre Delphi-3 hoặc muốn tránh reference counting bạn không thể sử dụng giao diện.
(Số đếm tham chiếu có thể mở ra một loại giun mới khi trộn với quản lý thời gian sống dựa trên chủ sở hữu truyền thống/chủ sở hữu), hãy chắc chắn xuống lớp đưa ra các giao diện từ tổ tiên đúng - như TInterfacedObject - và xem quản lý thời gian sống của bạn).

Ngoài câu hỏi "thuần khiết" về cách triển khai mẫu quan sát, nó cũng tốt để có thể nhận ra các lớp trong Delphi thực hiện mẫu quan sát viên.

Ví dụ: TDataSet/TDataSource cũng triển khai observer pattern.
Toàn bộ khái niệm về Data Aware Controls phụ thuộc vào nó, tất cả được ràng buộc qua TDataLink.

Tôi đã viết thành phần TDataLinkReflector dựa trên TDataLink, phản ánh tất cả các phương pháp ảo trong TDataLink cho các sự kiện trong TDataLinkReflector.

Cơ sở trên TDataLinkReflector Tôi đã viết TDataAwareControlController thành phần thực hiện tất cả những điều thú vị cho Kiểm soát dữ liệu Aware dựa trên TDataSet, TFields và TDataSource liên kết với TDataSet (tô màu trên chỉ đọc, bắt buộc, v.v.). Nhưng thậm chí một điều dường như đơn giản như các sự kiện có thể được xem như dựa trên mẫu đó (mặc dù các sự kiện là một diễn viên duy nhất, vì vậy chỉ có một người quan sát có thể xem một sự kiện).

Một lớp khác đang triển khai đây là TApplicationEvents; mỗi cá thể cho phép bạn nghe bất kỳ sự kiện nào trên TApplication.

Tôi hy vọng sẽ làm sáng tỏ nơi mà các mẫu người quan sát được sử dụng ở Delphi.

--jeroen

PS: Bất cứ ai quan tâm đến những thành phần tôi đã viết có thể muốn các CodeRage video mentioned here xem.

+0

Cảm ơn, câu trả lời rất nhiều thông tin. – LaBracca

Các vấn đề liên quan