Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
デザインパターン勉強会(Facade&Mediator)
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Java女子部
November 29, 2022
Programming
220
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
デザインパターン勉強会(Facade&Mediator)
https://javajo.doorkeeper.jp/events/144579
Java女子部
November 29, 2022
More Decks by Java女子部
See All by Java女子部
モダンJava再入門ハンズオン Java in Education For JUGs
javawomen
0
190
デザパタ勉強会!Bridgeパターン
javawomen
0
140
みんな大好きJava 8から9月リリースJava 17まで!最近のJava事情あれこれ / Java catch up from 8 to 17
javawomen
2
1.3k
お客様の中にJava女子部とお付き合いしてくださる方はいませんか?
javawomen
0
360
【子ども向けハンズオン】 ゲームで学ぼう、プログラミング!
javawomen
0
890
Java女子部について
javawomen
1
97
Other Decks in Programming
See All in Programming
Deep dive into the select statement (GopherCon UK)
jespino
0
170
ソフトウェアラスタライザ
fadis
1
780
AWS Step Functions 大規模並列の壁を越える / jaws-sonic-2026-niigata-step-functions
kasacchiful
PRO
0
340
「AI時代、配布するPythonコードをどう守るか: 難読化の実験と判断軸」 #PyconJP2026
pkshadeck
PRO
2
160
信頼性の目標を誰も求めてない
shubox
0
490
Swift愛好会と私(ウホーイ) / Swift Fan Club and Uhooi
uhooi
0
120
go-spidermonkeyでAIエージェントのCode Modeを実装する
syumai
3
1.5k
まずはプロンプトガイドを読もう、話はそれからだ
kiakiraki
1
260
Oxlintはいいぞ(続)
yug1224
1
540
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
440
新人はどこまで自力でやり、どこからAIに頼るべきか/エンジニア育成に向き合う_先輩たちの悩みと知見共有会
toppan_digital_dev
1
560
週末にAI-DLCを本気で回したら$1,600溶けた
hbashimizu
0
120
Featured
See All Featured
ラッコキーワード サービス紹介資料
rakko
1
4.7M
Believing is Seeing
oripsolob
1
210
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
2
3.8k
Un-Boring Meetings
codingconduct
0
410
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
660
Practical Orchestrator
shlominoach
191
12k
Test your architecture with Archunit
thirion
2
2.4k
YesSQL, Process and Tooling at Scale
rocio
174
15k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
57k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.6k
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
Into the Great Unknown - MozCon
thekraken
41
2.7k
Transcript
デザインパターン勉強会 2022/11/26 Java女子部 めだか & あや
Facadeパターン
よみかた ファサード Facadeパターン
Facadeパターンとは 大規模で複雑なプログラムなどで、クラスの依存関係や各クラスのメソッドを呼 ぶ順番が暗黙知になってしまうため高度なインターフェースを提供する
classを使っての説明 Main PageMaker Database HtmlWriter Facade PageMakerのpublicのメソッド内で Database→HtmlWriterの順番で実行する HtmlWriterを呼び出す前にDatabaseを 呼び出す必要がある
その順番を守るためにFacadeがある
実際にFacadeやってみた Mainクラス import pagemaker.PageMaker; public class Main { public static
void main(String[] args) { PageMaker.makeWelcomePage("Aya", "welcome.html"); } }
実際にFacadeやってみた public class PageMaker { private PageMaker() { } public
static void makeWelcomePage(String name, String filename) { try { Properties foodprop = Database.getProperties("food"); String food = foodprop.getProperty(name); HtmlWriter writer = new HtmlWriter(new FileWriter(filename)); writer.title(name + "'s web page"); writer.paragraph("Welcome to " + name + "'s web page!"); writer.paragraph("好きな食べ物は" + food); writer.close(); System.out.println(filename + " is created for " + name + " (" + food + ")"); } catch (IOException e) { e.printStackTrace(); } } } 名前でDBからデータを 取得して、webページ を作成するクラス
実際にFacadeやってみた public class Database { private Database() { } public
static Properties getProperties(String dbname) throws IOException { String filename = dbname + ".txt"; Properties prop = new Properties(); prop.load(new FileReader(filename)); return prop; } } 名前から好きな食べ物を取得するためのDBクラス
実際にFacadeやってみた public class HtmlWriter { private Writer writer; public HtmlWriter(Writer
writer) { this.writer = writer; } public void title(String name) throws IOException { writer.write("<!DOCTYPE html>"); writer.write("<html>"); writer.write("<head>"); writer.write("<title>" + name + "</title>"); writer.write("</head>"); writer.write("<body>"); writer.write("\n"); writer.write("<h1>" + name + "</h1>"); writer.write("\n"); } public void paragraph(String msg) throws IOException { writer.write("<p>" + msg + "</p>"); writer.write("\n"); } public void link(String food) throws IOException { paragraph(food); } public void close() throws IOException { writer.write("</body>"); writer.write("</html>"); writer.write("\n"); writer.close(); } } HTMLファイルを作成するクラス
実際にFacadeやってみた <!DOCTYPE html><html><head><title>Aya's web page</title></head><body> <h1>Aya's web page</h1> <p>Welcome to
Aya's web page!</p> <p>好きな食べ物はRamen Jiro</p> </body></html> 生成されたHTML
実際にFacadeやってみた 実際できた画面
Facadeがないと 呼び出す側が複雑な依存関係、順番などを意識する必要がある ※クラスが増えるほど大変(呼び出し側、呼び出される側どちらも) 今回の場合、Mainクラスの実装者がDatabase→HtmlWriterの順番呼び出すとい うことを意識しなければならない。 →Mainクラスのようなものが増えたら…?大変
どの順番で呼び出したいんだっけ?ってなる 右と左の図、どっちが呼び出し順序正しいんだっけ? Facadeがないと Main Database HtmlWriter Main HtmlWriter Database
だからFacadeが必要! 大規模開発になればなるほど、メソッドを呼び出す順番がソースコード上に現れ ていることが必要になる。 →Facadeが必要。
ソースコード https://github.com/java-women/202211DesignPattern/tree/main/facade
Mediatorパターン
Mediatorパターンとは Mediatorパターン:相談するクラス(複数)→相談される&指示を出すクラス (1つ)という双方向の関係性が成り立っている。 ※前節のFacadeは使用するクラス→使用されるクラスという片方向であるという 点で対照的である リーダー (相談役) メンバー (相談者) メンバー
(相談者) メンバー (相談者) Mediatorの図 指示をする 相談する
Mediator 簡易的なクラス図(サンプルソース) LoginFrame Button TextField CheckBox ボタンの 有効/無効を指示 Colleague テキストが入力され
てるかどうか通知する どちらがチェック されてるか通知する テキストの 有効/無効を指示
相談 指示 指示 Mediatorがないと メンバーが直接メンバーに指示と相談をすることになる リーダー (相談役) 指示 メンバー (相談者)
メンバー (相談者) メンバー (相談者) Mediatorがない図
だからMediatorが必要! 直接メンバー(Colleague)同士でやりとりをしないで良い →メンバー同士の複雑な依存関係が解消される ・複雑な部分がMediatorに集中し、特定のメンバーを見れば良くなるため、改修 (デバッグ)が容易。 ・メンバーが増えても改修が容易
おわりに Facadeパターン 処理の順序を整理したインターフェースを用意するパターン Mediatorパターン 処理同士の絡み合いを一本化するクラスを用意するパターン