SlideShare une entreprise Scribd logo
1  sur  41
Télécharger pour lire hors ligne
Teddy Chen
teddy@teddysoft.tw
http://teddy-chen-tw.blogspot.com
Jan. 12 2018 @ 台中【敏捷小酒館】
Copyright@2012-2018 Teddysoft
• 經常聽到設計模式,到底什麼是設計模式?
可以吃嗎?
• 想學設計模式但不知如何下手
• 好像學會了設計模式但不知如何活用
• 套了設計模式被老闆、主管或同事痛罵
– 時程很敢趕系統先可以動就好,以後有時間再
慢慢重構
– 你程式改成這樣誰看得懂啊!
Copyright@2012-2018 Teddysoft
Copyright@2012-2018 Teddysoft
我的程式碼
來源:https://goo.gl/izaH4A
Copyright@2012-2018 Teddysoft
來源:https://goo.gl/DawfCk
Copyright@2012-2018 Teddysoft
Copyright@2012-2018 Teddysoft
A pattern is a proven solution to a
recurring problem in a specific context,
and more.
Copyright@2012-2018 Teddysoft
Context
Machine
Problem
force force
force
Resulting
Context
Solution
force force
force
Time
Copyright@2012-2018 Teddysoft
Copyright@2012-2018 Teddysoft
來源:youtube
Copyright@2012-2018 Teddysoft
來源:youtube
請問:
– MackBook Air
– MackBook Pro 15”
– iMac Pro
哪一台比較好?
Copyright@2012-2018 Teddysoft
我的系統套了87個模式,
請問這是一個好設計嗎?
Copyright@2012-2018 Teddysoft
「只知解法不知問題」
是誰害的?
Copyright@2012-2018 Teddysoft
GoF 害的XD
Copyright@2012-2018 Teddysoft
Copyright@2012-2018 Teddysoft
Copyright@2012-2018 Teddysoft
Problem
Copyright@2012-2018 Teddysoft
• Intent
– Define a family of
algorithms, encapsulate
each one, and make them
interchangeable. Strategy
lets the algorithm vary
independently from
clients that use it.
Copyright@2012-2018 Teddysoft
Copyright@2012-2018 Teddysoft
請看例子
Copyright@2012-2018 Teddysoft
• 在macOS上將硬碟格式化成:
– NTFS
– FAT
– FAT32
Copyright@2012-2018 Teddysoft
程式要怎麼寫?
DriveManager
format(fileSystem)
這個設計好不好?為什麼?
Copyright@2012-2018 Teddysoft
• 你可以把所有的演算法全部寫進同一個物件,然
後用條件式判斷來選用所要執行的版本,但是:
– 程式碼很容易變得過於複雜與肥大,不好理解與修改。
– 擴充新的演算法必須要修改既有的程式碼。
– 不容易分別開發、修改與測試每一個演算法。
– 物件占用過多的記憶體空間,因為可能不會使用到全
部的演算法。
• 你可以透過繼承,讓子類被重新定義自己的演算
法。但是這樣會產生許多類似的類別,但僅僅只
有行為上些微的差別。
Copyright@2012-2018 Teddysoft
Copyright@2012-2018 Teddysoft
Before
After
Source:
https://goo.gl/RD2l2m
Copyright@2012-2018 Teddysoft
Force告訴我們為什麼模式所要解決的
「問題」是一個真正的問題—為什麼這
個問題很難,為什麼需要一個聰明的,
甚至是違反直覺的解決方案。Force也
是了解為何會採用此種解決方案的關鍵。
Copyright@2012-2018 Teddysoft
Copyright@2012-2018 Teddysoft
請分析 Forces
來源:https://goo.gl/q4WdSL
Copyright@2012-2018 Teddysoft
來源: 電影達摩祖師傳
Copyright@2012-2018 Teddysoft
Copyright@2012-2018 Teddysoft
Copyright@2012-2018 Teddysoft
Source: 電影《星際大戰第四集》
Copyright@2012-2018 Teddysoft
Copyright@2012-2018 Teddysoft
你感冒了去看西醫,醫生開了
特效藥給你,保證三天內感冒
可以痊癒,但此特效藥有傷胃
的副作用。怎麼辦?
Copyright@2012-2018 Teddysoft
Copyright@2012-2018 Teddysoft
• 經常聽到設計模式,什麼是設計模式,可
以吃嗎?
• 想學設計模式但不知如何下手
• 好像學會了設計模式但不知如何活用
• 套了設計模式反倒被老闆、主管或同事罵
– 時程很敢趕系統先可以動就好,以後有時間再
慢慢重構
– 你程式改成這樣誰看得懂啊!
Copyright@2012-2018 Teddysoft
還是覺得太抽象怎麼辦?
Copyright@2012-2018 Teddysoft
歡迎報名參加:
Design Patterns這樣學就會了:入門實作班
2018年3月3、4、10日(六、日、六)
Design Patterns這樣學就會了:進階實作班
2018年5月4、5、6日(五、六、日)
Copyright@2012-2018 Teddysoft
Copyright@2012-2018 Teddysoft
敏捷小酒館

