Mở đầu

Singleton Pattern là một trong những pattern cực kì cơ phiên bản và kết quả mà chắc hẳn rằng rất các lập trình viên trong bọn họ vẫn sử dụng tiếp tục nên mình sẽ chỉ share về định nghĩa thôi.

Mục đích của Singleton Pattern

Một class thuộc dạng Singleton có nghĩa là: nó chỉ có một instance duy nhất, bất kỳ ở đâu đều hoàn toàn có thể truy cập cho tới instance của class singleton đó.Điển hình nhất mà ta vẫn thấy lúc lập trình game sẽ là GameManager, AudioManager, RoundManager, GameCenterManager, AdsManager,…


*
*
*
Singleton – Anti-pattern

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

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

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

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

“Nghe rất lớn vậy, thế tất cả nên thực hiện Singleton Pattern không?”

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

Implement Singleton Pattern trong Unity3D

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

Xem thêm: Giải Bài 9 Trang 59 Sgk Hình Học 10, Bài 9 Trang 59 Sgk Hình Học 10: Bài 3


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 các bạn có vướng mắc hay chủ ý về bài viết vui lòng liên hệ mình qua page hoặc comment phía 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. Các trường nên được lưu lại *