>100 Views
May 31, 24
スライド概要
社内勉強会の資料です。
Strategyパターンについてまとめています。
日本・中国・カナダを拠点に、AWS や GCP・Azure などのマルチクラウドに対応した、クラウド / サーバーの構築・移行、24時間365日の運用保守 / 監視、負荷テスト、Webシステム開発、サーバーサイド / API 開発 など、クラウド / サーバーに特化したサービスをご提供いたします。 ● コーポレートサイト https://beyondjapan.com ● YouTube https://www.youtube.com/c/beyomaruch ● X https://x.com/beyondjapaninfo ● Instagram https://www.instagram.com/beyondjapan_24365
Strategyパターン Webサービス事業部 白井 亜紀裕
デザインパターンとは オブジェクト指向の言語などでよく使用される再利用できる設計パターンのこと 多くのプログラマの経験則やベストプラクティスをまとめたもの 特定の問題や課題に対して解決策としてアプローチする手段になる
・Creational(初期化グループ) ・Structural(構造グループ) ・Behavioral (相互作用/行動/振る舞い)
なぜデザインパターンが必要(有用)なのか ☑ コードの再利用性の向上 ☑ 拡張が簡単 ☑ 保守性の向上 ☑ 共通の技術→コミュニケーションやスピードの促進
Strategyパターンとは Strategy 英語で「戦略」を意味 いろんな「戦略」を事前に定義し、 場面によって「戦略」の切り替えが簡単に行えるようになるデザインパターン
構造 Strategy 「戦略」を利用する為のイン ターフェイス 共通のインターフェイス約 束事をここで定義 ConcreteStrategy Context Strategyによって 定められた インターフェイスに則り実装 ConcreteStrategyを Strategyを介して利用 ここが「戦略」部分 「戦略」を切り替えたり クライアントと「戦略」を接続 するクラス
いつ使うべきか? ☑ アルゴリズムの「やること」は同じで 方」が違う場合、変えたい場合 ☑ 物理的制限を考慮して実装する時 ☑ メソッドの振る舞いをif/elseで 分岐して実装しているときなど 「やり
使用例 Zip,RARなどの異なる画像圧縮アルゴリズムを持つ画像圧縮処理を実装 圧縮処理をStrategyパターンで「戦略化」して、切り替えや再利用化 【具体的な手順】 ☑ 異なる圧縮処理に対応するConcreteStrategy(戦略)を作成 ☑ Compression Storategyというインターフェイス(約束事)を定義 ☑ これらを切り替えるImageProcesserというContextを作成
使用したい戦略を 選択・切替 異なる戦略が「圧縮」とい う共通のメソッドを持つた めの契約 各形式の圧縮処理
Strategyパターン使用 未使用で実装 ☑ 拡張性・柔軟性が増す ☒ コードが冗長化しやすい ☑ 保守性の向上 ☒ コードが複雑化しやすい ☑ アルゴリズムのカプセル化 ☒ 保守・柔軟性の低下 ☑ 単体テストの容易性向上 ☒ 再利用性の低下
学びながらの疑問 🤔 サブクラスで十分では? switch文やif/elseなどの条件分岐じゃダメなの? ➥ 変更に弱い コードが具体的なクラスや条件分岐に依存 Strategyパターンを使用することで 抽象化されたインターフェイスを通じて コードと具体的な実装が分離→変更への影響が最小限
結論 ・ゴール(目指す結果)は決まっているがアルゴリズム(過程)が違う または切り替えたい時に非常に効果的なパターン ・特にアルゴリズムをプログラムから切り離して管理するので 変化に対してより強く・柔軟になる ➥これらを実現するのがStrategyパターンという手段 コードの
Strategyパターンに触れてみて ・保守性や変更について考えるきっかけになった ・時と場合は考えて使わなければいけないが 要所で使用すると効果的な技術だと感じました ・総じて「管理」が楽になる。 ・他デザインパターンの興味も湧いた
ご清聴ありがとうございました Webサービス事業部 白井 亜紀裕
参考資料 https://qiita.com/victory1011/items/6d75da6c77d3e1884864 https://qiita.com/hankehly/items/1848f2fd8e09812d1aaf https://qiita.com/a1146234/items/fdecc374b7225d99ab07