Singleton là gì

     
Mở đầu

Singleton Pattern là 1 trong pattern cực kì cơ phiên bản và tác dụng mà chắc hẳn rằng rất các lập trình viên trong họ vẫn sử dụng liên tiếp nên mình vẫn chỉ tóm tắt về có mang thôi.

Mục đích của Singleton Pattern

Một class ở trong dạng Singleton gồm nghĩa là: nó chỉ bao gồm một instance duy nhất, ngẫu nhiên ở đâu đều rất có thể truy cập tới instance của class singleton đó.Điển hình nhất mà ta vẫn thấy khi lập trình game đó là GameManager, AudioManager, RoundManager, GameCenterManager, AdsManager,…


*
*
*
Singleton – Anti-pattern

“Tại sao Singleton lại là anti-pattern?”

Đầu tiên, các Singletons không được khai báo bên dưới dạng trở thành hay dạng tường minh, cơ mà được áp dụng một bí quyết globally, trực tiếp tay áp dụng instance ngay trong code nhưng không nên khai báo.Lợi ích này mặt khác sẽ làm code trở nên bí hiểm hơn, các bạn sẽ không biết được code mình đã sử dụng những singletons (dependencies) làm sao sau 1 – 2 tháng hiểu lại code, hay tín đồ khác (đồng nghiệp) gọi hiểu code của mình, việc duy nhất lúc này là ngồi soi lại từng đoạn code.

Bạn đang xem: Singleton là gì

Thứ hai, Singleton không áp dụng đa hình được yêu cầu chỉ hoàn toàn có thể sử dụng đúng tên của class Singleton đó. Ví dụ ban sơ bạn có Player Singleton, trong tương lai lại ra đời XaydaPlayer với NamekPlayer,… thừa kế từ Player Singleton nhưng các bạn lại không áp dụng được bởi không áp dụng được nhiều hình, đồng nghĩa với việc code của công ty đã bị dính nối với class Player

“Nghe cực kỳ nghiêm trọng vậy, thế bao gồm nên sử dụng Singleton Pattern không?”

Có chứ, với những project nhỏ, Singleton Pattern chưa phải là sự việc gì béo cả, để sản xuất ra một sản phẩm lập cập (prototype) tuyệt minimum viable product nhằm kiểm thử người tiêu dùng thì mình vẫn ưu tiên sử dụng.

Xem thêm: Đầu Số 00670 Của Nước Nào - Mã Vùng +670 / 00670 / 011670 (Đầu Số)

Implement Singleton Pattern vào Unity3D

Cách implement singleton pattern khá dễ dàng vì vậy mình chỉ show code mình hay xài vậy.

Xem thêm: 5 Cách Chữa Đau Buốt Răng Bị Nhức Phải Làm Sao, 6 Cách Giảm Đau Răng Vào Ban Đêm Hiệu Quả


using UnityEngine;public abstract class MonoSingleton : MonoBehaviour where T : MonoSingleton private static T m_Instance = null; static bool shuttingDown = false; public static T Instance get if (m_Instance == null && !shuttingDown && Application.isPlaying) m_Instance = FindObjectOfType(typeof(T)) as T; if (m_Instance == null) Debug.LogWarning("No instance of " + typeof(T).ToString() + ", a temporary one is created."); m_Instance = new GameObject("Temp Instance of " + typeof(T).ToString(), typeof(T)).GetComponent(); return m_Instance; protected virtual void Awake() if (m_Instance == null) m_Instance = this as T; else if (m_Instance != this) Debug.LogError("Another instance of " + GetType() + " is already exist! Destroying self..."); DestroyImmediate(gameObject); return; protected virtual void OnDestroy() if (this == m_Instance) m_Instance = null; private void OnApplicationQuit() m_Instance = null; shuttingDown = true;
Lời kếtNếu chúng ta có thắc mắc hay ý kiến về bài viết vui lòng tương tác mình qua page hoặc comment phía bên dưới nhé.

Nguồn tham khảo:


Trả lời Hủy

Email của bạn sẽ không được hiển thị công khai. Những trường bắt buộc được ghi lại *