SlideShare a Scribd company logo
1 of 17
vol.3
Factory Method & Abstract Factory
月曜だから
デザインパターンでも勉強しよう
Factory
そもそもFactoryとは
実はGoFの23パターンに
単純なFactoryパターンは存在しない
そもそもFactoryとは
実はGoFの23パターンに
単純なFactoryパターンは存在しない
「わかるだろ?それくらい」ということなのかもしれない
インスタンスを生成する
class Factory {
public function create($type) {
switch ($type) {
case 'foo':
return new FooProduct;
case 'bar':
return new BarProduct;
default:
throw new LogicException;
}
}
}
何が嬉しいの?
どういう時にどういうインスタンスを
どうやって作ればいいか、をFactoryが知っていれば良い
何が嬉しいの?
どういう時にどういうインスタンスを
どうやって作ればいいか、をFactoryが知っていれば良い
逆に言うと利用者側はインスタンスの具体的内容が未知でも
利用できないと美味しさ半減
何が嬉しいの?
どういう時にどういうインスタンスを
どうやって作ればいいか、をFactoryが知っていれば良い
逆に言うと利用者側はインスタンスの具体的内容が未知でも
利用できないと美味しさ半減
そのため、基本的には
同じインターフェースを実装したクラスが帰って来るべき
で、Factory Method
インスタンス生成を上書き可能にする
class ParentClass {
public function save() {
return $this->storage()->store();
}
protected function storage() {
return new Storage;
}
}
class ChildClass {
protected function storage() {
return new WebStorage;
}
}
何が嬉しいの?
インスタンス生成をメソッドに切り出して
サブクラスで上書き可能にする、ただそれだけ。
何が嬉しいの?
インスタンス生成をメソッドに切り出して
サブクラスで上書き可能にする、ただそれだけ。
全然大したことは言っていないシリーズ。
何が嬉しいの?
インスタンス生成をメソッドに切り出して
サブクラスで上書き可能にする、ただそれだけ。
全然大したことは言っていないシリーズ。
したがって、嬉しさも通常のFactory同様。
で、Abstract Factory
Factoryも抽象化する
abstract class AbstractFactory {
abstract public function create();
}
class Factory extends AbstractFactory {
public function create() {
return new WebStorage;
}
}
class Factory2 extends AbstractFactory {
public function create() {
return new FileStorage;
}
}
何が嬉しいの?
Factoryそのものを交換可能にすることで
更にもう一段階抽象度が上がる
何が嬉しいの?
Factoryそのものを交換可能にすることで
更にもう一段階抽象度が上がる
とはいえ書くコードの量は増えるので、
そこまでの柔軟性が必要かどうか考える必要がある

More Related Content

More from Takaaki Hirano

プログラミング言語のマスコットとか紹介
プログラミング言語のマスコットとか紹介プログラミング言語のマスコットとか紹介
プログラミング言語のマスコットとか紹介Takaaki Hirano
 
金曜だけどデザインパターンでも勉強しよう
金曜だけどデザインパターンでも勉強しよう金曜だけどデザインパターンでも勉強しよう
金曜だけどデザインパターンでも勉強しようTakaaki Hirano
 
PHP array_uintersectに潜む罠
PHP array_uintersectに潜む罠PHP array_uintersectに潜む罠
PHP array_uintersectに潜む罠Takaaki Hirano
 
非同期データ更新のためにメッセージキューを導入した(い)話
非同期データ更新のためにメッセージキューを導入した(い)話非同期データ更新のためにメッセージキューを導入した(い)話
非同期データ更新のためにメッセージキューを導入した(い)話Takaaki Hirano
 
月曜だからデザインパターンでも勉強しよう vol.4 Builder
月曜だからデザインパターンでも勉強しよう vol.4 Builder月曜だからデザインパターンでも勉強しよう vol.4 Builder
月曜だからデザインパターンでも勉強しよう vol.4 BuilderTakaaki Hirano
 
PHPUnit 4.0で追加されたwillReturn*()の紹介
PHPUnit 4.0で追加されたwillReturn*()の紹介PHPUnit 4.0で追加されたwillReturn*()の紹介
PHPUnit 4.0で追加されたwillReturn*()の紹介Takaaki Hirano
 
sedで複数行処理 使ってみようNを
sedで複数行処理 使ってみようNをsedで複数行処理 使ってみようNを
sedで複数行処理 使ってみようNをTakaaki Hirano
 
ctagsでvimにひきこもる
ctagsでvimにひきこもるctagsでvimにひきこもる
ctagsでvimにひきこもるTakaaki Hirano
 
書こう!正規表現 vol.2 文字クラス(例外)
書こう!正規表現 vol.2 文字クラス(例外)書こう!正規表現 vol.2 文字クラス(例外)
書こう!正規表現 vol.2 文字クラス(例外)Takaaki Hirano
 
