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
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
150
みんな大好きJava 8から9月リリースJava 17まで!最近のJava事情あれこれ / Java catch up from 8 to 17
javawomen
2
1.3k
お客様の中にJava女子部とお付き合いしてくださる方はいませんか?
javawomen
0
360
【子ども向けハンズオン】 ゲームで学ぼう、プログラミング!
javawomen
0
900
Java女子部について
javawomen
1
97
Other Decks in Programming
See All in Programming
Verilogで学ぶCPU自作入門.pdf
uyuki234
7
3.9k
選挙速報を多くのユーザーへ 届ける Live Activities 設計
hamayokokuririn
0
190
[ハンズオン]AIへの指示だけで「五目並べ」を作ってみよう
satoshi256kbyte
1
320
Omarchy Tokyo やると聞いて UMPC 買ってセットアップしてきた
mtsmfm
0
200
AWSに止められる覚悟してますか?
morizo_1984
2
490
GitHubハンズオン講座 — 実務レベルのチーム開発のフローを身につけよう
junhat6
0
110
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
660
iOSDC2026登壇資料.pdf
riofujimon
0
200
ゲームコントローラやキーボードのファームウェアをSwiftで書く
kishikawakatsumi
1
270
The Rails Doctrine Decade
koic
2
440
すこし踏み込む CancellationToken
htkym
2
1.5k
モジュールの視点からSwiftを読み解く #iosdc
s_shimotori
0
290
Featured
See All Featured
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
710
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.2k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
1k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
410
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
450
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
450
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3.1k
Thoughts on Productivity
jonyablonski
76
5.4k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
960
A Soul's Torment
seathinner
8
3.7k
HDC tutorial
michielstock
2
930
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パターン 処理同士の絡み合いを一本化するクラスを用意するパターン