3. 1. Tổng quan
Design pattern là gì?
• Là các giải pháp cho các vấn đề thường hay gặp khi thiết
kế phần mềm.
• Các giải pháp này được thử nghiệm và sửa đổi bởi các nhà
phát triển phần mềm trong một khoảng thời gian dài.
Phân loại design pattern?
• Creational Patterns: Liên quan đến việc khởi tạo một đối tượng
• Structural Patterns: Liên quan đến cấu trúc lớp và các đối tượng
• Behavioral Patterns: Liên quan đến giao tiếp (tác động) giữa các đối tượng
4. 2.Pattern Singleton
Vấn đề
Ta muốn một đối tượng duy nhất, global cho toàn app?
Ví dụ như:
Trình quản lý tài nguyên (file system, print spooler)
Config cho ứng dụng
Logger
5. 2.Pattern Singleton
Singleton là gì và nó giải quyết vấn đề như nào?
Là mẫu thiết kế đảm bảo:
- Khởi tạo duy nhất một instance
- Cung cấp một điểm truy cập gobal vào instance đó
6. 2.Pattern Singleton
Cài đặt implement Singleton:
• Sử dụng hàm khởi tạo private
• Tạo biến static là instance duy nhất của class đó và cung
cấp hàm public get biến static đó
Các vấn đề lưu ý khi sử dụng Singleton:
• Multithread: Sử dụng synchrozed
• Serialization: Overide method readResolve()
• Classloaders: Sử dụng một classloaders
8. 2.Pattern Singleton
Kết luận:
• Singleton sử dụng khi muốn tạo một đối tượng duy nhất
cho toàn ứng dụng
• Khi sử dụng Singleton cần lưu ý trong các trường hợp
multithread, Serializable
9. 3.Pattern Prototype
Vấn đề
Nhu cầu tạo mới đối tượng bằng cách clone một mẫu
Nguyên nhân:
• Khởi tạo mới tương đối phức tạp
• Chi phí cho hiệu năng cao
10. 3.Pattern Prototype
Prototype là pattern cho phép tạo một đối mới bằng cách sao
chép lại các thành phần của một đối tượng có sẵn trước đó
Thành phần:
• Prototype: Mẫu có sẵn sử dụng để
clone
• ConcretePrototype: Cài đặt để có
thể clone chính nó
• Client: Nơi tạo đối tượng mới bằng
cách clone mẫu (Class sử dụng
prototype)
12. 3.Pattern Prototype
Các lưu ý khi sử dụng prototype
• Quản lý các prototype: Khi số lượng các prototype
lớn, cần một nơi tập trung để quản lý các prototype
• Khi clone: Chú ý các thuộc tính của prototype
(shallow clone và deep clone)
• Initializing clones: ???
14. 3.Pattern Prototype
Kết luận:
Sử dụng prototype khi:
• Khởi tạo đối tượng tương đối phức tạp và tốn kém về hiệu năng
• Đối tượng mới tạo ra muốn độc lập so với nguyên mẫu
• Khi một instance của một đối tượng có ít trạng thái
15. 4. Kết luận và tài liệu tham khảo
Tài liệu tham khảo:
https://www.oodesign.com/singleton-pattern.html
https://www.oodesign.com/prototype-pattern.html
https://www.tutorialspoint.com/design_pattern/design_pattern_overview.htm
https://viblo.asia/p/hoc-singleton-pattern-trong-5-phut-4P856goOKY3
E-book: Java-Design-Patterns
Editor's Notes
Tài liệu tham khảo:
https://www.tutorialspoint.com/design_pattern/design_pattern_overview.htm
Link tham khảo: https://www.oodesign.com/prototype-pattern.html
https://www.geeksforgeeks.org/deep-shallow-lazy-copy-java-examples/
https://www.geeksforgeeks.org/clone-method-in-java-2/