Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away