しめ鯖日記

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

Swiftで学ぶデザインパターン5 (Prototype パターン)

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

デザインパターンとは

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

Prototype パターンとは

Prototype パターンとはインスタンスの生成に関するパターンです。
インスタンスを生成するのでなく、既存のインスタンスのコピーを生成する事でインスタンス生成コストを減らすパターンです。

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

SwiftでのPrototype パターンは下のように記述します。
まずはCopy可能なプロトコルCopyableを実装、その後それに準拠したクラスを作成します。
そしてそれらのインスタンスのコピーを返すCopyFactoryを作成します。

class CopyFactory {
    var map: [String: Copyable] = [:]
    init() {
        self.register("clone1", instance: Clone1())
        self.register("clone2", instance: Clone2())
    }
    
    func register(key: String, instance: Copyable) {
        map[key] = instance
    }
    
    func copy(key: String) -> Copyable {
        return map[key]!
    }
}

protocol Copyable {
    func clone() -> Copyable
}

class Clone1: Copyable {
    var value = 1
    func clone() -> Copyable {
        let clone = Clone1()
        clone.value = self.value
        return clone
    }
}

class Clone2: Copyable {
    var value = 2
    func clone() -> Copyable {
        let clone = Clone2()
        clone.value = self.value
        return clone
    }
}

使い方は下の通りです。
CopyFactoryインスタンスを生成して、それに対してコピー取得メソッドを送る事でコピーを取得しています。

let factory = CopyFactory()
let clone1 = factory.copy("clone1") as! Clone1
let clone2 = factory.copy("clone2") as! Clone2
print(clone1.value) // → 1
print(clone2.value) // → 2

Prototype パターンの長所・使いどころ

Prototype パターンはインスタンスの大量生成をする時に役立ってきます。
特にプロパティーのセットをする処理が重い際などは効果を発揮します。

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

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