オブジェクト設計において、定石となる手法をパターン化したものを デザインパターン といいます。
デザインパターンをきちんと勉強していない人でも、Web のおかげで知らず知らずのうちに使って(コピペして)その恩恵を享受しています。
自分自身パターン概要を一読しただけで、あいまいな使い方をしているものが多く、この際勉強を兼ねて GOF 23 パターンのなかでよく利用するものを Swift3 で記述していきたいと思います。
今回は 構造パターン の Bridge について説明します。
[構造] Bridge パターン
クラスなどの実装と、呼出し側との橋渡し(Bridge)するクラスを用意し、実装と機能を分離することで、実装の変更や機能追加を容易にする。
サンプルコード
AbstractColor.swift
[code]
class AbstractColor {
var impl: Implementor?
func implMethod() {
impl?.implMethod()
}
}
[/code]
ConcreteWhiteColor.swift
[code]
class ConcreteWhiteColor: AbstractColor {
}
[/code]
ConcreteBlackColor.swift
[code]
class ConcreteBlackColor: AbstractColor {
}
[/code]
ImplementWhiteColor.swift
[code]
class ImprementWhiteColor: Implementor {
func implMethod() {
print(“siro”)
}
}
[/code]
ImplementBlackColor.swift
[code]
class ImprementBlackColor: Implementor {
func implMethod() {
print(“chro”)
}
}
[/code]
ViewController.swift
[code]
protocol Implementor {
func implMethod()
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let color1 = ConcreteWhiteColor()
color1.impl = ImprementWhiteColor()
color1.implMethod()
let color2 = ConcreteBlackColor()
color2.impl = ImprementBlackColor()
color2.implMethod()
}
}
[/code]
実行結果
[code]
siro
chro
[/code]
まとめ
AbstractColor という抽象クラスと protocol Implementor の Bridge(橋渡し)により、実装と機能が分離されています。
これにより、サブクラス(実装)を追加しても、その都度機能を実装する必要がなくなるため、プロジェクトのメンテナンス性が向上します。
次回は 構造パターン の Composite パターンを説明したいと思います。
この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。