しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

Swiftで学ぶデザインパターン20 (Flyweightパターン)

今回はFlyweightパターンについて書いていきます。

デザインパターンとは

デザインパターンとはソフトウェア開発の設計方法の事です。
オブジェクト指向における再利用のためのデザインパターン』という本が出典で、全部で23種類のパターンが紹介されています。

Flyweightパターンとは

Flyweightパターンとはシングルトンパターンに似ているパターンで、インスタンスの使い回しをするパターンです。
シングルトンパターンは1つのインスタンスを保持するのですが、Flyweightパターンではキーとオブジェクトを1対1で保存します。

SwiftでのFlyweightパターンの実装方法

Flyweightパターンの実装は下のようになります。
下の例ではTargetクラスのインスタンスの取得をFactory経由で行っています。
このように、Factoryにキーと値のペアを保持してそれを使いまわすのがFlyweightパターンになります。

class Factory {
    static var dic = [String: Target]()
    
    static func target(str: String) -> Target {
        var target = dic[str]
        if target == nil {
            target = Target(str: str)
            dic[str] = target
        }
        return target!
    }
}

class Target {
    let str: String
    
    init(str: String) {
        self.str = str
    }
    
    func output() {
        print(str)
    }
}

Factory.target("A").output()
Factory.target("B").output()
Factory.target("C").output()
Factory.target("A").output()
Factory.target("B").output()
Factory.target("C").output()

オブジェクト指向における再利用のためのデザインパターン

オブジェクト指向における再利用のためのデザインパターン