Интерфейс MultiDoc
public interface MultiDoc
Интерфейс MultiDoc определяет интерфейс объекта, который предоставляет более одной части данных для печати для задания печати. «Doc» — это краткое и легко произносимое слово, обозначающее «часть данных для печати», а «multidoc» — это группа нескольких документов. Клиент передает заданию печати объект, реализующий интерфейс MultiDoc, и задание печати вызывает методы этого объекта для получения данных печати.
Интерфейс MultiDoc предоставляет абстракцию, аналогичную «связному списку» документов. Объект multidoc подобен узлу в связном списке, содержащему текущий документ в списке и указатель на следующий узел (multidoc) в списке. Задание печати может вызвать метод multidoc getDoc() для получения текущего документа. Когда ему нужно перейти к следующему документу, задание печати может вызвать метод multidoc next() для получения следующего multidoc, который содержит следующий документ. Вот как может выглядеть код задания печати для доступа к multidoc:
void processMultiDoc(MultiDoc theMultiDoc) {
MultiDoc current = theMultiDoc;
while (current != null) {
processDoc (current.getDoc());
current = current.next();
}
} Конечно, интерфейс MultiDoc может быть реализован любым способом, который выполняет контракт; он не обязан использовать связный список в реализации.
Чтобы получить все данные для печати для задания печати multidoc, прокси-сервис печати может использовать любой из двух шаблонов:
- Шаблон перемежаемости: Получить документ из текущего multidoc. Получить объект представления данных печати из текущего документа. Получить все данные печати из объекта представления данных печати. Получить следующий multidoc из текущего multidoc и повторять, пока не закончатся документы. (В приведенном выше примере кода используется шаблон перемежаемости.)
- Шаблон все сразу: Получить документ из текущего multidoc и сохранить документ в списке. Получить следующий multidoc из текущего multidoc и повторять, пока не закончатся документы. Затем перебрать список сохраненных документов. Получить объект представления данных печати из текущего документа. Получить все данные печати из объекта представления данных печати. Перейти к следующему документу в списке и повторять, пока не закончатся документы.
Для решения этой проблемы и упрощения проектирования клиентов, предоставляющих несколько документов заданию печати, каждый прокси-сервис печати, поддерживающий задания печати multidoc, обязан получать доступ к объекту MultiDoc, используя шаблон перемежаемости. То есть, имея объект MultiDoc, прокси-сервис печати вызовет getDoc() один или несколько раз, пока не получит текущий объект Doc. Затем прокси-сервис печати получит данные печати текущего документа, не переходя к следующему, пока не будут получены все данные печати или не произойдет неисправимая ошибка. Если продолжение возможно, прокси-сервис печати вызовет next() один или несколько раз, пока не получит либо следующий объект MultiDoc, либо указание о том, что больше нет документов. Реализация интерфейса MultiDoc может предполагать, что прокси-сервис печати будет следовать этому шаблону перемежаемости; для любого другого шаблона использования поведение реализации MultiDoc не определено.
Нет ограничений на количество клиентских потоков, которые могут одновременно получать доступ к одному и тому же multidoc. Поэтому все реализации интерфейса MultiDoc должны быть спроектированы так, чтобы быть многопоточно безопасными. Фактически, один клиентский поток мог бы добавлять документы в конец (мысленного) списка, в то время как поток задания печати одновременно получает документы с начала списка; при условии, что объект multidoc должным образом синхронизирует потоки, два потока не будут мешать друг другу.
Методы
| Модификатор и тип | Метод и описание |
|---|---|
Doc |
getDoc() Получение текущего объекта документа. |
MultiDoc |
next() Переход к объекту multidoc, содержащему следующий объект документа в последовательности объектов документов. |
Методы
getDoc
Doc getDoc()
throws IOException Получение текущего объекта документа.
- Возвращает:
- Текущий объект документа.
- Выбрасывает:
-
IOException- Выбрасывается, если произошла ошибка чтения документа.
next
MultiDoc next()
throws IOException Переход к объекту multidoc, содержащему следующий объект документа в последовательности объектов документов.
- Возвращает:
- Объект multidoc, содержащий следующий объект документа, или null, если больше нет объектов документов.
- Выбрасывает:
-
IOException- Выбрасывается, если произошла ошибка при поиске следующего документа
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.