Пример использования Observer Всегда сталкивался с проблемой отслеживания ошибок во флеше, всегда выводишь какие-нибудь сообщения в trace, и со временем их становится всё больше и больше, и разобраться в них становится всё сложнее. Конкретная реализация паттерна Observer на примере logger'a. Log.as Интерфейс нашего логгера. | Код | package com.avelichko.utils.logger { import com.avelichko.pattern.observer.Observer; public interface Log { function addLogView(o:Observer):void; function removeLogView(o:Observer):void; function fatal(msg:String):void; function critical(msg:String):void; function error(msg:String):void; function warn(msg:String):void; function info(msg:String):void; function debug(msg:String):void; } }
|
Logger.as базовый класс логгера, расштиряющий Observable | Код | package com.avelichko.utils.logger { import com.avelichko.pattern.observer.Observable; import com.avelichko.pattern.observer.ObserverMessage; import com.avelichko.lang.util.Iterator; import com.avelichko.pattern.observer.Observer;
public class Logger extends Observable implements Log { public static var FATAL:int = 0; public static var CRITICAL:int = 1; public static var ERROR:int = 2; public static var WARN:int = 3; public static var INFO:int = 4; public static var DEBUG:int = 5; private static var typeDescr:Array = ["FATAL","CRITICAL","ERROR","WARN","INFO","DEBUG"]; private var logLevel:int = 4; public function Logger(t:int) { super(); logLevel = t; new TraceView(this); } private function log(type:int, mess:String):void { if(type > logLevel) { return; } var msg:ObserverMessage = new ObserverMessage(); msg.type = type; msg.msg = mess; notifyObservers(msg); } public static function getTypeDescr(t:int):String { if(t < typeDescr.length && t >= 0) return typeDescr[t]; return "INFO"; } public function addLogView(o:Observer):void { super.addObserver(o); } public function removeLogView(o:Observer):void { super.removeObserver(o); } public function fatal(msg:String):void { log(Logger.FATAL, msg); } public function critical(msg:String):void { log(Logger.CRITICAL, msg); } public function error(msg:String):void { log(Logger.ERROR, msg); } public function warn(msg:String):void { log(Logger.WARN, msg); } public function info(msg:String):void { log(Logger.INFO, msg); } public function debug(msg:String):void { log(Logger.DEBUG, msg); } } }
|
TraceView.as вывод сообщений в консоль. Имплементирует Observer | Код | package com.avelichko.utils.logger { import com.avelichko.pattern.observer.Observer; import com.avelichko.pattern.observer.ObserverMessage; import com.avelichko.lang.util.exceptions.NullPointerException; import com.avelichko.pattern.observer.Observable;
public class TraceView implements Observer { private var logger:Log = null; public function update(o:Observable, msg:ObserverMessage):void { trace(Logger.getTypeDescr(msg.type).toString() + ": " + msg.msg.toString()); } public function TraceView(l:Log) { if(l == null) throw new NullPointerException("Logger cant be null"); logger = l; logger.addLogView(this); } public function destroy():void { logger.removeLogView(this); logger = null; } } }
|
Пример использования | Код | var lg:Log = new Logger(Logger.DEBUG); lg.fatal("Фатальное сообщение"); lg.critical("Криттичное сообщение"); lg.error("Ошибочка"); lg.warn("Предупреждение"); lg.info("Информация"); lg.debug("Оладка");
|
Ны выходе | Код | FATAL: Фатальное сообщение CRITICAL: Криттичное сообщение ERROR: Ошибочка WARN: Предупреждение INFO: Информация DEBUG: Оладка
|
--------------------
ГЫ...
|