SlideShare a Scribd company logo
7
Most read
14
Most read
15
Most read
Are Design Patterns Dead?
kawasima
Are Design patterns dead?
What are Design patterns
例:横断歩道
歩行路が道路を横断する地点では、たとえ歩行者に法的優先権があろうとも、車には歩行者を脅迫
し、服従させる力がある。これは歩行路と道路が同一平面上にあるとつねに生じる問題である。(中
略)横断者が道路を快適で安全と感じるのは、横断歩道が障害物になり、車がスピードを落とし、歩
行者に道を譲ることを物理的に保証される場合のみである。(中略)横断歩行路を道路より15-30cm
高くし、道路がそこに向かって盛り上がるようにすればよい。勾配が1/6以下であれば車には安全だ
し、しかも確実に車はスピードダウンする。遠方から横断を見やすくし、またそこでの歩行者の権利
に重み付けをする意味でも、道路際に縁を設けて歩行路を明示することもできよう。(中略)問題の
道路に、1日数回、異なった時間に出かけてみること。その度に、何秒待てば横断できるか測るこ
と。待ち時間の平均が2秒以上であれば、このパターンを適用する方がよい。(後略)
http://www.s-lagoon.co.jp/pattern_use_nf.html
Pattern Structure
・問題:横断歩道を造るとき、歩行者に安心感を与え、安全を守らねばならない
・フォース:2秒以上待たないと横断できないような道路
・解決策:横断歩行路を道路より15-30cm高くし、勾配を付けて車の走行に配慮
する
フォースとは…
解決しなければならない問題に対して、選択すべき解決策を
限定させるような、特定の状況の制約
Pattern Structure
問題
解決策
解決策
フォース
フォース
解決策
フォース
繰り返し見られる
(問題, フォース, 解決策)の
ペア
フォースが変わると解決策も変わる
Singleton
問題: あるデータが1つだけであることを保証したい
フォース: 生成のタイミングは利用するアプリケーション側でコント
ロールしたいが、そこで生成されるデータ自体を書き換えることはでき
ない。
解決策: Javaだとダブルチェックロッキング
※Notion AIに書いてもらいました
DIコンテナになると、自前で実装する必要が無くなった
依然として解きたい問題はそこにありフォースも変わらないので
多くの人はSingletonパターンとして認識する
問題: あるデータが1つだけであることを保証したい
フォース: 生成のタイミングは別にアプリケーションがコントロールする必
要はない
大元のフォースが変わると異なるパターンになる
解決策: グローバル変数として作っておけば良い
○ Node.jsならexport const singleton = new Singleton()
○ JavaならClass初期化時にINSTANCE生成
この場合、ただの「グローバル変数パターン」?
クラス継承前提のパターンはOOじゃなければ変容する
Template Method
問題: アルゴリズムの構造を変更することなく、アルゴリズムの特定のス
テップを再定義したい
フォース: サブクラス毎に再定義したいステップを実装する
※Notion AIに書いてもらいました
※Notion AIに書いてもらいました (関数合成はしてないですね)
Template Methodの「問題」は以前と
して存在していて、フォースが「サ
ブクラス」から「部分適用と関数合
成」に変わる
フォースが大きく変わるとパターン
名くらいは変えていいかも…
言語の発展とともに不要になった
➡ 不正確
Web開発では元々「問題」として現れにくいものもあった
➡ Flyweight, Interpretor
言語(フレームワーク)の発展とともに自分で解決策を実装しなくても良くなっただけ
➡「生成」のパターン全般
GoFはオブジェクト指向前提なので、解決策が変わるだけ
継承によるポリモーフィズム → パターンマッチによるポリモーフィズム
➡ Object Scopeのパターン (are still alive!!)
フォースまで変わると、別パターン(元のパターンは死んだと言っていいかも)
➡ Template Method
まとめ

More Related Content

PDF
ソフトウェアにおける 複雑さとは何なのか?
PDF
イミュータブルデータモデル(世代編)
PDF
イミュータブルデータモデルの極意
PDF
強いて言えば「集約どう実装するのかな、を考える」な話
PDF
ドメイン駆動設計 ( DDD ) をやってみよう
PDF
それはYAGNIか? それとも思考停止か?
PPTX
トランザクションの設計と進化
ソフトウェアにおける 複雑さとは何なのか?
イミュータブルデータモデル(世代編)
イミュータブルデータモデルの極意
強いて言えば「集約どう実装するのかな、を考える」な話
ドメイン駆動設計 ( DDD ) をやってみよう
それはYAGNIか? それとも思考停止か?
トランザクションの設計と進化

