SlideShare a Scribd company logo
1 of 47
Download to read offline
设计模式
Design Pattern

@⽼老张的匠⼼心
@⻜飞吧1016
为什么使⽤用设计模式
设计
Design
模式
Pattern
设计模式定义
摘⾃自Wiki百科

设计模式这个术语是由Erich Gamma等⼈人在1990年
代从建筑设计领域引⼊入到计算机科学中的。它是对
软件设计中普遍存在(反复出现)的各种问题,所
提出的解決⽅方案。
!

设计模式并不直接⽤用来完成程序的编写,⽽而是描述
在各种不同情况下,要怎么解決问题的⼀一种⽅方案。
So In a Nut Shell….
Agenda

创建模式
•
•
•

简单⼯工⼚厂
抽象⼯工⼚厂
单例

!

结构模式
•
•

适配器
代理


⾏行为模式
•
•

模板
观察者
创建模式
Creational Pattern
简单
⼯工⼚厂模式
Factory
抽象⼯工⼚厂模式
Abstract Factory
Intel和AMD平台⼤大战
把CPU和显卡插到主板上
单例模式
Singleton
Singleton v1.0
Singleton v1.1
Singleton v1.2
Singleton v1.3
结构模式
Structure	
  Pattern
适配器模式
Adaptor
适配器模式
• 类适配器模式
适配器模式
• 对象适配器模式
适配器模式
• 需要记住的:	
  
– Adaptor模式的⽤用意是要改变源的接⼝口	
  
– 与⺫⽬目标接⼝口相容	
  
• ⾓角⾊色:	
  
– ⺫⽬目标(target)	
  
– 源(adaptee)	
  
– 适配器(adaptor)	
  
• Concrete	
  class(必须是具体的类)
代理模式
Proxy
代理模式
• 对其他对象提供⼀一种代理⽤用以控制对这个对象的访问	
  
– 在某些情况下,⼀一个对象不能或者不想直接引⽤用另⼀一个对象	
  
– 代理模式可以在客户端和⺫⽬目标之间起到中介的作⽤用	
  

• 其本质是在实际对象和调⽤用者之间插⼊入⼀一个中间⼈人(middle-­‐
man)
代理模式
• Proxy模式
代理模式
• 抽象对象	
  
– ⽣生命⺫⽬目标和代理的共同接⼝口	
  

• ⺫⽬目标对象	
  
– 代理使⽤用的⺫⽬目标实例	
  

• 代理对象	
  
– 包含⺫⽬目标对象,给客户端提供服务
⾏行为模式
Behavior	
  Pattern
模板⽅方法模式
Template
模板⽅方法模式
• template模式
模板⽅方法模式
• 声明⼀一些抽象⽅方法迫使⼦子类实现	
  
!

• 两个重要⾓角⾊色:	
  
– 抽象模板	
  
– 具体模板
观察者模式
Observer
观察者模式
• observer模式
观察者模式
• 使⽤用场景:	
  
– ⼀一个抽象模型有两个⽅方⾯面,⼀一个依赖于另⼀一个	
  
– 两个⽅方⾯面各⾃自独⽴立(在不同的类中)	
  
– ⼀一个改变需要同时改变其他对象	
  
– 需要通知其他对象,但⽆无法知道都有哪些对象(不
希望紧耦合)
Thought works design pattern   jiukun zhang
Thought works design pattern   jiukun zhang
Thought works design pattern   jiukun zhang
Thought works design pattern   jiukun zhang

More Related Content

Similar to Thought works design pattern jiukun zhang

iOS 设计模式简介
iOS 设计模式简介iOS 设计模式简介
iOS 设计模式简介Xiaobo Zhuge
 
20130112用原型驅動設計@webconf
20130112用原型驅動設計@webconf20130112用原型驅動設計@webconf
20130112用原型驅動設計@webconfJustin Lee
 
产品经理实用工具全集(1 8)
产品经理实用工具全集(1 8)产品经理实用工具全集(1 8)
产品经理实用工具全集(1 8)Gauin
 
成大心理系-Prototyping方法
成大心理系-Prototyping方法成大心理系-Prototyping方法
成大心理系-Prototyping方法Souyi Yang
 
设计模式-单例、享元、工厂与抽象工厂
设计模式-单例、享元、工厂与抽象工厂设计模式-单例、享元、工厂与抽象工厂
设计模式-单例、享元、工厂与抽象工厂诸葛修车网-诸葛商城
 
互动设计的方法初探
互动设计的方法初探互动设计的方法初探
互动设计的方法初探yaai
 
Developer vs designer
Developer vs designerDeveloper vs designer
Developer vs designerRobert Luo
 
Ddd(meetup 2) ddd with clean architecture
Ddd(meetup 2) ddd with clean architectureDdd(meetup 2) ddd with clean architecture
Ddd(meetup 2) ddd with clean architecture國昭 張
 
團隊開發永遠的痛 談導入團隊開發的共同規範(Final)
團隊開發永遠的痛   談導入團隊開發的共同規範(Final)團隊開發永遠的痛   談導入團隊開發的共同規範(Final)
團隊開發永遠的痛 談導入團隊開發的共同規範(Final)Gelis Wu
 
极速 Angular 开发:效能调校技巧 (ngChina 2019)
极速 Angular 开发:效能调校技巧 (ngChina 2019)极速 Angular 开发:效能调校技巧 (ngChina 2019)
极速 Angular 开发:效能调校技巧 (ngChina 2019)Will Huang
 
