Род Стивенс

Книги → Delphi. Готовые алгоритмы → Глава 13. Объектно-ориентированные методы

Фабрики наиболее полезны, когда два класса должны выполнять совместную работу. Например, класс-агрегат может содержать метод фабрики, который созда­ет для него итераторы. Метод фабрики будет инициализировать итератор таким образом, чтобы он был готов работать с конкретной копией агрегата, который его создал.

Программа Iter строит полные двоичные деревья, сохраненные в массиве. Пос­ле щелчка по одной из кнопок, задающих направление обхода, программа при по­мощи метода фабрики Createlterator класса TcompleteTree создает соответ­ствующий тип итератора в зависимости от нажатой кнопки.

Метод фабрики Createlterator весьма прост. Он создает соответствующий объект-итератор, передавая себя в его конструктор как параметр. Конструктор итератора сохраняет объект дерева для последующих ссылок и инициализирует его позицию в дереве. Следующий код демонстрирует метод фабрики Create­lterator и конструктор для базового класса TIterator. Индивидуальные под­классы итератора TPreorderlterator, TInorderlterator, TPostorder- Iterator и TBreadthFirstlterator наследуют этот конструктор без всяких изменений.

// Этот метод фабрики создает и возвращает соответствующий итератор.

function TcompleteTree. Createlterator (it_type : TIteratorType) : TIterator;

begin

case (it_type) of itPreorder :

Result := TPreorderlterator.Create(Self); itInorder :

Result := TInorderlterator.Create(Self);

ItPostorder :

Result := TPostorderlterator.Create(Self);

ItBreadthFirst :

Result := TBreadthFirstlterator. Create(Self);

else

Result := nil; end;

end;

// Сохранение дерева и порядка расположения узлов для данного обхода.

constructor TIterator.Create(tree : TCompleteTree);

begin

inherited Create;

TheTree := tree;

OrderNodes;

CurrentIndex := 0;

end;

После создания фабрикой соответствующего итератора программа Iter исполь­зует его для обхода дерева и перечисления узлов в соответствующем порядке. На рис. 13.5 показано окно программы Iter, отображающее обратный обход дерева.

Единственный объект

Единственный объект (singleton object) - это объект, который существуете при­ложении в единственном экземпляре. Например, в Delphi определен объект Printer (Принтер). Поскольку в одно и то же время может быть выбран только один прин­тер, указанный объект уникален.

Один из способов создания единственного объекта состоит в определении функ­ции, которая возвращает конкретный объект, объявленный в программном модуле. Чтобы не создавать большого количества копий этого класса, профамма должна объявить виртуальный абстрактный конструктор. Если профамма пытается не­посредственно создавать объект этого класса, будет вызван неопределенный конструктор, что приведет к возникновению исключитель­ной ситуации.

← предыдущая следующая →

Страницы раздела: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

Публикация компанией Dropbox кода Zulip – средства общения для IT-разработчиков

20.11.2015
Одной из одобрительно встреченных программистами инициатив, реализующихся в рамках акции Hack Week, стала публикация исходного кода приложения Zulip – веб-приложения для общения между собой разработчиков в сфере IT-технологий.

Объединение ОС Android и Chrome

17.11.2015
Слухи об объединении двух крупнейших ОС компании Google, Android и Chrome, гуляют по Интернету уже более 5 лет, но до сих пор этого не случилось, хотя очевидно, что с течением времени эти ОС становятся всё более похожими: так, в последнее время появилось немало Android-устройств, к которым прилагаются клавиатуры, а Chrome OS «научилась» работать с сенсорными экранами.

Конференция Linux Piter 2015

15.11.2015
Уже почти через неделю в Санкт-Петербурге впервые в истории пройдёт конференция, посвящённая проблемам свободного программного обеспечения – Linux Piter 2015.