Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 22

Design Patterns

Singleton

Nhóm 13
Nhóm 13
Nhóm 13
Design Patterns

Mục lục
Khái niệm
Lợi ích
Phân loại
Cách sử dụng
CONCEPT OF DESIGN PATTERNS
What
is
Design Patterns ?

Design Patterns là các “mẫu thiết kế” - giải


pháp để giải quyết các vấn đề thường gặp
trong việc lập trình.

Nhóm 13
CHARACTER OF DESIGN
Benefits of PATTERNS
-Tăng tốc độ phát triển phần mềm: Design Pattern đưa
ra khuôn mẫu giúp developer có được hướng giải quyết

Design Patterns nhanh chóng và hiệu quả.


- Hạn chế lỗi tiềm ẩn: Sử dụng giải pháp đã được chứng
minh và công nhận giúp ta không còn lo lắng về các lỗi
tiềm ẩn nữa.
-Hỗ trợ tái sử dụng mã lệnh: Các mẫu thiết kế có thể
Bằng cách sử dụng design patterns, ta sẽ được sử dụng hàng triệu lần mà không nảy sinh bất cứ
vấn đề nào. Từ đó developer dễ dàng mở rộng, nâng cấp
tạo ra những đoạn code linh hoạt hơn, có
và bảo trì để đáp ứng được các yêu cầu thay đổi liên tục
khả năng tái sử dụng cao, và dễ bảo trì của dự án.
nâng cấp hơn. -Giúp code dễ đọc hơn: Việc sử dụng Design Pattern
giúp cho code dễ đọc hơn khi làm việc nhóm cũng như
giao tiếp thuận lợi hơn vì có được tiếng nói chung.

Nhóm 13
Types of Design Patterns

Nhóm 13
Types of Design Patterns
Creational Pattern (nhóm khởi tạo): tập hợp các giải pháp liên quan đến khởi tạo
đối tượng.

Structural Pattern (nhóm cấu trúc): tập hợp các giải pháp liên quan đến thiết lập kết
cấu, liên hệ giữa các đối tượng.

Behavioral Pattern (nhóm hành vi): tập hợp các giải pháp liên quan đến các hành vi
của đối tượng và giao tiếp giữa các đối tượng khác nhau.

Nhóm 13
How to Design Patterns
use (demo)

Nhóm 13
Pattern
Singleton
Một trong 5 design pattern của
nhóm Creational Design Pattern.

Nhóm 13
Nhóm 13
Singleton Pattern

Mục lục
Khái niệm
Lợi ích
Phân loại
Cách sử dụng
Đặt vấn đề
Các bài toán cần truy cập vào các ứng dụng như: Shared resource,
Logger, Configuration, Caching, Thread pool, …

==> Chỉ cần tồn tại 1 Instance (thể hiện)

==> Sử dụng Singleton Pattern

==> Một số design pattern khác cũng sử dụng


Singleton để triển khai: Abstract Factory, Builder,
Prototype, Facade,…

Nhóm 13
CONCEPT OF SINGLE PATTERN
What
is
Singleton
Pattern ?
Là mẫu thiết kế đảm bảo:
- Một class chỉ có duy nhất một instance.
- Cung cấp một điểm truy cập gobal vào
instance đó.

Nhóm 13
MAJOR COMPONENTS
What
is
Static variable: Dùng để đảm bảo rằng bộ nhớ chỉ

Singleton được cấp phát một lần, duy trì phiên bản duy nhất
của lớp Singleton.

Pattern ? Private constructor: Ngăn chặn việc các phương


thức bên ngoài lớp của nó tạo ra instance mới, đảm
bảo rằng lớp có quyền kiểm soát quá trình khởi tạo
của nó.

Static method: Phương thức này hoạt động như một


cổng, cung cấp global access vào Singleton object.
Khi tạo một instance, phương thức này sẽ tạo một
instance mới (nếu chưa khởi tạo) hoặc trả về
instance hiện có cho người gọi.
Benefits of BENEFITS

Dễ dàng quản lý trạng thái: Trạng thái của lớp


Singleton Pattern được tập trung vào một nơi duy nhất, giúp ta dễ
dàng theo dõi và sửa đổi.

Tránh xung đột dữ liệu: Khi chỉ có một thể hiện,


các thao tác truy cập và sửa đổi dữ liệu sẽ diễn ra
Bằng cách sử dụng singleton pattern, ta có đồng bộ, tránh tình trạng xung đột dữ liệu do
thể tạo ra một đối tượng duy nhất sử dụng nhiều thể hiện truy cập cùng lúc.
cho toàn ứng dụng. Tiết kiệm tài nguyên: Việc chỉ tạo ra một thể hiện
duy nhất giúp tiết kiệm bộ nhớ và tài nguyên hệ
thống, đặc biệt là cho các lớp có dữ liệu nặng hoặc
tốn kém khi khởi tạo.

Nhóm 13
Defects of DEFECTS

Tạo nhiều phiên bản: Trong hệ thống với nhiều


Singleton Pattern classloaders, mỗi classloader có thể tạo ra một
phiên bản Singleton riêng vì chúng hoạt động độc
lập.

Khó kiểm soát: Quản lý Singleton đúng trong


classloader yêu cầu kiến thức về cơ chế
Sử dụng singleton pattern có một số nhược classloading trong Java và sự cẩn trọng.
điểm sau:
Khó debug và kiểm tra: Singleton có thể được truy
cập và thay đổi một cách khắp nơi trong code, gây
khó khăn trong việc kiểm tra và debug.

Quản lý lifecycle phức tạp: Việc kiểm soát việc


khởi tạo và phá hủy Singleton có thể làm cho việc
quản lý lifecycle trở nên phức tạp.
Nhóm 13
How to Single pattern
use 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ử dung synchrozed
. Serialization: Overide method readResolve()
· Classloaders: Sử dụng một classloaders

Nhóm 13
How to Single pattern
use
Eager initialization
Đây là cách dễ nhất nhưng nó có một nhược điểm là mặc dù instance đã được
khởi tạo nhưng có thể sẽ không dùng tới.

Nhóm 13
How to Single pattern
use
Lazy initialization
Cách này đã khắc phục được nhược điểm của Eager initialization, chỉ khi nào
geInstance được gọi thì instance mới được khởi tạo. Tuy nhiên cách này chỉ sử
dụng tốt trong trường hợp đơn luồng, trường hợp nếu có 2 luồng cùng chạy và
cùng gọi hàm getInstance tại cùng một thời điểm thì đương nhiên chúng ta có ít
nhất 2 thể hiện của instance

Nhóm 13
How to Single pattern
use
Lazy initialization

Nhóm 13
How to Single pattern
use
Thread Safe initialization :Sử dụng synchronized block nếu instance chưa được khởi tạo
Tài liệu tham khảo

https://itviec.com/blog/design-pattern/
https://www.geeksforgeeks.org/singleton-design-pattern/
https://viblo.asia/p/hoc-singleton-pattern-trong-5-phut-
4P856goOKY3

You might also like