Angular從入門到實戰(二)
Angular從入門到實戰(二)Angular從入門到實戰(二)
Angular從入門到實戰(二)志龍 陳
 
2013/05/19 Sketching with code@JSDC2013
2013/05/19 Sketching with code@JSDC20132013/05/19 Sketching with code@JSDC2013
2013/05/19 Sketching with code@JSDC2013Justin Lee
 
開放原始碼 Ch2.3 app - oss - ui framewoks (ver 1.0)
開放原始碼 Ch2.3   app - oss - ui framewoks (ver 1.0)開放原始碼 Ch2.3   app - oss - ui framewoks (ver 1.0)
開放原始碼 Ch2.3 app - oss - ui framewoks (ver 1.0)My own sweet home!
 
设计师转型培训-工具篇
设计师转型培训-工具篇设计师转型培训-工具篇
设计师转型培训-工具篇Robert Luo
 
程序员与技术
程序员与技术程序员与技术
程序员与技术ligaoren
 
如何培養架構性思考(談軟體架構師必經之路)
如何培養架構性思考(談軟體架構師必經之路)如何培養架構性思考(談軟體架構師必經之路)
如何培養架構性思考(談軟體架構師必經之路)Gelis Wu
 
領域驅動設計
領域驅動設計領域驅動設計
領域驅動設計Pei-Hsun Kao
 
Djt22 justinliu djt.qq.com
Djt22 justinliu djt.qq.comDjt22 justinliu djt.qq.com
Djt22 justinliu djt.qq.comdrewz lin
 
Djt22 justinliu djt.qq.com
Djt22 justinliu djt.qq.comDjt22 justinliu djt.qq.com
Djt22 justinliu djt.qq.comdrewz lin
 
OpenSCAD Workshop
OpenSCAD WorkshopOpenSCAD Workshop
OpenSCAD WorkshopJustin Lin
 

Similar to Thought works design pattern jiukun zhang (20)

iOS 设计模式简介
iOS 设计模式简介iOS 设计模式简介
iOS 设计模式简介
 
20130112用原型驅動設計@webconf
20130112用原型驅動設計@webconf20130112用原型驅動設計@webconf
20130112用原型驅動設計@webconf
 
产品经理实用工具全集(1 8)
产品经理实用工具全集(1 8)产品经理实用工具全集(1 8)
产品经理实用工具全集(1 8)
 
成大心理系-Prototyping方法
成大心理系-Prototyping方法成大心理系-Prototyping方法
成大心理系-Prototyping方法
 
设计模式-单例、享元、工厂与抽象工厂
设计模式-单例、享元、工厂与抽象工厂设计模式-单例、享元、工厂与抽象工厂
设计模式-单例、享元、工厂与抽象工厂
 
互动设计的方法初探
互动设计的方法初探互动设计的方法初探
互动设计的方法初探
 
Developer vs designer
Developer vs designerDeveloper vs designer
Developer vs designer
 
Ddd(meetup 2) ddd with clean architecture
Ddd(meetup 2) ddd with clean architectureDdd(meetup 2) ddd with clean architecture
Ddd(meetup 2) ddd with clean architecture
 
團隊開發永遠的痛 談導入團隊開發的共同規範(Final)
團隊開發永遠的痛   談導入團隊開發的共同規範(Final)團隊開發永遠的痛   談導入團隊開發的共同規範(Final)
團隊開發永遠的痛 談導入團隊開發的共同規範(Final)
 
极速 Angular 开发:效能调校技巧 (ngChina 2019)
极速 Angular 开发:效能调校技巧 (ngChina 2019)极速 Angular 开发:效能调校技巧 (ngChina 2019)
极速 Angular 开发:效能调校技巧 (ngChina 2019)
 
Angular從入門到實戰(二)
Angular從入門到實戰(二)Angular從入門到實戰(二)
Angular從入門到實戰(二)
 
2013/05/19 Sketching with code@JSDC2013
2013/05/19 Sketching with code@JSDC20132013/05/19 Sketching with code@JSDC2013
2013/05/19 Sketching with code@JSDC2013
 
開放原始碼 Ch2.3 app - oss - ui framewoks (ver 1.0)
開放原始碼 Ch2.3   app - oss - ui framewoks (ver 1.0)開放原始碼 Ch2.3   app - oss - ui framewoks (ver 1.0)
開放原始碼 Ch2.3 app - oss - ui framewoks (ver 1.0)
 
设计师转型培训-工具篇
设计师转型培训-工具篇设计师转型培训-工具篇
设计师转型培训-工具篇
 
程序员与技术
程序员与技术程序员与技术
程序员与技术
 
如何培養架構性思考(談軟體架構師必經之路)
如何培養架構性思考(談軟體架構師必經之路)如何培養架構性思考(談軟體架構師必經之路)
如何培養架構性思考(談軟體架構師必經之路)
 
領域驅動設計
領域驅動設計領域驅動設計
領域驅動設計
 
Djt22 justinliu djt.qq.com
Djt22 justinliu djt.qq.comDjt22 justinliu djt.qq.com
Djt22 justinliu djt.qq.com
 
Djt22 justinliu djt.qq.com
Djt22 justinliu djt.qq.comDjt22 justinliu djt.qq.com
Djt22 justinliu djt.qq.com
 
OpenSCAD Workshop
OpenSCAD WorkshopOpenSCAD Workshop
OpenSCAD Workshop
 

Thought works design pattern jiukun zhang