Blogs

Vài Điều Về Singleton Pattern Là Gì Và Có Nên Sử Dụng Singleton Pattern?

Bạn đang quan tâm đến Vài Điều Về Singleton Pattern Là Gì Và Có Nên Sử Dụng Singleton Pattern? phải không? Nào hãy cùng VCCIDATA đón xem bài viết này ngay sau đây nhé, vì nó vô cùng thú vị và hay đấy!

XEM VIDEO Vài Điều Về Singleton Pattern Là Gì Và Có Nên Sử Dụng Singleton Pattern? tại đây.

1. Singleton Pattern là gì?

Singleton Pattern là 1 mẫu thiết kế tạo dựng (Creation Pattern)

Singleton Pattern được dùng để ngăn cản việc tạo các thể hiện của một lớp (class) nhằm đảm bảo rằng luôn chỉ có 1 thể hiện của class tồn tại trong JVM.

Đang xem: Singleton pattern là gì

Class Singleton Pattern phải cung cấp 1 điểm truy cập global để lấy ra được thể hiện của class.

Singleton Pattern được dùng cho logging, các driver object, caching và thread pools.

Singleton Pattern cũng được sử dụng trong các Design Pattern khác như Abstract Factory, Builder, Facede…

Một số class Singleton trong Java core như java.lang.Runtime, java.awt.Desktop

(Luôn chỉ có nhiều nhất 1 object của class java.lang.Runtime, java.awt.Desktop được tạo)

Singleton Pattern – Code ví dụ Singleton Pattern bằng Java.

2. Singleton Pattern UML Diagram.

Một Singleton Pattern thường là 1 class (Class Singleton) có các đặc điểm:

Hàm khởi tạo private để ngăn cản việc tạo thể hiện của class từ các class khácBiến private static của class, nó là thể hiện duy nhất của class.Method public static để trả về thể hiện của class.

*

3. Cách tạo một class Singleton Pattern.

Xem thêm: Vòng Đeo Tay Công Giáo Vòng Đeo Tay Bằng Gỗ Giá Trị Tốt Nhất

Cách 1: eager initialization

Thể hiện Singleton Class được tạo lúc class được tải , đây là cách dễ dàng nhất để tạo 1 singleton class nhưng nó có nhược điểm là thể hiện được tạo kể cả khi nó không được dùng đến, và không thể bắt được ngoại lệ lúc tạo thể hiện.

XEM THÊM:  Debit Card Là Gì - Phân Loại Thẻ Ghi Nợ Và Thẻ Tín Dụng

public class EagerInitializedSingleton { private static final EagerInitializedSingleton instance = new EagerInitializedSingleton(); //private constructor to avoid client applications to use constructor private EagerInitializedSingleton(){} public static EagerInitializedSingleton getInstance(){ return instance; }}

 Cách 2: Static block initialization

Khởi tạo bằng static block, nó giống hệt cách 1 tuy nhiên có thể sử lý được ngoại lệ khi khởi tạo thể hiện đầu tiên.

public class StaticBlockSingleton { private static StaticBlockSingleton instance; private StaticBlockSingleton(){} //static block initialization for exception handling static{ try{ instance = new StaticBlockSingleton(); }catch(Exception e){ throw new RuntimeException(“Exception occured in creating singleton instance”); } } public static StaticBlockSingleton getInstance(){ return instance; }}

Cách 3: Lazy initialization

Tạo thể hiện của Class Singleton trong method access. Cách này có nhược điểm là không hoạt động đúng trong trường hợp có nhiều thread, giả sử có nhiều thread cùng lúc gọi method getInstance() sẽ có nhiều thể hiện khác nhau được tạo.

public class LazyInitializedSingleton { private static LazyInitializedSingleton instance; private LazyInitializedSingleton(){} public static LazyInitializedSingleton getInstance(){ if(instance == null){ instance = new LazyInitializedSingleton(); } return instance; }}

Cách 4: Thread Safe Singleton

Giống cách thứ 3 nhưng method getInstance() được đánh dấu là synchronized  tức là chỉ có duy nhất 1 thread được gọi đến nó trong 1 thời điểm.

public class ThreadSafeSingleton { private static ThreadSafeSingleton instance; private ThreadSafeSingleton(){} public static synchronized ThreadSafeSingleton getInstance(){ if(instance == null){ instance = new ThreadSafeSingleton(); } return instance; } }

Cách 5: Bill Pugh Singleton Implementation

Tạo thể hiện của class Singleton bằng static inner class.

Khi singleton class được tải, class SingletonHeplper vẫn không được tải vào bộ nhớ mà chỉ khi method getInstance() được gọi, class này mới được tải và tạo thể hiện cho Singleton class

XEM THÊM:  Bảng Kí Tự Đặc Biệt Word ), Chèn Các Ký Tự Đặc Biệt Trong Văn Bản Word

public class BillPughSingleton { private BillPughSingleton(){} private static class SingletonHelper{ private static final BillPughSingleton INSTANCE = new BillPughSingleton(); } public static BillPughSingleton getInstance(){ return SingletonHelper.INSTANCE; }}

Cách 6: Sử dụng Enum

public enum EnumSingleton { INSTANCE; public static void doSomething(){ //do something }}Ngoài ra còn một số cách ít dùng khác như “Using Reflection to destroy Singleton Pattern”, “Serialization and Singleton”…

Singleton Pattern – Code ví dụ Singleton Pattern bằng Java.

Xem thêm: Cách Phân Biệt Vòng Tay Ngà Voi Giá Bao Nhiêu Và Có Phạm Pháp Không

References: https://www.journaldev.com/1377/java-singleton-design-pattern-best-practices-examples

This entry was posted in Design Pattern and tagged design pattern. Bookmark the permalink.

Điều hướng bài viết

Vậy là đến đây bài viết về Vài Điều Về Singleton Pattern Là Gì Và Có Nên Sử Dụng Singleton Pattern? đã dừng lại rồi. Hy vọng bạn luôn theo dõi và đọc những bài viết hay của chúng tôi trên website VCCIDATA.COM.VN

Chúc các bạn luôn gặt hái nhiều thành công trong cuộc sống!

Related Articles

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Back to top button