書こう!正規表現 vol.2 文字クラス(基本)
書こう!正規表現 vol.2 文字クラス(基本)書こう!正規表現 vol.2 文字クラス(基本)
書こう!正規表現 vol.2 文字クラス(基本)Takaaki Hirano
 
書こう!ユニットテスト vol.2 どうやって?
書こう!ユニットテスト vol.2 どうやって?書こう!ユニットテスト vol.2 どうやって?
書こう!ユニットテスト vol.2 どうやって?Takaaki Hirano
 
書こう!正規表現 vol.1 正規表現 is 何
書こう!正規表現 vol.1 正規表現 is 何書こう!正規表現 vol.1 正規表現 is 何
書こう!正規表現 vol.1 正規表現 is 何Takaaki Hirano
 
書こう!ユニットテスト vol.1 ナンデ?
書こう!ユニットテスト vol.1 ナンデ?書こう!ユニットテスト vol.1 ナンデ?
書こう!ユニットテスト vol.1 ナンデ?Takaaki Hirano
 
PHP foreachでの参照渡しに潜む罠
PHP foreachでの参照渡しに潜む罠PHP foreachでの参照渡しに潜む罠
PHP foreachでの参照渡しに潜む罠Takaaki Hirano
 

More from Takaaki Hirano (15)

プログラミング言語のマスコットとか紹介
プログラミング言語のマスコットとか紹介プログラミング言語のマスコットとか紹介
プログラミング言語のマスコットとか紹介
 
金曜だけどデザインパターンでも勉強しよう
金曜だけどデザインパターンでも勉強しよう金曜だけどデザインパターンでも勉強しよう
金曜だけどデザインパターンでも勉強しよう
 
PHP array_uintersectに潜む罠
PHP array_uintersectに潜む罠PHP array_uintersectに潜む罠
PHP array_uintersectに潜む罠
 
非同期データ更新のためにメッセージキューを導入した(い)話
非同期データ更新のためにメッセージキューを導入した(い)話非同期データ更新のためにメッセージキューを導入した(い)話
非同期データ更新のためにメッセージキューを導入した(い)話
 
月曜だからデザインパターンでも勉強しよう vol.4 Builder
月曜だからデザインパターンでも勉強しよう vol.4 Builder月曜だからデザインパターンでも勉強しよう vol.4 Builder
月曜だからデザインパターンでも勉強しよう vol.4 Builder
 
PHPUnit 4.0で追加されたwillReturn*()の紹介
PHPUnit 4.0で追加されたwillReturn*()の紹介PHPUnit 4.0で追加されたwillReturn*()の紹介
PHPUnit 4.0で追加されたwillReturn*()の紹介
 
sedで複数行処理 使ってみようNを
sedで複数行処理 使ってみようNをsedで複数行処理 使ってみようNを
sedで複数行処理 使ってみようNを
 
ctagsでvimにひきこもる
ctagsでvimにひきこもるctagsでvimにひきこもる
ctagsでvimにひきこもる
 
書こう!正規表現 vol.2 文字クラス(例外)
書こう!正規表現 vol.2 文字クラス(例外)書こう!正規表現 vol.2 文字クラス(例外)
書こう!正規表現 vol.2 文字クラス(例外)
 
書こう!正規表現 vol.2 文字クラス(基本)
書こう!正規表現 vol.2 文字クラス(基本)書こう!正規表現 vol.2 文字クラス(基本)
書こう!正規表現 vol.2 文字クラス(基本)
 
書こう!ユニットテスト vol.2 どうやって?
書こう!ユニットテスト vol.2 どうやって?書こう!ユニットテスト vol.2 どうやって?
書こう!ユニットテスト vol.2 どうやって?
 
書こう!正規表現 vol.1 正規表現 is 何
書こう!正規表現 vol.1 正規表現 is 何書こう!正規表現 vol.1 正規表現 is 何
書こう!正規表現 vol.1 正規表現 is 何
 
書こう!ユニットテスト vol.1 ナンデ?
書こう!ユニットテスト vol.1 ナンデ?書こう!ユニットテスト vol.1 ナンデ?
書こう!ユニットテスト vol.1 ナンデ?
 
PHP foreachでの参照渡しに潜む罠
PHP foreachでの参照渡しに潜む罠PHP foreachでの参照渡しに潜む罠
PHP foreachでの参照渡しに潜む罠
 
Cocproxy
CocproxyCocproxy
Cocproxy
 

Recently uploaded

論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 

Recently uploaded (11)

論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

月曜だからデザインパターンでも勉強しよう vol.3 Factory Method & Abstract Factory