Модераторы: SoWa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Логгер, Конкретный пример Observer 
:(
    Опции темы
AntonioBanderaz
Дата 1.11.2006, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 18



Пример использования 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: Оладка



--------------------
ГЫ... 
PM MAIL ICQ   Вверх
Maksys
Дата 1.11.2006, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Future Splasher
***


Профиль
Группа: Завсегдатай
Сообщений: 1289
Регистрация: 15.6.2005
Где: Екатеринбург

Репутация: нет
Всего: 17



Цитата(AntonioBanderaz @  1.11.2006,  15:58 Найти цитируемый пост)
 их становится всё 
больше и больше, и разобраться в них становится всё сложнее.

Тайну открою хочешь...  берешь первую ошибку.. исправляешь.. и другие автоматически лечатся..

А так прикольно тебе делать то нефиг smile smile 


--------------------
 С уважением, BiMaWa™©.
user posted image
user posted image
PM MAIL ICQ Skype GTalk   Вверх
AntonioBanderaz
Дата 2.11.2006, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 18



Цитата(Maksys @  1.11.2006,  21:18 Найти цитируемый пост)
А так прикольно тебе делать то нефиг smile smile 

Всмысле?


--------------------
ГЫ... 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | ActionScript 3 | Следующая тема »


 




[ Время генерации скрипта: 0.0444 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.