1. 程式人生 > >Groovy 設計模式 -- 責任鏈模式

Groovy 設計模式 -- 責任鏈模式

IT class att lin Language cti efault make each

Chain of Responsibility Pattern

http://groovy-lang.org/design-patterns.html#_chain_of_responsibility_pattern

責任鏈模式, 將一類實現相同接口的對象,組織到一個列表中,

列表的執行中第一個對象開始, 並依此往後傳遞,直到某一個對象說我來對此次執行負責, 並終止鏈條的後續對象執行。

In the Chain of Responsibility Pattern, objects using and implementing an interface (one or more methods) are intentionally loosely coupled. A set of objects that implement

the interface are organised in a list (or in rare cases a tree). Objects using the interface make requests from the first implementor object. It will decide whether to perform any action itself and whether to pass the request further down the line in the list (or tree). Sometimes a default implementation for some request is also coded into the pattern if none of the implementors respond to the request.

例子

class UnixLister {
    private nextInLine
    UnixLister(next) { nextInLine = next }
    def listFiles(dir) {
        if (System.getProperty(‘os.name‘) == ‘Linux‘) {
            println "ls $dir".execute().text
        } else {
            nextInLine.listFiles(dir)
        }
    }
}

class WindowsLister {
    private nextInLine
    WindowsLister(next) { nextInLine = next }
    def listFiles(dir) {
        if (System.getProperty(‘os.name‘) == ‘Windows XP‘) {
            println "cmd.exe /c dir $dir".execute().text
        } else {
            nextInLine.listFiles(dir)
        }
    }
}

class DefaultLister {
    def listFiles(dir) {
        new File(dir).eachFile { f -> println f }
    }
}

def lister = new UnixLister(new WindowsLister(new DefaultLister()))

lister.listFiles(‘Downloads‘)

Groovy 設計模式 -- 責任鏈模式