MENU
コンテンツ再構築中

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

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

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

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

INDEX

目次

  • [構造] 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で共有していただければ幸いです。

Please share it!
  • URLをコピーしました!
  • URLをコピーしました!
INDEX