オブジェクト設計において、定石となる手法をパターン化したものを デザインパターン といいます。
デザインパターンをきちんと勉強していない人でも、Web のおかげで知らず知らずのうちに使って(コピペして)その恩恵を享受しています。
自分自身パターン概要を一読しただけで、あいまいな使い方をしているものが多く、この際勉強を兼ねて GOF 23 パターンのなかでよく利用するものを Swift3 で記述していきたいと思います。
今回は 構造パターン の Flyweight について説明します。
目次
- [構造] Flyweight パターン
- まとめ
[構造] Flyweight パターン
Flyweight とは、フライ級という意味で、生成済みのインタンスを共有し、機能が重複する新規インスタンスの生成を防止し軽量化をおこなうパターン。
サンプルコード
FlyweightFactory.swift
[code]
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!
}
}
[/code]
FlyweightObject.swift
[code]
class FlyweightObject {
let name: String
init(name: String) {
self.name = name
}
func output() {
print(name)
}
}
[/code]
ViewController.swift
[code]
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
FlyweightFactory.object(name: “siro”).output()
FlyweightFactory.object(name: “chro”).output()
}
}
[/code]
実行結果
[code]
siro
chro
[/code]
まとめ
インタンスを共有するという意味において Flyweight は Singleton と似たデザインパターンですが、Singleton は1つのインスタンスを保持するのに対し、Flyweight はキーと値(オブジェクト)を1対1で保存するといった違いがあります。
次回は 振る舞いパターン の Interpreter パターンを説明したいと思います。
この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。