O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.
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 教材
Próximos SlideShares
Carregando em…5
×

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

Audiolivros relacionados

Gratuito durante 30 dias do Scribd

Ver tudo
  • Seja o primeiro a comentar

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 快速回顧

×