Singleton là gì

Đặt vấn đề

Trong bài viết này bản thân sẽ giúp đỡ chúng ta vấn đáp 4 thắc mắc về Single pattern trong khoảng 5 phút ít.

You watching: Singleton là gì

Singleton Pattern là gì?Tại sao yêu cầu cần sử dụng Singleton PatternLàm cụ như thế nào để implement Singleton PatternCó các cách làm sao nhằm implement Singleton PatternLiệu tất cả đầy đủ không rò rỉ chúng ta thuộc quan sát và theo dõi nhé1. Single Pattern là gì?

Theo Gang of Four patterns một cuốn sách rất nổi tiếng về kiến thiết pattern thì Single Pattern là 1 thiết kế pattern trong các 5 thiết kế pattern trực thuộc đội Creational Design Pattern

CreationalStructureBehavioral
Abstract factoryAdapterChain of responsibility
BuilderBridgeCommand
FactoryCompositeInterpreter
PrototypeDecoratorIterator
#SingletonFacadeMediator
FlyweightMementoMemento
ProxyObserver
Strategy
Template Method
Visitor

Single Pattern là một trong kiến thiết pattern mà

Đảm nói rằng một class chỉ gồm tốt nhất một instance (khởi sản xuất - bản thân xin phép để ngulặng ko dịch từ này)Và cung ứng một cáchs toàn ước để truy hỏi cung cấp cho tới instance đó.

Vậy tại sao rất cần được thực hiện Single Pattern

2. Tại sao buộc phải dùng Singleton Pattern?

Hầu không còn những đối tượng người dùng trong một áp dụng hồ hết chịu trách nát nhiệm đến công việc của bọn chúng cùng tầm nã xuất dữ liệu tự tàng trữ (self-contained data) cùng những tsay đắm chiếu trong phạm vi được giới thiệu của bọn chúng. Tuy nhiên, có rất nhiều đối tượng tất cả thêm phần đông trách nhiệm và có tác động rộng rộng, chẳng hạn như làm chủ các nguồn tài nguyên bị giới hạn hoặc theo dõi và quan sát toàn bộ tâm lý của hệ thống.Ví dụ có thể có rất nhiều máy in vào hệ thống nhưng mà chỉ có thể tồn tại duy nhất một Sprinter Spooler (Phần quản lý máy in)

*

Hay

đưa sử vào vận dụng bao gồm tính năng tắt bật nhạc nền ví dụ điển hình, Lúc người dùng msống phầm mềm thì áp dụng đã tự động hóa mlàm việc nhạc nền với trường hợp người tiêu dùng mong muốn tắt thì đề xuất vào setting trong tiện ích nhằm tắt nó, trong setting của tiện ích chất nhận được người dùng quản ngại lí câu hỏi msinh hoạt tốt tắt nhạc, với trong trường hòa hợp này bạn sẽ đề nghị áp dụng singleton để quản ngại lí vấn đề này. Chắc chắn bạn bắt buộc bắt buộc tuyệt nhất 1 instance để có thể chỉ thị bật xuất xắc tắt, tại vì sao ? do đơn giản và dễ dàng bạn quan yếu sinh sản 1 instance để msống nhạc rồi kế tiếp lại tạo thành 1 instance không giống để tắt nhạc, lúc này sẽ có 2 instance được tạo thành, 2 instance này sẽ không liên quan mang lại nhau đề xuất thiết yếu triển khai triển khai bài toán cho nhau được, chúng ta bắt buộc hiểu rõ rằng instance nào nhảy thì chỉ bao gồm instance kia bắt đầu được phxay tắt phải dẫn mang lại bắt buộc cần 1 instance.

3.Làm rứa như thế nào để implement Singleton Pattern

Vậy là thế nào để có thể implement Singleton Pattern chúng ta cần trả lời 2 ý hỏi.

See more: First Name, Last Name, Middle Name Là Gì, Middle Name

