1.5K Views
September 01, 23
スライド概要
デザインパターンを学習しBridgeパターンについて発表しました。
C#でなんとなくデザインパターンを理解した Bridgeパターン 2023/08/29 kondo
1. 2. 3. 4. 5. 6. 7. 8. 自己紹介 発表に至った背景 Bridgeパターン 簡単な実装例を考えてみた 実装してみた 設計実装をしてみて ChatGPTに書いてもらった おわりに
自己紹介 C#を日々勉強中!! 名前 Kondo 経歴 社会人2年目のエンジニア 業務 C# デスクトップアプリ開発 趣味 サッカー、登山、写真などなど その他 犬好き
発表に至った背景 ・現在C#を学習中 ・上司からアウトプットすることでより知見が得られると助言 ・デザインパターン(Gofの23パターン)を中心にQiitaを書き始め、今回LTに初めて参加 ・今回はまだ記事を書いてないBridgeパターンについて完全に理解しようと思います
Bridgeパターン • Bridgeパターンは、抽象化(Abstraction)と実装(Implementation) を分離し、それぞれを独立して変更できるようにしたもの ・クラス階層の拡張や変更が容易になり、新しい実装を導入する際にも影響を最小限 に抑えることができる ・自分的には以外にもWikipediaのBridgeパターンのクラス図が一番わかりやすかった
簡単な実装例を考えてみた 今回は時間帯ごとに決まった挨拶を出力するような実装を考えました。設計は以下の通りです。 Japan Greet America Greet ただ今回は後から気が付いたのですが大失敗しました。 GetNowTimeSlotではカルチャを設定して、現地時刻を取得し、朝だから「おはよう」といったように適当な挨拶を出 力したかったんですが、言語ごとにカルチャが違うか…? 英語だからと言ってカルチャは一意に特定できないことに実装中に・・・
実装してみて コード(一部抜粋) ・この実装例の設計であると、Greetの具象クラス がかなりのコピーコードになってしまうような気が する ただ拡張性というか、言語によって挨拶がもっとた くさんのパターンになり、複雑になった場合には GetGreetがコピーコードになることはないか やっぱりこのままでいいか? ・設計、実装するうえで様々な場合に対して、何が 一番良いかを考えながらできた点はプラス ・少し時間をおいて見返すともっとこうした方がい いなどの意見も出てくる
実装してみて Bridgeパターンを使用することで、どのような挨拶をすべきかを委譲し、Outputのサブクラスが挨 拶について知らなくてよくなったのでOutputFileや、OutputConsoleのように、出力方法が変 わった際にも、コピーコードを書いたり、変更における影響範囲を広げることなく実装できた。
Chat GPTに書 いてもらった
おわりに ・今回はBrideパターンを学習した ・今後もQiitaを中心に記事を投稿しながら学んでいきたい ・まだ記事を投稿し始めて半年ですが、これからもアウトプットを 増やして多くの経験を積みたいと考えています