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
180
デザパタ勉強会!Bridgeパターン
javawomen
0
140
みんな大好きJava 8から9月リリースJava 17まで!最近のJava事情あれこれ / Java catch up from 8 to 17
javawomen
2
1.2k
お客様の中にJava女子部とお付き合いしてくださる方はいませんか?
javawomen
0
360
【子ども向けハンズオン】 ゲームで学ぼう、プログラミング!
javawomen
0
880
Java女子部について
javawomen
1
96
Other Decks in Programming
See All in Programming
そのテスト、説明できますか?~LWテスト戦略FW~のご紹介
nakahara
0
150
Signal Forms: Details & Live Coding @enterJS 2026 in Mannheim
manfredsteyer
PRO
0
160
気圧・高度・GPSを記録&可視化するアプリ「Koudo」を作った話
hjmkth
1
310
Hunting Vulnerabilities in Symfony with LLMs
vinceamstoutz
0
550
Lemonade + Foundry Toolkit でお手軽アプリ開発
seosoft
1
360
JJUG CCC 2026 Spring: JSpecify で実現する Kotlin フレンドリーな Java API 設計
ternbusty
1
180
脅威をエンジニアリングの糧にして――現場編 / Turning Threats into Engineering Fuel — Field Edition
nrslib
0
290
ユニットテストの先へ:テスト技法で要求・仕様を整理するJava開発実践 / Beyond_Unit_Testing_Practical_Java_Development_Techniques_for_Organizing_Requirements_and_Specifications
shimashima35
0
410
並列実装の現場、2ヶ月間実務でAIを使い倒したAIもPCも私も限界が近い
ming_ayami
0
130
Developing with AI Agents — Codex, Claude Code & Cowork Practical Guide
x5gtrn
PRO
0
1.3k
Java × distroless で 軽量なコンテナイメージを / Java on Distroless
contour_gara
0
550
エージェンティックRAGにAWSで入門しよう!
har1101
8
1.7k
Featured
See All Featured
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
420
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
370
The World Runs on Bad Software
bkeepers
PRO
72
12k
AI: The stuff that nobody shows you
jnunemaker
PRO
8
720
Optimizing for Happiness
mojombo
378
71k
A designer walks into a library…
pauljervisheath
211
24k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
180
Side Projects
sachag
455
43k
Making the Leap to Tech Lead
cromwellryan
135
9.9k
First, design no harm
axbom
PRO
2
1.2k
Paper Plane
katiecoart
PRO
1
51k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
950
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パターン 処理同士の絡み合いを一本化するクラスを用意するパターン