search
LoginSignup
2

More than 3 years have passed since last update.

posted at

Kotlinでデザインパターン(Adapter編)

Java言語で学ぶデザイン・パターン入門をもとにKotlinで書いてみる

今回はAdapter シリーズとして不定期に更新していく予定

Adapterパターンとは

すでに提供されているもの必要なものを埋め合わせるもの
本書ではノートパソコンのACアダプターを紹介しています。
つまり、ACアダプターは直流(提供されているノートPCの電源)交流(必要としているコンセントからの電源)を埋め合わせするわけですね。
本書ではACアダプターの例は出しているものの、その例で実装はされていなかったのでKotlinで書いてみました。

Adapterパターンの流れ

スクリーンショット 2018-10-29 23.46.32.png

Target(対象)

要求されているメソッド (インタフェース)
今回はVolt.kt

Volt.kt
interface Volt {
    var volt: Float
}

Adaptee(適合される側)

既存のメソッド このメソッドの機能をTargetのインタフェースに適合させ利用
今回はDirectCurrent.kt (直流)

DirectCurrent.kt
class DirectCurrent(override var volt: Float) : Volt

Adapter(適合させる側)

Adapteeのメソッドを、Targetから利用できるものに変換する
今回はHas-a関係で実装しており、ACAdapter.ktが該当
ここで要求しているノートPCの直流値から交流へ変換し、どれくらいコンセントからの交流電源が必要か計算している

ACAdapter.kt
class ACAdapter(private var dc: DirectCurrent) : Volt {
    override var volt: Float
        get() = convertDCToAC(dc.volt)
        set(value) {}

    /**
     * Suppose x^2 / 2
     */
    private fun convertDCToAC(v: Float) = v * v / 2

    fun show() {
        Log.d(ACAdapter::class.java.name, volt.toString())
    }
}

Client(利用者)

Targetのメソッドを利用して処理を行う
今回はAndroid Studio上で書いているのでMainActivity.kt
onCreate中の処理

MainActivity.kt
val ac = ACAdapter(DirectCurrent(12.0F))
ac.show()

ログ結果

D/ACAdapter: 72.0

うまく、既存の直流12Vを交流72Vに変換できました。
レポジトリはこちら

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
2