Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Teddy Chen
July. 20 2013
http://www.teddysoft.tw/
http://teddy-chen-tw.blogspot.tw/
Design Patterns這樣學就會了
入門實作班, Day 1
我是誰
• 2012年7月成立泰迪軟體,從事敏捷開發顧問、教
育訓練、軟體工具導入等服務。
• 2012年6月,出版暢銷書「笑談軟體工程:敏捷方
法的逆襲」。
• 2012年4月起,多次講授Scrum課程,與學員互動氣
氛佳,滿意度高。
• 超...
Copyright@2013 Teddysoft
Agenda--Day 1
• 認識軟體設計的真正產出物
• 模式的內涵:練習動手寫出一個模式
• 12個物件導向設計觀念與原則
• 設計模式密碼:3 3 23
• GoF設計模式實戰
– Singleton
– Observer
• 快速回顧...
Agenda--Day 2
• State
• Facade
• Template Method
• Factory Method
• Abstract Factory
• 快速回顧
Copyright@2013 Teddysoft
Agenda--Day 3
• Strategy
• Command
• Adapter
• Composite
• 快速回顧
Copyright@2013 Teddysoft
認識軟體設計的真正產出物
軟體開發團隊常見的狀況
• Data Structure + Algorithm = Program
– 最高指導原則:反正程式可以動就好了
• 問題
– 分工但不易合作
• 為什麼
– 看不懂也不需要看別人在寫什麼 (反之亦然)
– 聽不懂也...
什麼是設計?
• A design is a plan for how to build a thing. To
design is to build a thing in one’s mind but not
yet in the real ...
設計的產出物是什麼?
討論:軟體設計的產出物又是
什麼?
什麼是軟體設計?
• 資料結構 + 演算法?
• Architecture Block Diagrams?
• UML Diagrams?
– Use case diagrams
– Class diagrams
– Sequence diag...
原始碼就是軟體設計
(Source code is the software design)
http://www.developerdotstar.com/mag/articles/reeves_design.html
Copyright@2...
如果你相信原始碼就是軟體設計
• 程式當然要可以動,但程式不是可以動就
沒事了
• 程式是給人看的,不是給電腦看的
– 可讀性
– 可瞭解性
– 可維護性
– 可擴充性
Copyright@2013 Teddysoft
問題:設計容易嗎?
別人的設計,就是最好的設計
Copyright@2013 Teddysoft
模式的內涵:學會自己動手寫
出模式
Pattern
Copyright@2013 Teddysoft
Pattern
圖片來源: http://www.myschool.hk/image/learning/learning-2-6-1.jpg Copyright@2013 Teddysoft
一再重複出現的東西、事件、現
象,就稱為模式。
Copyright@2013 Teddysoft
Each pattern is a
three-part rule,
which express a
relation between a
certain context, a
problem, and a
solution.
Copyrigh...
A pattern is a solution to a problem
in a context.
Copyright@2013 Teddysoft
World
Context
Problem
(Requirement,
What)
Solution
(How, How to,
How much)
Machine
A pattern is a solution to a problem in...
先私底下看一個例子
• Context: 你是總統候選人。
• Problem: 明天就是投票日。你的民意支持度
離對手還落後5%。要如何勝選?
• Solution: 準備兩顆子彈,巧妙地打在鮪魚肚
上。受傷之後到熟識的醫院就醫,並立即主
動...
An Example, Take 1
• Context: 你是經營線上遊戲的業者。
• Problem: 為了快速有產品可以上市,你用高
價搶下國外知名產品的代理權。就在付款之
後不久,國外廠商惡性倒閉。要如何要回你
的簽約金?
• Solu...
A pattern is a solution to a
recurring problem in a context.
Copyright@2013 Teddysoft
An Example, Take 2
• Context: 你是經營線上遊戲的業者。
• Problem: 線上遊戲的市場競爭非常激烈,玩
家的選擇很多,因此傳統需要先付費才可以
玩的遊戲模式,要玩家在尚未入迷之前就先
付費變得越來越困難。要如...
A pattern is a proven solution to a
recurring problem in a context.
Copyright@2013 Teddysoft
An Example, Take 3
• Context: 你是經營線上遊戲的業者。
• Problem: 線上遊戲的市場競爭非常激烈,玩
家的選擇很多,因此傳統需要先付費才可以
玩的遊戲模式,要玩家在尚未入迷之前就先
付費變得越來越困難。要如...
A pattern is a proven solution to a
recurring problem in a specific
context.
Copyright@2013 Teddysoft
An Example, Take 4
• Context: 線上遊戲的市場競爭非常激烈,玩
家的選擇很多,除非你是知名大廠,能推出
曠世巨作,否則以傳統先付費才可以玩的遊
戲模式,要玩家在尚未入迷之前就先付費變
得越來越困難。
• Proble...
A pattern is a proven solution to a
recurring problem in a specific
context, and more.
Copyright@2013 Teddysoft
模式的六大基本元素
• Name : 樣式名稱,增加開發者的設計字彙
• Context: 描述問題發生的地形地物(美容前)
• Problem: 描述問題本身
• Force: 問題的限制或特性
• Solution: 解決問題的方法
• R...
沒有Context便無法判斷Solution
• Problem: 要如何讓玩家願意掏錢出來玩線
上遊戲?
• Solution:
1. 推出著名大作,玩家不買不可
2. 採用免費遊戲策略,但如果要升級則玩家就
必須要花錢購買道具
3. 推出賭...
Force是推擠與拉扯Problem的作用力,
也是塑造Solution的決定因素
圖片來源: https://upload.wikimedia.org/wikipedia/commons/9/99/Libyen-sandwueste1.jpg...
Each pattern is a three-part rule, which
expresses a relation between a certain
context, a problem, and a solution.
As an ...
An Example, Take 5.1
• Context: 線上遊戲的市場競爭非常激烈,玩家的
選擇很多,除非你是知名大廠,能推出曠世巨
作,否則以傳統先付費才可以玩的遊戲模式,
要玩家在尚未入迷之前就先付費變得越來越困
難。
• Prob...
An Example, Take 5.2
• Context: 線上遊戲的市場競爭非常激烈,玩家的
選擇很多,因此傳統需要先付費才可以玩的遊
戲模式,要玩家在尚未入迷之前就先付費變得
越來越困難。
• Problem: 要如何讓玩家在線上遊戲中...
回頭修改 Problem
Copyright@2013 Teddysoft
An Example, Take 5.3
• Context: 線上遊戲的市場競爭非常激烈,玩家的選
擇很多,因此傳統需要先付費才可以玩的遊戲模式,
要玩家在尚未入迷之前就先付費變得越來越困難。
• Problem: 要如何讓玩家持續在線上遊戲...
World
Context
Problem
(Requirement,
What)
Solution
(How, How to,
How much)
Machine
Force告訴我們為什麼模式所要解決的「問題」是一個真正的
問題—為什麼這個問...
什麼是設計?
• 設計是決定form、
context,以及兩者
之間的關係。
• 好的設計是form與
context的良好適應
關係。
《Notes on the Synthesis of Form》
Context
Form
force
...
練習:看一個例子,寫出你所
觀察到的Solution
Copyright@2013 Teddysoft
捷運忠孝新生站
練習:寫出捷運轉乘站的
Force
Copyright@2013 Teddysoft
Resulting Context
Copyright@2013 Teddysoft
An Example, Take 6
• Context: 線上遊戲的市場競爭非常激烈,玩家的選擇很多,因此
傳統需要先付費才可以玩的遊戲模式,要玩家在尚未入迷之前就
先付費變得越來越困難。
• Problem: 要如何讓玩家持續在線上遊戲中付...
Pattern Name
Copyright@2013 Teddysoft
兩種命名方法
• 名詞片語 (Noun-phrase)
– 描述模式所建立或產生的結果
– 例子:Singleton, Command, Model-View-
Controller
• 動詞片語 (Verb-phrase)
– 給定一個指令,...
A pattern is a process and a thing.
Copyright@2013 Teddysoft
A common ground for
communication.
Copyright@2013 Teddysoft
雖然剛剛模式範例的說明,是從
上而下,但實際上尋找模式的過
程,是從下而上。
Solution  Problem(Forces) 
Context
Copyright@2013 Teddysoft
Copyright@2013 Teddysoft
Copyright@2013 Teddysoft
練習:幫便利商店「集點活動」
寫出一個模式
Copyright@2013 Teddysoft
模式是一種公式
• 套公式解題比較快且不易出錯
– 建構式數學 vs. 數學公式
• 問題百百種,如何能有公式可解決全部的
問題?
– 一個模式只能解決一個特定的問題
Copyright@2013 Teddysoft
常見模式的種類
• Analysis Pattern
• Software Architecture Pattern
• Design Pattern
• Implementation Pattern
• HCI Pattern
Copyrig...
透過模式建立軟體架構與設計
整體先於部分,然後透過差異化
的過程將整體逐步展開
Copyright@2013 Teddysoft
保全監控系統初始架構
Client
Type C
Client
Type B
Client
Type A
Server
Client
Type D
Device A
Device B
Device C
Device D
DatabaseUI
U...
第1次分化
Client
Type C
Client
Type B
Client
Type A
Server
Client
Type D
Device A
Device B
Device C
Device D
DatabaseUI
User
<...
第2次分化
Client
Type C
Client
Type B
Client
Type A
Server
Client
Type D
Device A
Device B
Device C
Device D
DatabaseUI
User
<...
第3次分化
Client
Type C
Client
Type B
Client
Type A
Server
Client
Type D
Device A
Device B
Device C
Device D
DatabaseUI
User
<...
第4次分化
Client
Type C
Client
Type B
Client
Type A
Server
Client
Type D
Device A
Device B
Device C
Device D
DatabaseUI
User
<...
12個物件導向設計觀念與原則
6個物件導向設計觀念
• Class, Object, Instance
• Interface
• Inheritance
• Polymorphism
• Composition
• Delegation
Copyright@2013 Te...
6個物件導向設計原則
• 模組化。
• 減少耦合,增加內聚。
• 尋找hot spot。
• 生物多樣性原則。
• Programming to an Interface, not an
Implementation (GoF).
• Favo...
兩本武功祕笈
Copyright@2013 Teddysoft
設計模式密碼:3 3 23
設計模式的目的
• 紀錄人們設計物件導向軟體上的經驗。
• 重複使用已知成功的設計及架構。
• 提供一種有結構的文件化方式讓設計者容
易模仿已知的成功設計經驗。
• 幫助我們了解現存的物件導向系統。
不再雞同鴨講…XD
Copyright@20...
GoF (Gang of Four) 設計模式的格式
• 為什麼叫做 GoF Design Patterns?
– 因為作者有四個人, Erich Gamma, Richard Helm,
Ralph Johnson, John Vlissid...
兩種設計模式撰寫格式比較
Copyright@2013 Teddysoft
依據用途,設計模式可分為三大類
• Creational Patterns (生成模式)
– Abstract Factory, Builder, Factory Method, Prototype,
Singleton
• Structura...
依據內部關係,設計模式可分為另
外三大類
• Abstract Coupling (抽象耦合)
– State, Factory Method, Observer, Bridge, Builder,
Command, Iterator, Vis...
GoF書中一共有23個設計模式
• 5個生成模式
– Abstract Factory, Builder, Factory Method, Prototype,
Singleton
• 7個結構模式
– Adapter, Bridge, Com...
Day 1 快速回顧
Design Patterns這樣學就會了:入門班 Day1 教材
Design Patterns這樣學就會了:入門班 Day1 教材
Design Patterns這樣學就會了:入門班 Day1 教材
Upcoming SlideShare
Loading in …5
×

