Update!

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

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

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

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

目次

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

[構造] Composite パターン

Composite とは合成、複合を意味し、Composite パターンでは再帰的な構造を表現し、階層構造で表現されるオブジェクトの取扱いを容易にする。

サンプルコード

Branch.swift

class Branch: TreeObject {
    var array: [TreeObject] = []
    
    func execute() {
        for object in array {
            object.execute()
        }
    }
}

Leaf.swift

class Leaf: TreeObject {
    let color: String
    
    init(color: String){
        self.color = color
    }
    
    func execute() {
        print("Color: \(color)")
    }
}

ViewController.swift

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()
    }
}

実行結果

Color: Red
Color: Green
Color: Yellow

まとめ

Branch クラスに Branch と Leaf クラスが属しています。
Branch と Leaf が execute により、Branch に Leaf や、別の Branch を含むことが可能になりました。

次回は 構造パターンDecorator パターンを説明したいと思います。

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

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

img_sqn_00

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

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

Related Contents

Pickup Contents