オブジェクト設計において、定石となる手法をパターン化したものを デザインパターン といいます。
デザインパターンをきちんと勉強していない人でも、Web のおかげで知らず知らずのうちに使って(コピペして)その恩恵を享受しています。
自分自身パターン概要を一読しただけで、あいまいな使い方をしているものが多く、この際勉強を兼ねて GOF 23 パターンのなかでよく利用するものを Swift3 で記述していきたいと思います。
今回は 構造パターン の Composite について説明します。
目次
- [構造] Composite パターン
- まとめ
[構造] Composite パターン
Composite とは合成、複合を意味し、Composite パターンでは再帰的な構造を表現し、階層構造で表現されるオブジェクトの取扱いを容易にする。
サンプルコード
Branch.swift
[code]
class Branch: TreeObject {
var array: [TreeObject] = []
func execute() {
for object in array {
object.execute()
}
}
}
[/code]
Leaf.swift
[code]
class Leaf: TreeObject {
let color: String
init(color: String){
self.color = color
}
func execute() {
print(“Color: \(color)”)
}
}
[/code]
ViewController.swift
[code]
protocol TreeObject {
func execute()
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let smallBranch = Branch()
let bigBranch = Branch()
let greenLeaf = Leaf(color: “Green”)
let yellowLeaf = Leaf(color: “Yellow”)
let redLeaf = Leaf(color: “Red”)
smallBranch.array.append(greenLeaf)
smallBranch.array.append(yellowLeaf)
bigBranch.array.append(redLeaf)
bigBranch.array.append(smallBranch)
bigBranch.execute()
}
}
[/code]
実行結果
[code]
Color: Red
Color: Green
Color: Yellow
[/code]
まとめ
Branch クラスに Branch と Leaf クラスが属しています。
Branch と Leaf が execute により、Branch に Leaf や、別の Branch を含むことが可能になりました。
次回は 構造パターン の Decorator パターンを説明したいと思います。
この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。