Design Patterns這樣學就會了:入門班 Day1 教材

85,210 views

Published on

  • Be the first to comment

Design Patterns這樣學就會了:入門班 Day1 教材

  1. 1. Teddy Chen July. 20 2013 http://www.teddysoft.tw/ http://teddy-chen-tw.blogspot.tw/ Design Patterns這樣學就會了 入門實作班, Day 1
  2. 2. 我是誰 • 2012年7月成立泰迪軟體,從事敏捷開發顧問、教 育訓練、軟體工具導入等服務。 • 2012年6月,出版暢銷書「笑談軟體工程:敏捷方 法的逆襲」。 • 2012年4月起,多次講授Scrum課程,與學員互動氣 氛佳,滿意度高。 • 超過17年design pattern實務經驗,曾在pattern領域 最著名的PLoP國際研討會發表論文。 – PLoP 2004:A Pattern Language for Personal Authoring in E-Learning. – Asia PLoP 2011:Emerging Patterns of Continuous Integration for Cross-Platform Software Development. • 2009年取得Certified ScrumMaster。 • 2008年4月起迄今,超過4年Scrum實際導入經驗。 • 2008年取得台北科技大學資工博士。 • 2007年起經營「搞笑談軟工」部落格。 Copyright@2013 Teddysoft
  3. 3. Copyright@2013 Teddysoft
  4. 4. Agenda--Day 1 • 認識軟體設計的真正產出物 • 模式的內涵:練習動手寫出一個模式 • 12個物件導向設計觀念與原則 • 設計模式密碼:3 3 23 • GoF設計模式實戰 – Singleton – Observer • 快速回顧 Copyright@2013 Teddysoft
  5. 5. Agenda--Day 2 • State • Facade • Template Method • Factory Method • Abstract Factory • 快速回顧 Copyright@2013 Teddysoft
  6. 6. Agenda--Day 3 • Strategy • Command • Adapter • Composite • 快速回顧 Copyright@2013 Teddysoft
  7. 7. 認識軟體設計的真正產出物
  8. 8. 軟體開發團隊常見的狀況 • Data Structure + Algorithm = Program – 最高指導原則:反正程式可以動就好了 • 問題 – 分工但不易合作 • 為什麼 – 看不懂也不需要看別人在寫什麼 (反之亦然) – 聽不懂也不想聽別人在說什麼 (反之亦然) • 後果 – 軟體無法做大,無法做快 Copyright@2013 Teddysoft
  9. 9. 什麼是設計? • A design is a plan for how to build a thing. To design is to build a thing in one’s mind but not yet in the real world. 《POSA volume 5》Copyright@2013 Teddysoft
  10. 10. 設計的產出物是什麼?
  11. 11. 討論:軟體設計的產出物又是 什麼?
  12. 12. 什麼是軟體設計? • 資料結構 + 演算法? • Architecture Block Diagrams? • UML Diagrams? – Use case diagrams – Class diagrams – Sequence diagrams – State machine diagrams – … • 其他答案? Copyright@2013 Teddysoft
  13. 13. 原始碼就是軟體設計 (Source code is the software design) http://www.developerdotstar.com/mag/articles/reeves_design.html Copyright@2013 Teddysoft
  14. 14. 如果你相信原始碼就是軟體設計 • 程式當然要可以動,但程式不是可以動就 沒事了 • 程式是給人看的,不是給電腦看的 – 可讀性 – 可瞭解性 – 可維護性 – 可擴充性 Copyright@2013 Teddysoft
  15. 15. 問題:設計容易嗎?
  16. 16. 別人的設計,就是最好的設計 Copyright@2013 Teddysoft
  17. 17. 模式的內涵:學會自己動手寫 出模式
  18. 18. Pattern Copyright@2013 Teddysoft
  19. 19. Pattern 圖片來源: http://www.myschool.hk/image/learning/learning-2-6-1.jpg Copyright@2013 Teddysoft
  20. 20. 一再重複出現的東西、事件、現 象,就稱為模式。 Copyright@2013 Teddysoft
  21. 21. Each pattern is a three-part rule, which express a relation between a certain context, a problem, and a solution. Copyright@2013 Teddysoft
  22. 22. A pattern is a solution to a problem in a context. Copyright@2013 Teddysoft
  23. 23. World Context Problem (Requirement, What) Solution (How, How to, How much) Machine A pattern is a solution to a problem in a context Problem Copyright@2013 Teddysoft
  24. 24. 先私底下看一個例子 • Context: 你是總統候選人。 • Problem: 明天就是投票日。你的民意支持度 離對手還落後5%。要如何勝選? • Solution: 準備兩顆子彈,巧妙地打在鮪魚肚 上。受傷之後到熟識的醫院就醫,並立即主 動發布受傷新聞但是在開票前不要公布詳細 傷勢以博取同情。 Copyright@2013 Teddysoft
  25. 25. An Example, Take 1 • Context: 你是經營線上遊戲的業者。 • Problem: 為了快速有產品可以上市,你用高 價搶下國外知名產品的代理權。就在付款之 後不久,國外廠商惡性倒閉。要如何要回你 的簽約金? • Solution: 找黑道去喬事情。 Copyright@2013 Teddysoft
  26. 26. A pattern is a solution to a recurring problem in a context. Copyright@2013 Teddysoft
  27. 27. An Example, Take 2 • Context: 你是經營線上遊戲的業者。 • Problem: 線上遊戲的市場競爭非常激烈,玩 家的選擇很多,因此傳統需要先付費才可以 玩的遊戲模式,要玩家在尚未入迷之前就先 付費變得越來越困難。要如何讓玩家願意掏 錢出來玩線上遊戲呢? • Solution: 以永久免費遊戲為噱頭,先讓玩家 上癮,再要求玩家每月付費,否則將關閉遊 戲伺服器。 Copyright@2013 Teddysoft
  28. 28. A pattern is a proven solution to a recurring problem in a context. Copyright@2013 Teddysoft
  29. 29. An Example, Take 3 • Context: 你是經營線上遊戲的業者。 • Problem: 線上遊戲的市場競爭非常激烈,玩 家的選擇很多,因此傳統需要先付費才可以 玩的遊戲模式,要玩家在尚未入迷之前就先 付費變得越來越困難。要如何讓玩家願意掏 錢出來玩線上遊戲呢? • Solution: 提供免費遊戲,先吸引玩家上癮, 再以販賣道具與周邊商品作為獲利來源。 Copyright@2013 Teddysoft
  30. 30. A pattern is a proven solution to a recurring problem in a specific context. Copyright@2013 Teddysoft
  31. 31. An Example, Take 4 • Context: 線上遊戲的市場競爭非常激烈,玩 家的選擇很多,除非你是知名大廠,能推出 曠世巨作,否則以傳統先付費才可以玩的遊 戲模式,要玩家在尚未入迷之前就先付費變 得越來越困難。 • Problem: 要如何讓玩家願意掏錢出來玩線上 遊戲? • Solution: 提供免費遊戲,先吸引玩家上癮, 再以販賣道具與周邊商品作為獲利來源。 Copyright@2013 Teddysoft
  32. 32. A pattern is a proven solution to a recurring problem in a specific context, and more. Copyright@2013 Teddysoft
  33. 33. 模式的六大基本元素 • Name : 樣式名稱,增加開發者的設計字彙 • Context: 描述問題發生的地形地物(美容前) • Problem: 描述問題本身 • Force: 問題的限制或特性 • Solution: 解決問題的方法 • Resulting Context (Consequence): 套用解決方 案之後的結果(美容後) Copyright@2013 Teddysoft
  34. 34. 沒有Context便無法判斷Solution • Problem: 要如何讓玩家願意掏錢出來玩線 上遊戲? • Solution: 1. 推出著名大作,玩家不買不可 2. 採用免費遊戲策略,但如果要升級則玩家就 必須要花錢購買道具 3. 推出賭博性線上遊戲 Copyright@2013 Teddysoft
  35. 35. Force是推擠與拉扯Problem的作用力, 也是塑造Solution的決定因素 圖片來源: https://upload.wikimedia.org/wikipedia/commons/9/99/Libyen-sandwueste1.jpg Copyright@2013 Teddysoft
  36. 36. Each pattern is a three-part rule, which expresses a relation between a certain context, a problem, and a solution. As an element in the world, each pattern is a relationship between a certain context, a certain system of forces which occurs repeatedly in that context, and a certain spatial configuration which allows these forces to resolve themselves. Copyright@2013 Teddysoft
  37. 37. An Example, Take 5.1 • Context: 線上遊戲的市場競爭非常激烈,玩家的 選擇很多,除非你是知名大廠,能推出曠世巨 作,否則以傳統先付費才可以玩的遊戲模式, 要玩家在尚未入迷之前就先付費變得越來越困 難。 • Problem: 要如何讓玩家在線上遊戲中付費? • Forces: – 安裝繁瑣或費時的遊戲將不易吸引玩家試玩,更談 不上收費的可能。 – 若玩家永遠只是付費,將減少他們持續玩同一款遊 戲的意願。 • Solution: 提供免費遊戲,先吸引玩家上癮,再 以販賣道具與周邊商品作為獲利來源。 Copyright@2013 Teddysoft
  38. 38. An Example, Take 5.2 • Context: 線上遊戲的市場競爭非常激烈,玩家的 選擇很多,因此傳統需要先付費才可以玩的遊 戲模式,要玩家在尚未入迷之前就先付費變得 越來越困難。 • Problem: 要如何讓玩家在線上遊戲中付費? • Forces: – 安裝繁瑣或費時的遊戲將不易吸引玩家試玩,更談 不上收費的可能。 – 若玩家永遠只是付費,將減少他們持續玩同一款遊 戲的意願。 • Solution: 提供快速、分段或免安裝的免費遊戲, 先吸引玩家上癮,再以販賣道具與周邊商品作 為獲利來源。提供網路商城,讓玩家可以買賣 道具,以提高遊戲的黏著度。Copyright@2013 Teddysoft
  39. 39. 回頭修改 Problem Copyright@2013 Teddysoft
  40. 40. An Example, Take 5.3 • Context: 線上遊戲的市場競爭非常激烈,玩家的選 擇很多,因此傳統需要先付費才可以玩的遊戲模式, 要玩家在尚未入迷之前就先付費變得越來越困難。 • Problem: 要如何讓玩家持續在線上遊戲中付費? • Forces: – 安裝繁瑣或費時的遊戲將不易吸引玩家試玩,更談不上 收費的可能。 – 若玩家永遠只是付費,將減少他們持續玩同一款遊戲的 意願。 • Solution: 提供快速、分段或免安裝的免費遊戲,先 吸引玩家上癮,再以販賣道具與周邊商品作為獲利 來源。提供網路商城,讓玩家可以買賣道具,以提 高遊戲的黏著度。Copyright@2013 Teddysoft
  41. 41. World Context Problem (Requirement, What) Solution (How, How to, How much) Machine Force告訴我們為什麼模式所要解決的「問題」是一個真正的 問題—為什麼這個問題很難,為什麼需要一個聰明的,甚至 是違反直覺的解決方案。Force也是了解為何會採用此種解決 方案的關鍵。 Problem force force force Copyright@2013 Teddysoft
  42. 42. 什麼是設計? • 設計是決定form、 context,以及兩者 之間的關係。 • 好的設計是form與 context的良好適應 關係。 《Notes on the Synthesis of Form》 Context Form force force force force Copyright@2013 Teddysoft
  43. 43. 練習:看一個例子,寫出你所 觀察到的Solution
  44. 44. Copyright@2013 Teddysoft 捷運忠孝新生站
  45. 45. 練習:寫出捷運轉乘站的 Force Copyright@2013 Teddysoft
  46. 46. Resulting Context Copyright@2013 Teddysoft
  47. 47. An Example, Take 6 • Context: 線上遊戲的市場競爭非常激烈,玩家的選擇很多,因此 傳統需要先付費才可以玩的遊戲模式,要玩家在尚未入迷之前就 先付費變得越來越困難。 • Problem: 要如何讓玩家持續在線上遊戲中付費? • Forces: – 安裝繁瑣或費時的遊戲將不易吸引玩家試玩,更談不上收費的可能。 – 若玩家永遠只是付費,將減少他們持續玩同一款遊戲的意願。 • Solution: 提供快速、分段或免安裝的免費遊戲,先吸引玩家上癮, 再以販賣道具與周邊商品作為獲利來源。提供網路商城,讓玩家 可以買賣道具,以提高遊戲的黏著度。 • Resulting Context: – 玩家使用遊戲的門檻降低,較容易在短期間吸引大量的使用者人數 – 只要使用者人數中的一定比例付費購買道具便可達到損益平衡 – 如果玩家對遊戲反應不佳,或是玩的人數很多但付費人數太少,經 營者可能會血本無歸 Copyright@2013 Teddysoft
  48. 48. Pattern Name Copyright@2013 Teddysoft
  49. 49. 兩種命名方法 • 名詞片語 (Noun-phrase) – 描述模式所建立或產生的結果 – 例子:Singleton, Command, Model-View- Controller • 動詞片語 (Verb-phrase) – 給定一個指令,描述如何達到模式解決方案所要 求的狀態 – 例子:Don’t Talk to Strangers, Separate Material Preparation from Integration Copyright@2013 Teddysoft
  50. 50. A pattern is a process and a thing. Copyright@2013 Teddysoft
  51. 51. A common ground for communication. Copyright@2013 Teddysoft
  52. 52. 雖然剛剛模式範例的說明,是從 上而下,但實際上尋找模式的過 程,是從下而上。 Solution  Problem(Forces)  Context Copyright@2013 Teddysoft
  53. 53. Copyright@2013 Teddysoft
  54. 54. Copyright@2013 Teddysoft
  55. 55. 練習:幫便利商店「集點活動」 寫出一個模式 Copyright@2013 Teddysoft
  56. 56. 模式是一種公式 • 套公式解題比較快且不易出錯 – 建構式數學 vs. 數學公式 • 問題百百種,如何能有公式可解決全部的 問題? – 一個模式只能解決一個特定的問題 Copyright@2013 Teddysoft
  57. 57. 常見模式的種類 • Analysis Pattern • Software Architecture Pattern • Design Pattern • Implementation Pattern • HCI Pattern Copyright@2013 Teddysoft
  58. 58. 透過模式建立軟體架構與設計 整體先於部分,然後透過差異化 的過程將整體逐步展開 Copyright@2013 Teddysoft
  59. 59. 保全監控系統初始架構 Client Type C Client Type B Client Type A Server Client Type D Device A Device B Device C Device D DatabaseUI User Copyright@2013 Teddysoft
  60. 60. 第1次分化 Client Type C Client Type B Client Type A Server Client Type D Device A Device B Device C Device D DatabaseUI User <server> <client> <client> <server> <client> <server> <server> <client> <server><client> Copyright@2013 Teddysoft
  61. 61. 第2次分化 Client Type C Client Type B Client Type A Server Client Type D Device A Device B Device C Device D DatabaseUI User <server> <client> <client> <server> <client> <server> <server> <client> <server><client> Plug-in Plug -in Copyright@2013 Teddysoft
  62. 62. 第3次分化 Client Type C Client Type B Client Type A Server Client Type D Device A Device B Device C Device D DatabaseUI User <server> <client> <client> <server> <client> <server> <server> <client> <server><client> Plug-in Plug -in OR- Mapping OR- Mapping Copyright@2013 Teddysoft
  63. 63. 第4次分化 Client Type C Client Type B Client Type A Server Client Type D Device A Device B Device C Device D DatabaseUI User <server> <client> <client> <server> <client> <server> <server> <client> <server><client> Plug-in Plug -in OR- Mapping OR- Mapping State Observer Command … Copyright@2013 Teddysoft
  64. 64. 12個物件導向設計觀念與原則
  65. 65. 6個物件導向設計觀念 • Class, Object, Instance • Interface • Inheritance • Polymorphism • Composition • Delegation Copyright@2013 Teddysoft
  66. 66. 6個物件導向設計原則 • 模組化。 • 減少耦合,增加內聚。 • 尋找hot spot。 • 生物多樣性原則。 • Programming to an Interface, not an Implementation (GoF). • Favor object composition over class inheritance (GoF). Copyright@2013 Teddysoft
  67. 67. 兩本武功祕笈 Copyright@2013 Teddysoft
  68. 68. 設計模式密碼:3 3 23
  69. 69. 設計模式的目的 • 紀錄人們設計物件導向軟體上的經驗。 • 重複使用已知成功的設計及架構。 • 提供一種有結構的文件化方式讓設計者容 易模仿已知的成功設計經驗。 • 幫助我們了解現存的物件導向系統。 不再雞同鴨講…XD Copyright@2013 Teddysoft
  70. 70. GoF (Gang of Four) 設計模式的格式 • 為什麼叫做 GoF Design Patterns? – 因為作者有四個人, Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides • GoF設計模式包含13個元素: – Pattern Name, Intent, Also Known As, Motivation, Applicability, Structure, Participants, Collaborations, Consequences, Implementation, Sample Code, Known Uses, Related Patterns Copyright@2013 Teddysoft
  71. 71. 兩種設計模式撰寫格式比較 Copyright@2013 Teddysoft
  72. 72. 依據用途,設計模式可分為三大類 • Creational Patterns (生成模式) – Abstract Factory, Builder, Factory Method, Prototype, Singleton • Structural Patterns (結構模式) – Adapter, Bridge, Composite, Decorator, Façade, Flyweight, Proxy • Behavioral Patterns (行為模式) – Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method, Visitor Copyright@2013 Teddysoft
  73. 73. 依據內部關係,設計模式可分為另 外三大類 • Abstract Coupling (抽象耦合) – State, Factory Method, Observer, Bridge, Builder, Command, Iterator, Visitor, Interpreter, Mediator, Adapter, Prototype, Proxy, Strategy • Recursive Structures (遞迴結構) – Composite, Chain of Responsibility, Decorator • Other Patterns (其他) – Abstract Factory, Flyweight, Singleton, Template Method, Memento Copyright@2013 Teddysoft
  74. 74. GoF書中一共有23個設計模式 • 5個生成模式 – Abstract Factory, Builder, Factory Method, Prototype, Singleton • 7個結構模式 – Adapter, Bridge, Composite, Decorator, Façade, Flyweight, Proxy • 11個行為模式 – Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method, Visitor Copyright@2013 Teddysoft
  75. 75. Day 1 快速回顧

×