Показать сообщение отдельно
Старый 19.03.2008, 16:21
WindWalker вне форума Посмотреть профиль Отправить личное сообщение для WindWalker Найти все сообщения от WindWalker
  № 52  
Ответить с цитированием
WindWalker

Регистрация: Nov 2006
Сообщений: 223
Во.
Есть интерфейс:
Код:
package {
	public interface IDoer {
		function doSomething():void;
	}
}
Вот класс, который использует синглтон:
Код:
package {
	public class User {
		public function User() {
			var doer1:IDoer = new Singleton();
			var doer2:IDoer = new Singleton();

			doer1.doSomething();
			doer2.doSomething();
		}
	}
}
А вот непосредственно реализация синглтона:
Код:
package {

	public class Singleton implements IDoer {
		
		private var realDoer:IDoer;

		public function Singleton() {
		    realDoer = RealSingleton.getInstance();
		}

		public function doSomething():void {
			realDoer.doSomething();
		}
	}
}

internal class RealSingleton implements IDoer {

	private var counter:int = 0;
	private static var instance:RealSingleton;

	public static function getInstance():RealSingleton {
		if (!instance) instance = new RealSingleton();
		return instance;
	}

	public function doSomething():void {
		trace(counter+": Hello world!");
		counter++;
	}
}
Плюс такого подхода, в том, что никто извне не знает, что это синглтон.
Используют как обычный класс.
Таким образом, если мы решим отказаться от использования синглтона (например, потребуется несколько соединений к серверу), то меняем только один файл. Для остальных классов ничего не изменилось.

То есть уровень абстракции выше, переделка в обычный класс совершенно прозрачна.