Java设计模式
索引
-
- 设计模式说明
-
- 外观模式
-
- 策略模式
-
- 设计模式概述
- 参考文献
设计模式(概述)
-
- GoFという頭のいい人が考えた全23パターン
対象はオブジェクト指向言語
他にもいくつかの種類がある
Javaの機能を活用して(主に)拡張性の向上を図っている
継承
ポリモーフィズム
カプセル化など
優秀なベテランはこう考えている!という考え方集
具体的な実装方法ではない
考え方を理解して自分のプログラムに応用
设计模式的有效应用
-
- 考え方を応用して自分のソースに反映する
≠パターンに合わせて実装する
効果が期待できる場合のみ使う
≠可能な限り適用する
≠デザインパターンの効力を妄信する
無理に使うと逆効果
状況に合わせて柔軟に適用判断する
≠設計時に適用判断をしたのでプログラムに絶対に反映する
设计模式的优点和缺点
好处
-
- 提高可扩展性——充分利用面向对象编程
-
- 提高重用性——充分利用面向对象编程
-
- 提高可读性——充分利用面向对象编程和共同理解
- 提高传输速度——共同理解
弊端(问题点/风险)
-
- 现有思想和机制之间的脱节(部分)
-
- 生产力下降
-
- 对模式的坚持
-
- 代码复杂化
- 由于解释差异导致的误解和无谓的争议(由于抽象性)
设计模式(应用时机)
-
- クラス設計時
-
- リファクタリング時
-
- レビュー時
レビュアーへの説明時間の短縮
双方がパターンを知っている場合のみ
プログラミング調査時
読み解き時間の短縮
予測精度の向上
パターンを知っている場合のみ
プログラミング修正時
这次我们要讨论的有两种情况。
-
- 以下の観点でピックアップ
理解が容易
活用が容易
一定の効果が見込める
身近に例がある
-
- 外观模式
- 策略模式
外观模式(简述)
-
- 複雑な処理の流れをクライアントの代わりに担うクラスを作成
-
- クライアント側はFacadeクラスを呼ぶだけで複雑な処理が可能
クライアント側の処理がシンプルに
一般的に最も使用されているパターンで、ある程度無意識に仕様
リファクタリングにも非常に有用
门面模式(使用条件)
-
- 一連の処理で様々なクラスのそっどを呼ぶ必要がある
- 多数のクライアントから呼ばれる一般的な処理である
外观模式(登场角色)
-
- Client
複雑な処理を実行したいクラス群
Facadeクラスを呼び出す
Facade
複雑な処理呼び出しを引き受けるクラス
実クラス群を呼び出す
実クラス群
複雑な処理の一部分を引き受けるクラスの集まり
Facadeクラスに必要なタイミングでそれぞれ呼ばれる
外观模式(形象)

外观模式(优缺点)
优点
-
- 简化客户的操作以提高可读性
-
- 简化操作的添加、修改和删除
- 简化客户的添加和删除
缺点
- 不需要的Facade类的批量生产
外观模式(总结)
-
- 複雑な処理をまとめて一つのクラスで実施
-
- クライアント側と処理の追加が容易になる
-
- 割と簡単に適用できる
- 用途を絞らないと無駄なクラスが増えて逆効果
策略模式(概述)
-
- 条件分岐で処理を切り替えている部分をサブクラス化
-
- 条件増加時の既存ソースへの追加が最小限
- Stateパターンと酷似
策略模式(角色)
-
- Strategy
戦略を利用するためのインターフェース
処理の種類定義と型の再利用を担う
ConcreteStrategy
Strategyの実装
実際の処理を担う
Context
Strategyを利用するクラス
Strategy型の変数を持つ
Strategy型の処理を呼び出すが実態は把握しない
Client
ContextにStrategyの型を渡す
Contextの処理を呼び出す
策略模式(应用条件)
-
- 条件分岐で類似処理を呼び出している
- 将来的に条件の増減が見込まれる
策略模式(未使用时的形象)

策略模式(形式和使用时机)

策略模式(利与弊)
优势
-
- 在增加Class时,影响范围明确
不需要修改现有处理,因此易于了解整个程序的处理流程。 缺点(风险):由于强行适用,代码变得复杂。
策略模式(总结)
-
- 条件分岐で類似処理が走る場合に使用
-
- 既存ソースの影響範囲が絞れる
-
- Facadeよりちょっと面倒で複雑
- 処理の追加が見込まれない場合は労力の方が大きい
设计模式(总结)
-
- オブジェクト指向を活用して拡張性と再利用性を高めよう
-
- 可読性も上がる(こともある)
-
- そのまま使うのではなく考え方を当てはめる
組み合わせも可
〇〇パターンで!だけで通じると意思伝達が早くて楽
元がざっくりしたものなので解釈の違いがある
今回読んだ本でも解釈が異なるものがあった
やりすぎると労力&工数の無駄
引用文献(尊称省略)
-
- Java言語で学ぶデザインパターン
著者:結城 浩
Javaデザインパターン徹底攻略
著者:日本ソフトウェアエンジニアリング(株)
リファクタリング 既存のコードを安全に改善する
著者:Martin Fowler
訳 :児玉公信・友野昌夫・平澤章・梅澤貴史
事例で学ぶデザインパターン
著者:福田 直樹
URL:https://www.ogis-ri.co.jp/otc/hiroba/technical/DesignPatternsWithExample/
劇的ビフォ◯アフターで学ぶデザインパターン
著者:karoten512
URL:http://karoten512.hatenablog.com/entry/2017/10/21/134048