Шаблоны проектирования закрытия

Сейчас я изучаю шаблоны проектирования. Существует много документации по шаблонам проектирования программирования, но меня интересуют шаблоны проектирования замыканий.

Я нашел презентацию Венката Субраманиама о Шаблонах проектирования в Java и Groovyи извлек некоторые шаблоны из этой презентации, которые включают замыкания и другие шаблоны, основанные на моем собственном опыте.

Execute Around Method

Пара операций, которые необходимо выполнить до и после операций.

def operations(closure) {
    println "Open"
    closure()
    println "Close"
}

operations { println "Operation" }

===> Open
===> Operation
===> Close

Сменное поведение

Укажите поведение объекта во время выполнения.

def selectValues(number, closure) {
    def list = []
    1.upto(number) {
        if (closure(it)) list << it
    }
    return list
}

assert [2, 4, 6, 8, 10] == selectValues(10) { it % 2 == 0 }  // even
assert [1, 3, 5, 7, 9]  == selectValues(10) { it % 2 != 0 }  // odd

Шаблон итератора

Разрешает последовательный доступ к элементам.

def listNumbers(closure) {
    (0..5).each { closure it }
}

listNumbers {
    if (it < 3) println "$it is a little number"
    else println "$it is a big number"
}

===> 0 is a little number
===> 1 is a little number
===> 2 is a little number
===> 3 is a big number
===> 4 is a big number
===> 5 is a big number

Динамическое условное выполнение

Создание и выполнение условной операции.

def greet(user, successClosure, failClosure) {
    if (isAdmin(user)) successClosure()
    else failClosure()
}

greet(user, { println "Hi Admin!" }, { println "Hello User" })

Я хочу узнать больше о шаблонах проектирования закрытия. Есть ссылка на эту тему? Не стесняйтесь написать новый шаблон на вашем любимом языке программирования.


Обновление

Я написал сообщение на эту тему (Groovy и Ruby, но одинаковое содержание):
Шаблоны проектирования замыканий
Шаблоны проектирования замыканий. Рубиновое издание

5
задан Arturo Herrero 25 April 2016 в 23:30
поделиться