Имя шаблона, в котором действия происходят после завершения будущего события/класса Java.

У меня есть класс, который в настоящее время называется Promise, который работает следующим образом:

  1. Он имеет будущую ценность
  2. Он всегда может принять последующее действие, которое использует будущее значение в качестве параметра.
  3. Когда значение завершено, очередь функций запускается
  4. Любые функции, добавленные после того, как будущее завершено, происходят синхронно.

Похоже, это шаблон проектирования из функционального программирования, который мы внедряем в Java. Важно то, что мы можем использовать гирляндную цепочку для отложенных событий, что, как я понимаю, является функцией, более встроенной в язык C # 3.0, но вам нужно взломать ее вместе с классами Java. К сожалению, во-первых, я не знаю лучшего названия для этого, чем «обещание» или «будущее», которые кажутся вводящими в заблуждение, поскольку основное внимание уделяется «DelayedCallStack», а не имеющемуся значению, и во-вторых, я не знаю любой способ сделать это, кроме написания нашего собственного довольно сложного класса Promise. В идеале я хотел бы взять это из функциональной библиотеки Java, но эта концепция пока ускользает от меня.

Примечание. Java даже не поддерживает язык/библиотеку для асинхронного обратного вызова, который принимает параметр, что является одной из причин, по которой я так пессимистичен в отношении возможности найти это.

Итак, что это за паттерн, можно ли его сделать в библиотеках?


person djechlin    schedule 10.07.2012    source источник
comment
Я не знаю ничего ни в одной библиотеке, которая делает это. Что касается имени, если основное внимание уделяется набору действий, которые вы надеетесь предпринять в будущем, когда придет время, как насчет амбиций?   -  person Tom Anderson    schedule 11.07.2012


Ответы (2)


Взгляните на ListenableFuture в Гуаве:

http://code.google.com/p/guava-libraries/wiki/ListenableFutureExplained

ListenableFuture позволяет добавлять обратные вызовы, которые будут выполняться после завершения вычисления Future. Вы можете контролировать, в каком пуле потоков выполняются обратные вызовы, чтобы они могли выполняться синхронно или асинхронно.

person Eric Hauser    schedule 10.07.2012

Могу только сказать, что мы реализовали почти то же самое во Flex (ActionScript) и тоже назвали это Promise. В Clojure обещание является чем-то более легким: операция get над ним блокируется до тех пор, пока другой поток deliver не выполнит обещание. По сути, это очередь из одного элемента, за исключением того, что она сохраняет свое значение навсегда, поэтому последующие get всегда завершаются успешно.

То, что у вас есть, — это своего рода обещание в сочетании с наблюдателями его ценности. Я не знаю какого-либо специального термина, охватывающего именно этот случай.

РЕДАКТИРОВАТЬ

Теперь я замечаю, что ваше «обещание/будущее» может владеть кодом, который производит его будущую ценность (по крайней мере, не совсем очевидно, так ли это). Реализация ActionScript, о которой я упоминал, этого не делала — она вела себя как Clojure, значение подавалось извне. Я думаю, что это ключевое различие между будущим и обещанием.

person Marko Topolnik    schedule 10.07.2012
comment
На самом деле, наше обещание не имеет стоимости производства. У него есть публичный метод void setResult(). - person SLaks; 11.07.2012
comment
Тогда у нас действительно идеальное совпадение. - person Marko Topolnik; 11.07.2012