Показать сообщение отдельно
Старый 27.11.2017, 20:26
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 8  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Сообщение от ZergMaster Посмотреть сообщение
пожалуй! Хотя кем жеж это надо быть, чтобы изнутри этого класса пытаться создавать множество инстансов)) Эдак себя бить себя по рукам постоянно надо. )
А извне то все равно больше одного не создашь.
Да почему изнутри то? Я же написал как можно создать сколько угодно таких экземлпяров. И сделал это извне. Сначала вызывается MySinglton.instance; Этот вызов ставит флаг isConstructring в true, а дальше создавай как обычные экземпляры его сколько угодно, он уже не синглтон
Туплю. Я не обратил внимание, что там флаг снова ставится в false сразу же после создания.
Да, способ хороший.
п.с. Малость офтоп, но мне нравится реализация синглтона в C# в Unity
Код AS3:
using UnityEngine;
public class Singleton<T> : MonoBehaviour where T : MonoBehaviour
{
	private static T _instance;
 
	private static object _lockObject = new object();
 
	public static T Instance {
		get {
			if (applicationIsQuitting) {
				return null;
			}
 
			lock(_lockObject)
			{
				if (_instance == null) {
					_instance = (T) FindObjectOfType(typeof(T));
 
					if ( FindObjectsOfType(typeof(T)).Length > 1 ) {
						return _instance;
					}
 
					if (_instance == null) {
						GameObject singleton = new GameObject();
						_instance = singleton.AddComponent<T>();
						singleton.name = "(singleton) "+ typeof(T).ToString();
						DontDestroyOnLoad(singleton);
					} 
				}
 
				return _instance;
			}
		}
	}
 
	private static bool applicationIsQuitting = false;
 
	public void OnDestroy () {
		applicationIsQuitting = true;
	}
}
А дальше по этому шаблону создаем сколько угодно разных синглтонов всего лишь создав такой класс
Код AS3:
using UnityEngine;
 
public class SomeSinglton: Singleton<SoundManager> {
 
}
И можно уже обращаться к нему
Код AS3:
SomeSinglton.Instance;
Очень удобная штука, и мне ее катастрофически нехватает в as3 теперь)
__________________
Ко мне можно и нужно обращаться на ты)