Swift: デザインパターン > 構造パターン > Flyweight

オブジェクト設計において、定石となる手法をパターン化したものを デザインパターン といいます。
デザインパターンをきちんと勉強していない人でも、Web のおかげで知らず知らずのうちに使って(コピペして)その恩恵を享受しています。

自分自身パターン概要を一読しただけで、あいまいな使い方をしているものが多く、この際勉強を兼ねて GOF 23 パターンのなかでよく利用するものを Swift3 で記述していきたいと思います。

今回は 構造パターンFlyweight について説明します。

目次

  • [構造] Flyweight パターン
  • まとめ

[構造] Flyweight パターン

Flyweight とは、フライ級という意味で、生成済みのインタンスを共有し、機能が重複する新規インスタンスの生成を防止し軽量化をおこなうパターン。

サンプルコード

FlyweightFactory.swift

class FlyweightFactory {
    static var dictionary = [String: FlyweightObject]()
    
    static func object(name: String) -> FlyweightObject {
        var obj = dictionary[name]
        if obj == nil {
            obj = FlyweightObject(name: name)
            dictionary[name] = obj
        }
        return obj!
    }
}

FlyweightObject.swift

class FlyweightObject {
    let name: String
    
    init(name: String) {
        self.name = name
    }
    
    func output() {
        print(name)
    }
}

ViewController.swift

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        FlyweightFactory.object(name: "siro").output()
        FlyweightFactory.object(name: "chro").output()

    }
}

実行結果

siro
chro

まとめ

インタンスを共有するという意味において Flyweight は Singleton と似たデザインパターンですが、Singleton は1つのインスタンスを保持するのに対し、Flyweight はキーと値(オブジェクト)を1対1で保存するといった違いがあります。

次回は 振る舞いパターンInterpreter パターンを説明したいと思います。

この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。

siro:chro 無料ゲーム SQN をリリースしました

img_sqn_00

sirochro 初の無料ゲームアプリ SQN をリリースしました。
記事:SQN: iOS 無料ゲームアプリ SQN - Sequential Numbers をリリース
ちょっとした時間に楽しめる完全無料のゲームなっていますので、是非ダウンロードして遊んでみてください。

↓SQN のダウンロードはこちらから

Related Contents

Pickup Contents