Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
デザインパターン勉強会(Facade&Mediator)
Search
Java女子部
November 29, 2022
Programming
230
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
200
デザパタ勉強会!Bridgeパターン
javawomen
0
150
みんな大好きJava 8から9月リリースJava 17まで!最近のJava事情あれこれ / Java catch up from 8 to 17
javawomen
2
1.3k
お客様の中にJava女子部とお付き合いしてくださる方はいませんか?
javawomen
0
370
【子ども向けハンズオン】 ゲームで学ぼう、プログラミング!
javawomen
0
900
Java女子部について
javawomen
1
98
Other Decks in Programming
See All in Programming
AI時代のTerminal環境を UNIX哲学で設計・運用する
yasunori0418
1
340
AI時代のFlutter品質設計 — アプリ品質を守るQuality Layers
omatty198
0
350
Long Living Tokens, Die, Die, Die! (or: The One Ring is Banned in Modern)
sylph01
0
410
作れるエンジニアから、価値を届けるエンジニアへ
ryunakayama
1
140
Optunaを作ったときにやりたかったこと、その後 (2026/10/16, Optuna Meetup #3)
iwiwi
4
1.5k
作って学ぶSpring BootのAuto Configuration / JJUG Night Seminar 2026-10-19
rshindo
0
220
Web Framework Benchmark Battle 2026, Any%
a_matsuda
3
3.1k
Spec-Driven Development - Why Vaadin Is the Perfect Fit
simas
PRO
0
220
AI-Powered Domain-Driven Design
ziobrando
0
390
TS 7.0 で baseUrl が使えなくなった今、パスエイリアスをどうするか
bicstone
2
490
React Native에 현대적인 빌드 도구 더하기: Rollipop 구현기
leegeunhyeok
0
180
SODA - FACT BOOK(EN)
sodainc
1
200
Featured
See All Featured
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.5k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
47k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
620
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.8k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Designing for Performance
lara
612
70k
Claude Code のすすめ
schroneko
67
230k
From π to Pie charts
rasagy
1
430
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.7k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.9k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.4k
Believing is Seeing
oripsolob
1
270
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パターン 処理同士の絡み合いを一本化するクラスを用意するパターン