Làm sao để 1 class chỉ có thể có duy nhất 1instance?Trả lờiPrivate constructor của class đó để đảm bảo rằng class lớp khác ko thể truy cập vào constructor và đem tới instance mớiTạo một biến private static là thể hiện của class đó để đảm bảo rằng nó là duy nhất và chỉ được tạo nên vào class kia thôi.Làm sao để có thể chỗ trợ một cáchs toàn mong để truy cấp tới instance kia.Trả lờiTạo một public static menthod trả về instance vừa khởi tạo trên, trên đây là cách duy nhất để các class khác có thể tầm nã cập vào instance của class này

Vậy cụ thể có những cách nào để implement Singleton Pattern

4. Có các phương pháp làm sao nhằm implement Singleton Pattern

4.1 Eager initialization

public class EagerInitializedSingleton private static final EagerInitializedSingleton instance = new EagerInitializedSingleton(); //private constructor to avoid client applications to lớn use constructor private EagerInitializedSingleton() public static EagerInitializedSingleton getInstance() return instance; Đây là giải pháp dễ nhất dẫu vậy nó tất cả một nhược điểm là tuy nhiên instance đã có được khởi tạo nên nhưng mà có thể sẽ không dùng tới.vì vậy chúng ta có cách thứ 2.

4.2 Lazy initialization

public class LazyInitializedSingleton private static LazyInitializedSingleton instance; private LazyInitializedSingleton() public static LazyInitializedSingleton getInstance() if(instance == null) instance = new LazyInitializedSingleton(); return instance; Cách này đã khắc phục được nhược điểm của cách 1 Eager initialization, chỉ khi nào geInstance được hiểu thì instance mới được khởi tạo.Tuy nhiên cách này chỉ sử dụng xuất xắc vào trường hợp đối kháng 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.Vậy ta phải làm sao với trường hợp đa luồng. chúng ta đi tới cách tiếp theo

4.3 Thread Safe initialization

public class ThreadSafeSingleton { private static ThreadSafeSingleton instance; private ThreadSafeSingleton() public static synchronized ThreadSafeSingleton getInstance() if(instance == null) instance = new ThreadSafeSingleton(); return instance; Cách solo gảin nhất là chúng ta hiểu phương thức synchronized của hàm getInstance() và nhỏng vậy hệ thống đảm bảo rằng tại cùng một thời điểm chỉ có thể có 1 luồng có thể truy nã cập vào hàm getInstance(), và đảm bảo rằng chỉ có duy nhất 1 thể hiện của classTuy nhiên một menthod synchronized sẽ chạy rất chậm và tốn hiệu năng vì vậy chúng ta cần cải tiến nó đi 1 chút.

See more: Rickroll Là Gì ? Giải Thích Đúng Nhất! Meme Rick Roll Là Gì

4.4 Thread Safe Upgrade initialization

Mình tạm gọi nó là Thread Safe Upgrade initialization, cầm cố vì chúng ta Thread Safe cả menthod getInstance() chúng ta chỉ Thread Safe một đoạn mã quan liêu trong

ublic class ThreadSafeSingleton private static ThreadSafeSingleton instance; private ThreadSafeSingleton() public static ThreadSafeSingleton getInstance() if(instance == null) synchronized(ThreadSafeSingleton.class) if(instance == null) instance = new ThreadSafeSingleton(); return instance; Có rất nhiều cách implement mang lại Singleton, mình thì xuất xắc sử dụng cách 2 mang lại những ứng dụng chỉ làm việc với 1 thread và cách thứ 4 mang đến trường hợp nhiều luồng.Các bạn hãy chọn đến mình cách implement phù hợp đến từng trường hợp nhé.

*
Trên đây là phần chia sẻ của mình về Singleton, các khách hàng có thể tsay đắm khảo slide của mình tại links sau https://goo.gl/KUtZsW.Chúc các quý khách học tốt!


Chuyên mục: Giải Đáp