Contenu connexe

Plus de teddysoft

Dci vs aggregate_dddtw_2021-0.3-16-9
Dci vs aggregate_dddtw_2021-0.3-16-9Dci vs aggregate_dddtw_2021-0.3-16-9
Dci vs aggregate_dddtw_2021-0.3-16-9teddysoft
 
Dci vs aggregate_dddtw_2021-0.3-preview
Dci vs aggregate_dddtw_2021-0.3-previewDci vs aggregate_dddtw_2021-0.3-preview
Dci vs aggregate_dddtw_2021-0.3-previewteddysoft
 
DDD + Clean Architecture: 從需求到實作
DDD + Clean Architecture: 從需求到實作DDD + Clean Architecture: 從需求到實作
DDD + Clean Architecture: 從需求到實作teddysoft
 
漫談重構
漫談重構漫談重構
漫談重構teddysoft
 
Pattern based problem solving-published
Pattern based problem solving-publishedPattern based problem solving-published
Pattern based problem solving-publishedteddysoft
 
Agile the timeless way of software development-2019-05-17-v1.2-published
Agile the timeless way of software development-2019-05-17-v1.2-publishedAgile the timeless way of software development-2019-05-17-v1.2-published
Agile the timeless way of software development-2019-05-17-v1.2-publishedteddysoft
 
從Bowling Game Kata看敏捷開發
從Bowling Game Kata看敏捷開發從Bowling Game Kata看敏捷開發
從Bowling Game Kata看敏捷開發teddysoft
 
洗白你的軟體架構
洗白你的軟體架構洗白你的軟體架構
洗白你的軟體架構teddysoft
 
Bdd atdd sbe_tdd_ddd_published
Bdd atdd sbe_tdd_ddd_publishedBdd atdd sbe_tdd_ddd_published
Bdd atdd sbe_tdd_ddd_publishedteddysoft
 
了解模式讓你更敏捷 (C C Agile 活動分享)
了解模式讓你更敏捷 (C C Agile 活動分享)了解模式讓你更敏捷 (C C Agile 活動分享)
了解模式讓你更敏捷 (C C Agile 活動分享)teddysoft
 
從五個小故事看敏捷開發精神
從五個小故事看敏捷開發精神從五個小故事看敏捷開發精神
從五個小故事看敏捷開發精神teddysoft
 
好設計如何好 @ C.C. Agile #14
好設計如何好 @ C.C. Agile #14好設計如何好 @ C.C. Agile #14
好設計如何好 @ C.C. Agile #14teddysoft
 
[教材] 例外處理設計與重構實作班201309
[教材] 例外處理設計與重構實作班201309[教材] 例外處理設計與重構實作班201309
[教材] 例外處理設計與重構實作班201309teddysoft
 
