Kotlin設計モード-ポリシー

2610 ワード

前言
ポリシーモードはソフトウェア設計モードとして、オブジェクトに動作があることを指すが、異なるシーンでは、この動作には異なる実装アルゴリズムがある.例えば、誰もが「個人所得税を払う」が、「米国で個人所得税を払う」と「中国で個人所得税を払う」には異なる計算方法がある.ポリシー・モード:ファミリー・アルゴリズム(ビジネス・ルール)を定義します.各アルゴリズムをカプセル化した.このファミリーのアルゴリズムは置換可能である(interchangeable).
ウィキペディアからのポリシー・モード
一般的には、コード実行中に伝達されたオブジェクトに応じて、伝達されたオブジェクトと同じ操作が実行される.
Kotlinでのポリシーモード
Javaでは、ポリシー・モードでは、単純な関数インタフェースでも複雑なカスタムインタフェースでもよいファミリー・アルゴリズムを定義するインタフェースが一般的に使用されます.Kotlinではlambda式をメソッドのパラメータとすることができるので,関数インタフェース定義を簡略化してコードを簡略化することができる.
Kotlin Lambda
ここではlambda式のみをメソッドパラメータとして示します
//     func     ,      lambda    
//val func : (String) -> String lambda 
class Printer(val func : (String) -> String) {
    fun printString(string: String) = println(func.invoke(string))
}

lambdaが何者なのか分からないので、自分で娘、谷兄を过ごしてください...
show me code
class Printer(val formatterStrategy: (String) -> String) {
    fun printString(string: String) = println(formatterStrategy.invoke(string))
}

呼び出しコードは次のとおりです.
val lowerCasePrinter = Printer{ it.toLowerCase() }
lowerCasePrinter.printString("hello World! THIS IS STRATEGY PATTERN")

val upperCasePrinter = Printer{ it: String -> it.toUpperCase() }
upperCasePrinter.printString("hello World! THIS IS STRATEGY PATTERN")

val prefixPrinter = Printer{ "Prefix: " + it }
prefixPrinter.printString("hello World! THIS IS STRATEGY PATTERN")