(перевод с англ.: Getting Started with Cairngorm – Part 1)
В Cairngorn используется паттерн Model Locator, но им одним Cairngorn не исчерпывается. Сначала мы рассмотрим преимущества использования данного паттерна.
Model Locator - это централизованный репозиторий для всех данных, имеющихся в вашем приложенн. Ваши данные располагаются в Синглтоне (см. паттерн Одиночка). Этот "класс" может иметь только один экземпляр. Почему это так важно? Покажем это на примере.
У нас есть замечательный мини-блокнот для работы, Я в него записываю все данные в течении рабочего дня. В определенный момент я потерял блокнот и купил себе новый, а потом и нашел старый. После я записывал в оба блокнота. Мне действительно тяжело найти запись, которую я сделал допустим неделю назад. Это простой пример - но представим что у меня 20 блокнотов? Это похоже на сумашествие.
Таким образом, мы получаем "класс", который будет инстанцирован 20 раз в вашем приложении. Самый простой способ обойти эту проблему - использовать паттерн Одиночка. Одиночка - это класс который никогда не создается традиционным способом. Его главное правило - не может существовать более одного экземпляра данного класса. Я покажу на примере, как его сделать.
ActionScript:
package net.davidtucker.CairngormSample.model {
import com.adobe.cairngorm.model.IModelLocator;
[Bindable]
public class ModelLocator implements IModelLocator {
// Single Instance of Our ModelLocator
private static var instance:ModelLocator;
public function ModelLocator(enforcer:SingletonEnforcer) {
if (enforcer == null) {
throw new Error( "You Can Only Have One ModelLocator" );
}
}
// Returns the Single Instance
public static function getInstance() : ModelLocator {
if (instance == null) {
instance = new ModelLocator( new SingletonEnforcer );
}
return instance;
}
//DEFINE YOUR VARIABLES HERE
}
}
// Utility Class to Deny Access to Constructor
class SingletonEnforcer {}
Код может показаться в начале сложным, но поверьте мне, что это не так сложно как кажется. Сначала идет определение пэкаджа и нескольких классов. Далее определение интерфейса IModelLocator, которое нам понадобится в дальнейшем. IModelLocator располагается в SWC Cairngorm которым можно скачать отсюда: http://labs.adobe.com/wiki/index.php/Cairngorm:Cairngorm2.2:Download. Стоит обратить внимание, что можно использовать Model Locator без Cairngon. Я это тоже делаю для небольших проектов. Для этого необходимо будет удалить строчки 'implements IModelLocator' и 'import com.adobe.cairngorm.model.IModelLocator' из кода паттерна Model Locator.
ActionScript:
[Bindable]
public class ModelLocator implements IModelLocator {
// Single Instance of Our ModelLocator
private static var instance:ModelLocator;
Теперь у нас есть определение класса. Важно использовать метатэг [Bindable] над определение класса. Это позволит использовать все определенные внутри класса переменные. Идем дальше. Мы создаем переменную instance, которая будет иметь тип Model Locator. В ней будет храниться экземпляр нашего класса. Он будет объявлен статическим. Вы не уверены, является ли данная переменная статической? На самом деле это нормально, мы обсудим это на следующем уроке.
ActionScript:
public function ModelLocator(enforcer:SingletonEnforcer) {
if (enforcer == null) {
throw new Error( "You Can Only Have One ModelLocator" );
}
}
После этого идет конструктор. В качестве аргумента enforcer типа SingletonEnforcer. Данный класс (SingletonEnforcer) определен после нашего класса. Это делается, потому что:
- когда вы пишете класс в файле ActionScript ниже основного класса, он доступен только для этого основного класса
- конструктор требует данный аргумент, но только наш класс может его создать, т.к. мы не имеем доступа к классу SingletonEnforcer. Только основной класс
- мы не можем создать класс директивой "new", потому что мы не можем выполнить конструктор. (Я покажу вам, как мы будем это делать).
В конструкторе несколько строк кода, которые гарантируют нормальное состояние. В секции IF проверяется валидность объекта "enforcer". Если он неправильный, генерируется сообщение об ошибке.
ActionScript:
// Returns the Single Instance
public static function getInstance() : ModelLocator {
if (instance == null) {
instance = new ModelLocator( new SingletonEnforcer );
}
return instance;
}
Функция "getInstance" дает доступ из приложения к ModelLocator. Эта функция просто берет единственный экземпляр класса, а если он не создан - создает его. Мы можем получить ModelLocator используя такой код:
ActionScript:
var model:ModelLocator = ModelLocator.getInstance();
Видеопример - Создание Адресной Книги в формате FLV:
http://www.davidtucker.net/swf/flv/cairngorm1.flv
Проигрыватель для FLV:
http://www.wimpyplayer.com/products/wimpy_standalone_flv_player.html
Исходники
http://www.davidtucker.net/airtips/ModelLocatorSample.zip
Комментариев нет:
Отправить комментарий