搞懂Java例外處理的難題:Checked與Unchecked Exceptions不再是問題
搞懂Java例外處理的難題:Checked與Unchecked Exceptions不再是問題搞懂Java例外處理的難題:Checked與Unchecked Exceptions不再是問題
搞懂Java例外處理的難題:Checked與Unchecked Exceptions不再是問題teddysoft
 
Java 例外處理壞味道與重構技術
Java 例外處理壞味道與重構技術Java 例外處理壞味道與重構技術
Java 例外處理壞味道與重構技術teddysoft
 
模式入門第一堂課: 30分鐘寫出一個模式
模式入門第一堂課: 30分鐘寫出一個模式模式入門第一堂課: 30分鐘寫出一個模式
模式入門第一堂課: 30分鐘寫出一個模式teddysoft
 

Plus de teddysoft (16)

Dci vs aggregate_dddtw_2021-0.3-16-9
Dci vs aggregate_dddtw_2021-0.3-16-9Dci vs aggregate_dddtw_2021-0.3-16-9
Dci vs aggregate_dddtw_2021-0.3-16-9
 
Dci vs aggregate_dddtw_2021-0.3-preview
Dci vs aggregate_dddtw_2021-0.3-previewDci vs aggregate_dddtw_2021-0.3-preview
Dci vs aggregate_dddtw_2021-0.3-preview
 
DDD + Clean Architecture: 從需求到實作
DDD + Clean Architecture: 從需求到實作DDD + Clean Architecture: 從需求到實作
DDD + Clean Architecture: 從需求到實作
 
漫談重構
漫談重構漫談重構
漫談重構
 
Pattern based problem solving-published
Pattern based problem solving-publishedPattern based problem solving-published
Pattern based problem solving-published
 
Agile the timeless way of software development-2019-05-17-v1.2-published
Agile the timeless way of software development-2019-05-17-v1.2-publishedAgile the timeless way of software development-2019-05-17-v1.2-published
Agile the timeless way of software development-2019-05-17-v1.2-published
 
從Bowling Game Kata看敏捷開發
從Bowling Game Kata看敏捷開發從Bowling Game Kata看敏捷開發
從Bowling Game Kata看敏捷開發
 
洗白你的軟體架構
洗白你的軟體架構洗白你的軟體架構
洗白你的軟體架構
 
Bdd atdd sbe_tdd_ddd_published
Bdd atdd sbe_tdd_ddd_publishedBdd atdd sbe_tdd_ddd_published
Bdd atdd sbe_tdd_ddd_published
 
了解模式讓你更敏捷 (C C Agile 活動分享)
了解模式讓你更敏捷 (C C Agile 活動分享)了解模式讓你更敏捷 (C C Agile 活動分享)
了解模式讓你更敏捷 (C C Agile 活動分享)
 
從五個小故事看敏捷開發精神
從五個小故事看敏捷開發精神從五個小故事看敏捷開發精神
從五個小故事看敏捷開發精神
 
好設計如何好 @ C.C. Agile #14
好設計如何好 @ C.C. Agile #14好設計如何好 @ C.C. Agile #14
好設計如何好 @ C.C. Agile #14
 
[教材] 例外處理設計與重構實作班201309
[教材] 例外處理設計與重構實作班201309[教材] 例外處理設計與重構實作班201309
[教材] 例外處理設計與重構實作班201309
 
搞懂Java例外處理的難題:Checked與Unchecked Exceptions不再是問題
搞懂Java例外處理的難題:Checked與Unchecked Exceptions不再是問題搞懂Java例外處理的難題:Checked與Unchecked Exceptions不再是問題
搞懂Java例外處理的難題:Checked與Unchecked Exceptions不再是問題
 
Java 例外處理壞味道與重構技術
Java 例外處理壞味道與重構技術Java 例外處理壞味道與重構技術
Java 例外處理壞味道與重構技術
 
模式入門第一堂課: 30分鐘寫出一個模式
模式入門第一堂課: 30分鐘寫出一個模式模式入門第一堂課: 30分鐘寫出一個模式
模式入門第一堂課: 30分鐘寫出一個模式
 

如何學好設計模式