What's hot (20)

PDF
トランザクションの並行実行制御 rev.2
PDF
PHPで大規模ブラウザゲームを開発してわかったこと
PPTX
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
PDF
できる!並列・並行プログラミング
PDF
ソフトウェア設計における 意思決定とそのレビューの秘訣
PDF
Webアプリを並行開発する際のマイグレーション戦略
PDF
ChatGPTは思ったほど賢くない
PDF
PostgreSQLアンチパターン
PDF
Ormとの付き合い方
PDF
Tackling Complexity
PDF
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
PDF
ネットワーク ゲームにおけるTCPとUDPの使い分け
PDF
いまさら聞けない!CUDA高速化入門
PDF
テスト文字列に「うんこ」と入れるな
PPTX
Dbts 分散olt pv2
PDF
トランザクションの並行処理制御
PDF
CRDT in 15 minutes
PDF
中3女子が狂える本当に気持ちのいい constexpr
PPTX
地理分散DBについて
PDF
オブジェクト指向の設計と実装の学び方のコツ
トランザクションの並行実行制御 rev.2
PHPで大規模ブラウザゲームを開発してわかったこと
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
できる!並列・並行プログラミング
ソフトウェア設計における 意思決定とそのレビューの秘訣
Webアプリを並行開発する際のマイグレーション戦略
ChatGPTは思ったほど賢くない
PostgreSQLアンチパターン
Ormとの付き合い方
Tackling Complexity
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
ネットワーク ゲームにおけるTCPとUDPの使い分け
いまさら聞けない!CUDA高速化入門
テスト文字列に「うんこ」と入れるな
Dbts 分散olt pv2
トランザクションの並行処理制御
CRDT in 15 minutes
中3女子が狂える本当に気持ちのいい constexpr
地理分散DBについて
オブジェクト指向の設計と実装の学び方のコツ
Ad

Similar to Are Design Patterns Dead? (7)

PDF
Introduction to Design Patterns_and_Object_Orientation.pdf
PDF
Abstract
PPT
デザインパターン勉強会
PPTX
デザインパターン入門
PDF
Clarity 2019 で デザインシステムの課題は人なんだと痛感した話
PDF
「創造的な学びを促すパターン・ランゲージ」(井庭崇, PCカンファレンス2017基調講演)
PDF
企業向け「パターン・ランゲージ3.0研究会」第1回スライド
Introduction to Design Patterns_and_Object_Orientation.pdf
Abstract
デザインパターン勉強会
デザインパターン入門
Clarity 2019 で デザインシステムの課題は人なんだと痛感した話
「創造的な学びを促すパターン・ランゲージ」(井庭崇, PCカンファレンス2017基調講演)
企業向け「パターン・ランゲージ3.0研究会」第1回スライド
Ad

More from Yoshitaka Kawashima (20)

PDF
Grokking Simplicity探訪
PDF
ブルックスのいう銀の弾丸とは何か?
PDF
ソフトウェア開発における『知の高速道路』
PDF
本番障害に至る病
PDF
システムダウンのひみつ
PDF
Mavenの真実とウソ
PDF
アンチフラジャイルの世界
PDF
Atomic Architecture
PDF
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
PDF
ウォーターフォールとアジャイルのフェアな比較
PDF
How to find tech books
PDF
Antifragile Java - Java Day Tokyo 2017 D1-E1
PDF
たとえ日本人同士でも必要な異文化理解力
PDF
SIerにとっての越境 @ DevLOVE 199
PDF
なぜデータモデリングが重要なのか?
PDF
Antifragile Clojure
PDF
Boilerplate vs Magic
PDF
既婚プログラマの時間捻出術
PDF
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
PDF
マイクロフレームワークEnkan(とKotowari)ではじめるREPL駆動開発
Grokking Simplicity探訪
ブルックスのいう銀の弾丸とは何か?
ソフトウェア開発における『知の高速道路』
本番障害に至る病
システムダウンのひみつ
Mavenの真実とウソ
アンチフラジャイルの世界
Atomic Architecture
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
ウォーターフォールとアジャイルのフェアな比較
How to find tech books
Antifragile Java - Java Day Tokyo 2017 D1-E1
たとえ日本人同士でも必要な異文化理解力
SIerにとっての越境 @ DevLOVE 199
なぜデータモデリングが重要なのか?
Antifragile Clojure
Boilerplate vs Magic
既婚プログラマの時間捻出術
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
マイクロフレームワークEnkan(とKotowari)ではじめるREPL駆動開発

Are Design Patterns Dead?