[iOS 8] Swiftでデザインパターン No.4 Factory Method

2014.10.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Factory Method

Factory Method とは

英単語 Factory には以下のような意味があります。

  • 工場
  • 製造所

Factory Method パターンは、あるクラスのインスタンス化をサブクラスに任せるパターンです。
オブジェクトを生成するときのインターフェースだけを規定して、実際にどのクラスをインスタンス化するかはサブクラスに決めさせます。

クラス図

factoryMethod

ポイント

  • ConcreteCreator は factoryMethod() でインスタンスを生成する

サンプルコード

Product

class Product {
}

ConcreteProduct

class ConcreteProduct: Product {
}

Creator

class Creator {
    func factoryMethod() -> Product {
        fatalError("must be overridden")
    }
    func anOperation() {
        let product = factoryMethod()
        println("Product is (product)")
    }
}

Swift のアクセス修飾子にprotectedは存在しません。

ConcreteCreator

class ConcreteCreator: Creator {
    override func factoryMethod() -> Product {
        return ConcreteProduct()
    }
}

factoryMethod() で ConcreteProduct のインスタンスを生成しています。

実行

ConcreteCreator().anOperation()

実行結果

Product is FactoryMethod.ConcreteProduct

FactoryMethod.ConcreteProduct の部分は、{プロジェクト名}.{クラス名}となっています。

まとめ

  • Swift のアクセス修飾子に protected は存在しない
  • 存在するのは、public, private, internalの3つのみ

リンク