BookmarkLINEAbstractFactoryパターン(アブストラクト・ファクトリ・パターン)は「抽象的な工場」を意味する通り、関係するオブジェクトたちを”まとめて”生成する為のデザインパターン手法の一つです。生成に関するデザインパターンの1つとして「FactoryMethodパターン」がありますが、これはオブジェクトの生成についての抽象化をメインとしてパターンであるのに対し、AbstractFactoryパターンは関連オブジェクトをまとめて生成する流れに関しての抽象化になります。AbstractFactoryパターンの基本的なクラス図は以下になります。FactoryでProductのパターンを宣言し、Productで細分化されたItemを取りまわして作成していく。この流れの中で、FactoryとProductには共通のルールを持たせる(抽象化)事で、それぞれのFactoryのバリエーション(処理ロジックの切り替えレベル)、そしてProductのパターン(生成するオブジェクトの種類レベル)に関して処理の流れを共通化できます。するとあとはFactoryを選ぶだけで処理を切り替える事ができる。これが簡単なAbstractFactoryパターンの構造になります。今回は、繁忙期の自動車工場の生産ラインを例にしたいと思います。PHP自動車株式会社の工場では、2つの人気車種「Laravel」と「cakephp」の生産がピークです。人気で生産が追い付かず、工場では24時間稼働にし、時間で生産を切り替えていく事にしました。同じ生産ラインで時間によって生産するものを変えるというのにはとてもリスクが伴います。部品などを全て総取り換えしなければなりませんし、部品の切り替えに不備がありLaravelを組み立てる時にcakephpの部品が入ってしまったらリコールで大損害です。そこで、工場長はAbstractFactoryパターンで生産ラインを回す事にしました。前提として、それぞれの車種について全て別々の部品が使われており、それぞれの部品リストはjsonファイルに収録されている事とします。工場(Factory)で生産するものをインターフェイスに定義します。handle();}この工場では、エンジン/ハンドル/タイヤの取り付けを行っているので、それらを定義しています。次に、このインターフェイスを実装し、車種「Laravel」のFactoryクラスを実装します。}}ここでは、エンジン・タイヤ・ハンドルについてのProductクラスを生成し返却しています。Productクラスを実装します。メソッドそしてProductの具象クラスは以下になります。}}最後に、それぞれの部品を定義している各Itemクラスです。}}これで車種「Laravel」側の一連の実装が完了しました。同じ要領でもう一方の車種「cakephp」も実装し、これらを用いて生産ラインを動かしてみます。$model->handle();$handle->add();作る車種でFactoryクラスを切り替える事によって、それぞれの部門の結果を表示しています。結果は以下になります。車種cakephpの結果表示このように、Factoryクラスを切り替える事によって、関連するオブジェクトをまとめて生成し提供できる事が確認できました。まとめクラス図や実装例だけではイメージが付きづらいと思いますが、それぞれの関係性について以下のように記すとよりイメージもつきやすいです。Item04AbstractFactoryパターンを用いると、オブジェクトをグループ単位で入れ替えたり追加したりが行えるので便利です。イベントレポート2019.12.8MySQL8.0.16で追加されたCHECK制約を試してみる。2019.12.2LaravelのContracts(契約)とは。SESを使ってAPIメール送信を行う(Mailableクラス&SimpleEmailService)2019.12.3MySQL8.0.16で追加されたCHECK制約を試してみる。RitoLaboこのサイトについて利用規約プライバシーポリシ。