LoginSignup
1
2

More than 5 years have passed since last update.

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

Posted at

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に変換できました。
レポジトリはこちら

1
2
0

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
  3. You can use dark theme
What you can do with signing up
1
2