Руководство по actionscript. часть 3, стр. 023
Public class EnglishSearchOptions extends SearchOptions { private var kanjiInResults:Boolean = false;
public function getKanjilnResults ( ):Boolean { return kanjiInResults;
}
public fun’ction setKanjiInResults (newKanjiInResults:Boolean):void { kanjiInResults = newKanjiInResults;
}
}
}
Наконец, рассмотрим основной класс приложения JEDict ionary, в котором происходит основная «магия», связанная с использованием пространств имен. Бегло просмотрите код класса, представленный в листинге 17.7, после чего мы рассмотрим его более подробно.
Листинг 17.7. Класс JEDictionary
package { import flash. display. Sprite;
public class JEDictionary extends Sprite { private var queryMan:QueryManager;
japanese var options:JapaneseSearchOptions; english var options:EnglishSearchOptions;
private var lang:Namespace;
public function JEDictionary( ) { queryMan = new QueryManager( );
japanese::options = new JapaneseSearchOptions( );
japanese::options. setMatchType(SearchOptions. MATCH_STARTSWITH);
japanese: :options. setEnglishVari ant (JapaneseSearchOptions. ENGLISHES);
english::options = new EnglishSearchOptions( );
engl i sh::opti ons. setMatchType(SearchOpti ons. MATCH_CONTAINS);
engli sh::opti ons. setKanjiInResul ts(true);
// Найти перевод японского слова… setModeJapaneseToEnglish( ); findWordC’sakana»);
// Найти перевод английского слова… setModeEnglishToJapaneseC ); findWordC’fish»);
}
public function findWord (word:String):void { var words:Array = queryMan. lang::search(word, lang::options); tracer Words found: » + words);
public function setModeEnglishToJapanese ( ):void { lang = english;
}
public function setModeJapaneseToEnglish ( ):void { lang = japanese;
}
}
}
Итак, основной класс приложения JEDictionary расширяет класс Sprite: public class JEDictionary extends Sprite {
Для поиска класс JEDictionary создает экземпляр класса QueryManager, который присваивается переменной queryMan:
private var queryMan:QueryManager;
Затем класс JEDictionary создает две переменные, каждая из которых имеет локальное имя options, уточняемое пространствами имен j apanese и english. Эти переменные хранят настройки поиска, которые будут передаваться в метод экземпляра search ( ) класса QueryManager. Обратите внимание, что их типы данных соответствуют типу выполняемого поиска:
japanese var options:JapaneseSearchOptions; english var options:EnglishSearchOptions;
После этого идет определение важной переменной lang, которая ссылается на пространство имен, соответствующее текущему режиму словаря (японскому или английскому):
private var lang:Namespace;
Это все, что касается переменных класса JEDictionary; теперь рассмотрим его методы: setModeEnglishTo Japanese ( ), setModeJapaneseToEnglish ( ) и findWord ( ). Они активизируют различные режимы словаря, присваивая переменной lang пространство имен english или j арапеse соответственно:
public function setModeEnglishToJapanese ( ):void { lang = english;
}
public function setModeJapaneseToEnglish ( ):void { lang = Japanese;
}
Метод findWord ( ) применяет объект класса QueryManager для выполнения поиска в словаре, используя подходящий метод search ( ). Вызов метода search ( ) является самой важной строкой кода в нашем примере со словарем:
queryMan. lang::search(word, lang::options)
Обратите внимание, что пространство имен (режим программы) определяет не только тип выполняемого поиска (поведение), но и тип вариантов, используемых для этого поиска (данные). Когда переменной lang присвоено пространство имен j арапе se, вызывается метод j арапе se: : search ( ), в который передается объект JapaneseSearchOptions. Когда переменной lang присвоено пространство имен english, вызывается метод english: : search ( ), в который передается объект EnglishSearchOptions.