SlideShare a Scribd company logo
1 of 99
Download to read offline
Design
Patterns
© 2014 Luster
Me
Reference
啓
Object
Oriented
Basic
⽤用情境,學設計模式
Class Diagram
MallardDuck
display() { }
swim()
quack()
RedheadDuck
display() { }
swim()
quack()
Class Diagram
MallardDuck
display() { }
swim()
quack()
RedheadDuck
display() { }
swim()
quack()
Duck
Class Diagram
MallardDuck
display() { } display() { }
RedheadDuck
Duck
swim()
quack()
Class Diagram
MallardDuck
display() { } display() { }
RedheadDuck
Duck
swim()
quack()
display()
Class Diagram
MallardDuck
display() { } display() { }
RedheadDuck
Duck
swim()
quack()
display()
模擬鴨子,全 改版
讓鴨子飛新
“
”
MallardDuck
display() { }
Duck
quack()
display()
swim()
RedheadDuck
display() { }
Class Diagram
MallardDuck
display() { }
Duck
quack()
display()
swim()
RedheadDuck
display() { }
fly()
Jason’s Class Diagram
公測那一天
黃色塑膠鴨竟然也會飛了- -|||
What’s happened ?
Duck
quack()
display()
swim()
fly()
RubberDuck
quack() { 吱吱叫; }
@Override
display() { }
Duck
quack()
display()
swim()
fly()
RubberDuck
display() { }
quack() { 吱吱叫; }
@Override
“
”
Jason’s Class Diagram II
Duck
quack()
display()
swim()
fly()
RubberDuck
quack() { 吱吱叫; }
@Override
display() { }
fly() { // Do nothing! }
@Override
“
”
FireDuck
quack() { // Do nothing! }
@Override
display() { }
fly() { // Do nothing! }
@Override
swim() { // Do nothing! }
@Override
A.
B.
C.
D.
E.
F.
“ ”
“ ”
“ ”
而且又繼續用繼承的方式,那我豈不是要
逐鴨審查
而且又繼續用繼承的方式,那我豈不是要
“
”
Duck
display()
swim()Flyable
fly()
Quackable
quack()
MallardDuck RedheadDuck RubberDuck
“
”
Duck
display()
swim()Flyable
fly()
Quackable
quack()
MallardDuck
display()
RedheadDuck
display()
RubberDuck
display()
“
”
Duck
display()
swim()Flyable
fly()
Quackable
quack()
MallardDuck
fly()
display()
RedheadDuck
fly()
display()
RubberDuck
display()
“
”
Duck
display()
swim()Flyable
fly()
Quackable
quack()
MallardDuck
fly()
display()
quack()
RedheadDuck
fly()
display()
quack()
RubberDuck
display()
quack()
“
”
Duck
display()
swim()Flyable
fly()
Quackable
quack()
MallardDuck
display()
RedheadDuck
display()
RubberDuck
display()
“
”
fly()
quack()
fly()
quack()
quack()
設計守則
Design Principle
1
1
2
Program to an !
interface,!
not an implementation.
2
Example
Soldier
attack()
Sniper
attack() {!
! snipe();!
}
snipe()
Stormtrooper
attack() {!
! shoot();!
}
shoot()
Program to an implement
Sniper soldier = new Sniper();
soldier.attack();
Program to an interface
Sniper soldier = new Sniper();
soldier.attack();
Soldier soldier = new Sniper();
soldier.attack();
Sniper soldier = new Sniper();
soldier.attack();
Soldier soldier = new Sniper();
soldier.attack();
Soldier soldier = getSoldier();
soldier.attack();
Program to an interface
QuackBehavior
quack()
<< interface >>
FlyBehavior
fly()
<< interface >>
QuackBehavior
quack()
<< interface >>
FlyBehavior
fly()
<< interface >>
Squeak
quack() { 吱吱叫; }
MuteQuack
quack() { 不會叫; }
Quack
quack() { 呱呱叫; }
FlyWithWings
fly() { ⽤用翅膀飛; }
FlyWithRocket
fly() { ⽤用⽕火箭飛; }
FlyNoWay
fly() { 不會飛; }
Duck
display()
swim()
Duck
display()
swim()
QuackBehavior quackBehavior
FlyBehavior flyBehavior
public abstract class Duck {
QuackBehavior quackBehavior;
FlyBehavior flyBehavior;
}
Duck
display()
swim()
performQuack()
performFly()
QuackBehavior quackBehavior
FlyBehavior flyBehavior
public abstract class Duck {
QuackBehavior quackBehavior;
FlyBehavior flyBehavior;
!
public void performQuack() {
quackBehavior.quack();
}
public void performFly() {…}
}
Duck
display()
swim()
performQuack()
performFly()
QuackBehavior quackBehavior
FlyBehavior flyBehavior
public abstract class Duck {
QuackBehavior quackBehavior;
FlyBehavior flyBehavior;
!
public void performQuack() {
!
}
public void performFly() {…}
}
quackBehavior.quack();
public abstract class Duck {
QuackBehavior quackBehavior;
FlyBehavior flyBehavior;
!
public void performQuack() {
quackBehavior.quack();
}
public void performFly() {…}
}
public abstract class Duck {
QuackBehavior quackBehavior;
FlyBehavior flyBehavior;
!
public void performQuack() {
quackBehavior.quack();
}
public void performFly() {…}
}
public class MallardDuck extends Duck {
!
public MallardDuck() {
quackBehavior = new Quack();
flyBehavior = new FlyWithNoWings();
}
!
public void display() {…}
}
public class DuckSimulator {
!
public static void main(String[] args) {
Duck mallard = new MallardDuck();
mallard.performQuack();
}
}
public class DuckSimulator {
!
public static void main(String[] args) {
Duck mallard = new MallardDuck();
mallard.performQuack();
}
}
Duck
display()
swim()
performQuack()
performFly()
QuackBehavior quackBehavior
FlyBehavior flyBehavior
public abstract class Duck {
QuackBehavior quackBehavior;
FlyBehavior flyBehavior;
!
public void performQuack() {
quackBehavior.quack();
}
public void performFly() {…}
!
}
public abstract class Duck {
QuackBehavior quackBehavior;
FlyBehavior flyBehavior;
!
public void performQuack() {
quackBehavior.quack();
}
public void performFly() {…}
!
}
Duck
display()
swim()
performQuack()
performFly()
QuackBehavior quackBehavior
FlyBehavior flyBehavior
setQuackBehavior()
setFlyBehavior()
Duck
display()
swim()
performQuack()
performFly()
QuackBehavior quackBehavior
FlyBehavior flyBehavior
setQuackBehavior()
setFlyBehavior()
public abstract class Duck {
QuackBehavior quackBehavior;
FlyBehavior flyBehavior;
!
public void performQuack() {
quackBehavior.quack();
}
public void performFly() {…}
!
public void setQuackBehavior(
QuackBehavior behavior) {
this.quackBehavior = behavior;
}
public void setFlyBehavior…
}
public class DuckSimulator {
!
public static void main(String[] args) {
Duck mallard = new MallardDuck();
mallard.performQuack();
mallard.setQuackBehavior(new Squeak());
mallard.performQuack();
}
}
public class DuckSimulator {
!
public static void main(String[] args) {
Duck mallard = new MallardDuck();
mallard.performQuack();
mallard.setQuackBehavior(new Squeak());
mallard.performQuack();
}
}
public class DuckSimulator {
!
public static void main(String[] args) {
Duck mallard = new MallardDuck();
mallard.performQuack();
mallard.setQuackBehavior(new Squeak());
mallard.performQuack();
}
}
QuackBehavior
quack()
<< interface >>
Quack
quack() { 呱; }
MuteQuack
quack() {}
Squeak
quack() { 吱; }
FlyBehavior
fly()
<< interface >>
FlyWithWings
fly() { 拍翅膀; }
FlyNoWay
fly() {}
FlyWithRocket
fly() { 噴射; }
Duck QuackBehavior
quack()
<< interface >>
Quack
quack() { 呱; }
MuteQuack
quack() {}
Squeak
quack() { 吱; }
FlyBehavior
fly()
<< interface >>
FlyWithWings
fly() { 拍翅膀; }
FlyNoWay
fly() {}
FlyWithRocket
fly() { 噴射; }
MallardDuck
display()
swim()
RedheadDuck
display()
swim()
RubberDuck
display()
swim()
QuackBehavior
quack()
<< interface >>
Quack
quack() { 呱; }
MuteQuack
quack() {}
Squeak
quack() { 吱; }
FlyBehavior
fly()
<< interface >>
FlyWithWings
fly() { 拍翅膀; }
FlyNoWay
fly() {}
FlyWithRocket
fly() { 噴射; }
MallardDuck
display()
RedheadDuck
display()
RubberDuck
display()
Duck
display()
swim()
Duck
display()
swim()
QuackBehavior quackBehavior
FlyBehavior flyBehavior
QuackBehavior
quack()
<< interface >>
Quack
quack() { 呱; }
MuteQuack
quack() {}
Squeak
quack() { 吱; }
FlyBehavior
fly()
<< interface >>
FlyWithWings
fly() { 拍翅膀; }
FlyNoWay
fly() {}
FlyWithRocket
fly() { 噴射; }
MallardDuck
display()
RedheadDuck
display()
RubberDuck
display()
Duck
display()
swim()
performQuack()
performFly()
QuackBehavior quackBehavior
FlyBehavior flyBehavior
QuackBehavior
quack()
<< interface >>
Quack
quack() { 呱; }
MuteQuack
quack() {}
Squeak
quack() { 吱; }
FlyBehavior
fly()
<< interface >>
FlyWithWings
fly() { 拍翅膀; }
FlyNoWay
fly() {}
FlyWithRocket
fly() { 噴射; }
MallardDuck
display()
RedheadDuck
display()
RubberDuck
display()
Duck
display()
swim()
performQuack()
performFly()
QuackBehavior quackBehavior
FlyBehavior flyBehavior
setQuackBehavior()
setFlyBehavior()
QuackBehavior
quack()
<< interface >>
Quack
quack() { 呱; }
MuteQuack
quack() {}
Squeak
quack() { 吱; }
FlyBehavior
fly()
<< interface >>
FlyWithWings
fly() { 拍翅膀; }
FlyNoWay
fly() {}
FlyWithRocket
fly() { 噴射; }
MallardDuck
display()
RedheadDuck
display()
RubberDuck
display()
Duck
display()
swim()
performQuack()
performFly()
QuackBehavior quackBehavior
FlyBehavior flyBehavior
setQuackBehavior()
setFlyBehavior()
QuackBehavior
quack()
<< interface >>
Quack
quack() { 呱; }
MuteQuack
quack() {}
Squeak
quack() { 吱; }
FlyBehavior
fly()
<< interface >>
FlyWithWings
fly() { 拍翅膀; }
FlyNoWay
fly() {}
FlyWithRocket
fly() { 噴射; }
MallardDuck
display()
RedheadDuck
display()
RubberDuck
display()
3
策略模式
Strategy
Strategy
Strategy
Strategy
Strategy
為什麼我們需要學設計模式
Z > B
Z > B
Jas
!
結論
變化
設計
Thanks
Jason Chung

More Related Content

What's hot

Riga DevDays 2017 - The hitchhiker’s guide to Java class reloading
Riga DevDays 2017 - The hitchhiker’s guide to Java class reloadingRiga DevDays 2017 - The hitchhiker’s guide to Java class reloading
Riga DevDays 2017 - The hitchhiker’s guide to Java class reloading
Anton Arhipov
 
Unbearable Test Code Smell
Unbearable Test Code SmellUnbearable Test Code Smell
Unbearable Test Code Smell
Steven Mak
 
The Magnificent Seven
The Magnificent SevenThe Magnificent Seven
The Magnificent Seven
Mike Fogus
 

What's hot (20)

Riga DevDays 2017 - The hitchhiker’s guide to Java class reloading
Riga DevDays 2017 - The hitchhiker’s guide to Java class reloadingRiga DevDays 2017 - The hitchhiker’s guide to Java class reloading
Riga DevDays 2017 - The hitchhiker’s guide to Java class reloading
 
Greach, GroovyFx Workshop
Greach, GroovyFx WorkshopGreach, GroovyFx Workshop
Greach, GroovyFx Workshop
 
Kotlin : Advanced Tricks - Ubiratan Soares
Kotlin : Advanced Tricks - Ubiratan SoaresKotlin : Advanced Tricks - Ubiratan Soares
Kotlin : Advanced Tricks - Ubiratan Soares
 
GeeCON 2017 - TestContainers. Integration testing without the hassle
GeeCON 2017 - TestContainers. Integration testing without the hassleGeeCON 2017 - TestContainers. Integration testing without the hassle
GeeCON 2017 - TestContainers. Integration testing without the hassle
 
Why Sifu
Why SifuWhy Sifu
Why Sifu
 
RxJS - 封裝程式的藝術
RxJS - 封裝程式的藝術RxJS - 封裝程式的藝術
RxJS - 封裝程式的藝術
 
Android TDD & CI
Android TDD & CIAndroid TDD & CI
Android TDD & CI
 
Simulator customizing & testing for Xcode 9
Simulator customizing & testing for Xcode 9Simulator customizing & testing for Xcode 9
Simulator customizing & testing for Xcode 9
 
Scala in practice
Scala in practiceScala in practice
Scala in practice
 
Unbearable Test Code Smell
Unbearable Test Code SmellUnbearable Test Code Smell
Unbearable Test Code Smell
 
java sockets
 java sockets java sockets
java sockets
 
Classic Games Development with Drools
Classic Games Development with DroolsClassic Games Development with Drools
Classic Games Development with Drools
 
Ruby is Awesome
Ruby is AwesomeRuby is Awesome
Ruby is Awesome
 
Cha
ChaCha
Cha
 
TDC2018SP | Trilha Go - Processando analise genetica em background com Go
TDC2018SP | Trilha Go - Processando analise genetica em background com GoTDC2018SP | Trilha Go - Processando analise genetica em background com Go
TDC2018SP | Trilha Go - Processando analise genetica em background com Go
 
JPoint 2016 - Валеев Тагир - Странности Stream API
JPoint 2016 - Валеев Тагир - Странности Stream APIJPoint 2016 - Валеев Тагир - Странности Stream API
JPoint 2016 - Валеев Тагир - Странности Stream API
 
Scala introduction
Scala introductionScala introduction
Scala introduction
 
ios,objective tutorial
ios,objective tutorial ios,objective tutorial
ios,objective tutorial
 
The Magnificent Seven
The Magnificent SevenThe Magnificent Seven
The Magnificent Seven
 
스위프트를 여행하는 히치하이커를 위한 스타일 안내
스위프트를 여행하는 히치하이커를 위한 스타일 안내스위프트를 여행하는 히치하이커를 위한 스타일 안내
스위프트를 여행하는 히치하이커를 위한 스타일 안내
 

Viewers also liked

前端魔法師召集令
前端魔法師召集令前端魔法師召集令
前端魔法師召集令
Jason Chung
 
Design Pattern - Factory Pattern
Design Pattern - Factory PatternDesign Pattern - Factory Pattern
Design Pattern - Factory Pattern
Li-Wei Yao
 

Viewers also liked (20)

前端魔法師召集令
前端魔法師召集令前端魔法師召集令
前端魔法師召集令
 
Factory Pattern in Luster
Factory Pattern in LusterFactory Pattern in Luster
Factory Pattern in Luster
 
JCConf TW 2014 - Modern Design Pattern
JCConf TW 2014 - Modern Design PatternJCConf TW 2014 - Modern Design Pattern
JCConf TW 2014 - Modern Design Pattern
 
台灣創意週 - 創意烏托邦
台灣創意週 - 創意烏托邦台灣創意週 - 創意烏托邦
台灣創意週 - 創意烏托邦
 
Let's talk about Web Design
Let's talk about Web DesignLet's talk about Web Design
Let's talk about Web Design
 
Maker in Luster
Maker in LusterMaker in Luster
Maker in Luster
 
策略模式
策略模式 策略模式
策略模式
 
Design & Thinking in Luster
Design & Thinking in LusterDesign & Thinking in Luster
Design & Thinking in Luster
 
Design pattern strategy pattern 策略模式
Design pattern strategy pattern 策略模式Design pattern strategy pattern 策略模式
Design pattern strategy pattern 策略模式
 
常見設計模式介紹
常見設計模式介紹常見設計模式介紹
常見設計模式介紹
 
Design Pattern - Factory Pattern
Design Pattern - Factory PatternDesign Pattern - Factory Pattern
Design Pattern - Factory Pattern
 
Brand Strategy
Brand StrategyBrand Strategy
Brand Strategy
 
Design disruption kalyan
Design disruption kalyanDesign disruption kalyan
Design disruption kalyan
 
Deccan chargers-brand-strategy
Deccan chargers-brand-strategyDeccan chargers-brand-strategy
Deccan chargers-brand-strategy
 
The perfect handjob
The perfect handjobThe perfect handjob
The perfect handjob
 
Creating Great Branding Practices
Creating Great Branding PracticesCreating Great Branding Practices
Creating Great Branding Practices
 
設計模式的解析與活用:分析
設計模式的解析與活用:分析設計模式的解析與活用:分析
設計模式的解析與活用:分析
 
Temple Strategy - Product role in brand creation provocation
Temple Strategy - Product role in brand creation provocationTemple Strategy - Product role in brand creation provocation
Temple Strategy - Product role in brand creation provocation
 
最终 大屏手机上的设计策略
最终 大屏手机上的设计策略最终 大屏手机上的设计策略
最终 大屏手机上的设计策略
 
基富通證券品牌識別
基富通證券品牌識別基富通證券品牌識別
基富通證券品牌識別
 

Similar to Design Patterns in Luster

JJUG CCC 2011 Spring
JJUG CCC 2011 SpringJJUG CCC 2011 Spring
JJUG CCC 2011 Spring
Kiyotaka Oku
 
How to Clone Flappy Bird in Swift
How to Clone Flappy Bird in SwiftHow to Clone Flappy Bird in Swift
How to Clone Flappy Bird in Swift
Giordano Scalzo
 

Similar to Design Patterns in Luster (18)

Ernst kuilder (Nelen & Schuurmans) - De waterkaart van Nederland: technisch g...
Ernst kuilder (Nelen & Schuurmans) - De waterkaart van Nederland: technisch g...Ernst kuilder (Nelen & Schuurmans) - De waterkaart van Nederland: technisch g...
Ernst kuilder (Nelen & Schuurmans) - De waterkaart van Nederland: technisch g...
 
Dart London hackathon
Dart  London hackathonDart  London hackathon
Dart London hackathon
 
JavaFX 2.0 With Alternative Languages - Groovy, Clojure, Scala, Fantom, and V...
JavaFX 2.0 With Alternative Languages - Groovy, Clojure, Scala, Fantom, and V...JavaFX 2.0 With Alternative Languages - Groovy, Clojure, Scala, Fantom, and V...
JavaFX 2.0 With Alternative Languages - Groovy, Clojure, Scala, Fantom, and V...
 
JavaFX 2.0 With Alternative Languages - Groovy, Clojure, Scala, Fantom, and V...
JavaFX 2.0 With Alternative Languages - Groovy, Clojure, Scala, Fantom, and V...JavaFX 2.0 With Alternative Languages - Groovy, Clojure, Scala, Fantom, and V...
JavaFX 2.0 With Alternative Languages - Groovy, Clojure, Scala, Fantom, and V...
 
JavaFX 2.0 With Alternative Languages - JavaOne 2011
JavaFX 2.0 With Alternative Languages - JavaOne 2011JavaFX 2.0 With Alternative Languages - JavaOne 2011
JavaFX 2.0 With Alternative Languages - JavaOne 2011
 
Metaprogramming in Haskell
Metaprogramming in HaskellMetaprogramming in Haskell
Metaprogramming in Haskell
 
Scala Intro
Scala IntroScala Intro
Scala Intro
 
Effective Java with Groovy & Kotlin - How Languages Influence Adoption of Goo...
Effective Java with Groovy & Kotlin - How Languages Influence Adoption of Goo...Effective Java with Groovy & Kotlin - How Languages Influence Adoption of Goo...
Effective Java with Groovy & Kotlin - How Languages Influence Adoption of Goo...
 
JavaFX 2.0 With Alternative Languages [Portuguese]
JavaFX 2.0 With Alternative Languages [Portuguese]JavaFX 2.0 With Alternative Languages [Portuguese]
JavaFX 2.0 With Alternative Languages [Portuguese]
 
JavaFX
JavaFXJavaFX
JavaFX
 
JavaFX Your Way: Building JavaFX Applications with Alternative Languages
JavaFX Your Way: Building JavaFX Applications with Alternative LanguagesJavaFX Your Way: Building JavaFX Applications with Alternative Languages
JavaFX Your Way: Building JavaFX Applications with Alternative Languages
 
Hidden rocks in Oracle ADF
Hidden rocks in Oracle ADFHidden rocks in Oracle ADF
Hidden rocks in Oracle ADF
 
JJUG CCC 2011 Spring
JJUG CCC 2011 SpringJJUG CCC 2011 Spring
JJUG CCC 2011 Spring
 
Hacking JavaFX with Groovy, Clojure, Scala, and Visage: Stephen Chin
Hacking JavaFX with Groovy, Clojure, Scala, and Visage: Stephen ChinHacking JavaFX with Groovy, Clojure, Scala, and Visage: Stephen Chin
Hacking JavaFX with Groovy, Clojure, Scala, and Visage: Stephen Chin
 
Hacking JavaFX with Groovy, Clojure, Scala, and Visage
Hacking JavaFX with Groovy, Clojure, Scala, and VisageHacking JavaFX with Groovy, Clojure, Scala, and Visage
Hacking JavaFX with Groovy, Clojure, Scala, and Visage
 
Mini-curso JavaFX Aula1
Mini-curso JavaFX Aula1Mini-curso JavaFX Aula1
Mini-curso JavaFX Aula1
 
Canvas al ajillo
Canvas al ajilloCanvas al ajillo
Canvas al ajillo
 
How to Clone Flappy Bird in Swift
How to Clone Flappy Bird in SwiftHow to Clone Flappy Bird in Swift
How to Clone Flappy Bird in Swift
 

Recently uploaded

IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 

Recently uploaded (20)

From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 

Design Patterns in Luster