SlideShare a Scribd company logo
1 of 36
Download to read offline
Design patterns
Ender Aydin Orak @ 2014
“Human beings are pattern-seeking animals. It's part
of our DNA.
we always look for the wider, bigger explanations
for things.”
- Adrian McKinty
first of all (as always), think about it …
“As long as habit and routine dictate the pattern of
living, new dimensions of the soul will not emerge.”
- Henry Van Dyke
first of all (as always), think about it …
“The best way to learn to write simple code is to
write simple code.


Patterns, like all forms of complexity, should be
avoided until they are absolutely necessary.”
- Jeff Atwood
co-founder - stackoverflow
first of all (as always), think about it …
http://goo.gl/Myu8uU
“Design patterns” are concepts used by people who
can’t learn by any method except memorization, so in
place of actual programming ability, they memorize
“patterns” and throw each one in sequence at a
problem until it works.
- Dark Shikari
first of all (as always), think about it …
types of patterns
creatıonal
structural
behavıoral
creational patterns
■ used to create objects for a suitable class that serves
as a solution for a problem
■ particularly useful when you are taking advantage of
polymorphism, choose between different classes at
runtime rather than compile time
■ allow objects to be created in a system without having
to identify a specific class type in the code
Structural patterns
■ form larger structures from individual parts,
generally of different classes.
■ vary a great deal depending on what sort of structure
is being created for what purpose.
■ are concerned with how classes and objects are
composed to form larger structures.
behavioral patterns
■ describe interactions between objects
■ They focus on how objects communicate with each other
■ They can reduce complex flow charts to mere
interconnections between objects of various classes
Abstract factory
■ creational methods returning the factory itself which
in turn can be used to create another abstract/
interface type)
■ javax.xml.parsers.DocumentBuilderFactory#newInstance()
■ javax.xml.transform.TransformerFactory#newInstance()
■ javax.xml.xpath.XPathFactory#newInstance()
builder
■ creational methods returning the instance itself)
■ java.lang.StringBuilder#append() (unsynchronized)
■ java.lang.StringBuffer#append() (synchronized)
■ java.nio.ByteBuffer#put() (also on CharBuffer,
ShortBuffer, IntBuffer, LongBuffer, FloatBuffer and
DoubleBuffer)
■ javax.swing.GroupLayout.Group#addComponent()
■ All implementations of java.lang.Appendable
factory method
■ creational methods returning an implementation of an
abstract/interface type
■ java.util.Calendar#getInstance()
■ java.util.ResourceBundle#getBundle()
■ java.text.NumberFormat#getInstance()
■ java.nio.charset.Charset#forName()
■ java.net.URLStreamHandlerFactory#createURLStreamHandler
(String) (Returns singleton object per protocol)
prototype
■ creational methods returning a different instance of
itself with the same properties
■ java.lang.Object#clone() (the class has to implement
java.lang.Cloneable)
singleton
■ creational methods returning the same instance
(usually of itself) everytime
■ java.lang.Runtime#getRuntime()
■ java.awt.Desktop#getDesktop()
Structural patterns
■ form larger structures from individual parts,
generally of different classes.
■ vary a great deal depending on what sort of structure
is being created for what purpose.
■ are concerned with how classes and objects are
composed to form larger structures.
bridge
■ creational methods taking an instance of different
abstract/interface type and returning an
implementation of own abstract/interface type which
delegates/uses the given instance
■ new LinkedHashMap(LinkedHashSet<K>, List<V>) which
returns an unmodifiable linked map which doesn't clone
the items, but uses them.
■ The java.util.Collections#newSetFromMap() and
singletonXXX() methods however comes close.
composite
■ behavioral methods taking an instance of same
abstract/interface type into a tree structure
■ java.awt.Container#add(Component) (practically all over
Swing thus)
■ javax.faces.component.UIComponent#getChildren()
(practically all over JSF UI thus)
decorator
■ creational methods taking an instance of same
abstract/interface type which adds additional
behaviour
■ All subclasses of java.io.InputStream, OutputStream,
Reader and Writer have a constructor taking an instance
of same type.
■ java.util.Collections, the checkedXXX(),
synchronizedXXX() and unmodifiableXXX() methods.
■ javax.servlet.http.HttpServletRequestWrapper and
HttpServletResponseWrapper
facade
■ behavioral methods which internally uses instances of
different independent abstract/interface types
■ javax.faces.context.FacesContext, it internally uses
among others the abstract/interface types LifeCycle,
ViewHandler, NavigationHandler and many more without
that the enduser has to worry about it (which are
however overrideable by injection).
■ javax.faces.context.ExternalContext, which internally
uses ServletContext, HttpSession, HttpServletRequest,
HttpServletResponse, etc.
flyweight
■ creational methods returning a cached instance, a bit
the "multiton" idea
■ java.lang.Integer#valueOf(int) (also on Boolean, Byte,
Character, Short and Long)
proxy
■ creational methods which returns an implementation of
given abstract/interface type which in turn delegates/
uses a different implementation of given abstract/
interface type
■ java.lang.reflect.Proxy
■ java.rmi.*, the whole API actually.
behavioral patterns
■ describe interactions between objects
■ They focus on how objects communicate with each other
■ They can reduce complex flow charts to mere
interconnections between objects of various classes
chain of responsibility
■ behavioral methods which (indirectly) invokes the same
method in another implementation of same abstract/
interface type in a queue
■ java.util.logging.Logger#log()
■ javax.servlet.Filter#doFilter()
command
■ behavioral methods in an abstract/interface type
which invokes a method in an implementation of a
different abstract/interface type which has been
encapsulated by the command implementation during its
creation
■ All implementations of java.lang.Runnable
■ All implementations of javax.swing.Action
interpreter
■ behavioral methods returning a structurally different
instance/type of the given instance/type; note that
parsing/formatting is not part of the pattern,
determining the pattern and how to apply it is
■ java.util.Pattern
■ java.text.Normalizer
■ All subclasses of java.text.Format
■ All subclasses of javax.el.ELResolver
iterator
■ behavioral methods sequentially returning instances
of a different type from a queue
■ All implementations of java.util.Iterator (thus among
others also java.util.Scanner!).
■ All implementations of java.util.Enumeration
mediator
■ behavioral methods taking an instance of different
abstract/interface type (usually using the command
pattern) which delegates/uses the given instance
■ java.util.Timer (all scheduleXXX() methods)
■ java.util.concurrent.Executor#execute()
■ java.util.concurrent.ExecutorService (the invokeXXX()
and submit() methods)
■ java.util.concurrent.ScheduledExecutorService (all
scheduleXXX() methods)
■ java.lang.reflect.Method#invoke()
memento
■ behavioral methods which internally changes the state
of the whole instance
■ java.util.Date (the setter methods do that, Date is
internally represented by a long value)
■ All implementations of java.io.Serializable
■ All implementations of
javax.faces.component.StateHolder
observer (or publish/subscribe)
■ behavioral methods which invokes a method on an
instance of another abstract/interface type, depending
on own state
■ java.util.Observer/java.util.Observable (rarely used in
real world though)
■ All implementations of java.util.EventListener
(practically all over Swing thus)
■ javax.servlet.http.HttpSessionBindingListener
■ javax.servlet.http.HttpSessionAttributeListener
■ javax.faces.event.PhaseListener
state
■ behavioral methods which changes its behaviour
depending on the instance's state which can be
controlled externally
■ javax.faces.lifecycle.LifeCycle#execute() (controlled
by FacesServlet, the behaviour is dependent on current
phase (state) of JSF lifecycle)
Strategy
■ behavioral methods in an abstract/interface type
which invokes a method in an implementation of a
different abstract/interface type which has been
passed-in as method argument into the strategy
implementation
■ java.util.Comparator#compare(), executed by among
others Collections#sort().
■ javax.servlet.http.HttpServlet, the service() and all
doXXX() methods take HttpServletRequest and
HttpServletResponse and the implementor has to process
them (and not to get hold of them as instance
variables!).
template method
■ behavioral methods which already have a "default"
behaviour definied by an abstract type
■ All non-abstract methods of java.io.InputStream,
java.io.OutputStream, java.io.Reader and
java.io.Writer.
■ All non-abstract methods of java.util.AbstractList,
java.util.AbstractSet and java.util.AbstractMap.
■ javax.servlet.http.HttpServlet, all the doXXX() methods
by default sends a HTTP 405 "Method Not Allowed" error
to the response. You're free to implement none or any
of them.
visitor
■ two different abstract/interface types which has
methods definied which takes each the other abstract/
interface type; the one actually calls the method of
the other and the other executes the desired strategy
on it
■ javax.lang.model.element.AnnotationValue and
AnnotationValueVisitor
■ javax.lang.model.element.Element and ElementVisitor
■ javax.lang.model.type.TypeMirror and TypeVisitor
recommended* resources
* use at your own risk !
resources
■ gof patterns
■ stack overflow
■ wikipedia

More Related Content

What's hot

Hibernate Presentation
Hibernate  PresentationHibernate  Presentation
Hibernate Presentation
guest11106b
 

What's hot (20)

Java Course 11: Design Patterns
Java Course 11: Design PatternsJava Course 11: Design Patterns
Java Course 11: Design Patterns
 
Let us understand design pattern
Let us understand design patternLet us understand design pattern
Let us understand design pattern
 
Functional vs Non-functional Requirements - Which comes first?
Functional vs Non-functional Requirements - Which comes first?Functional vs Non-functional Requirements - Which comes first?
Functional vs Non-functional Requirements - Which comes first?
 
GoF Design patterns I: Introduction + Structural Patterns
GoF Design patterns I:   Introduction + Structural PatternsGoF Design patterns I:   Introduction + Structural Patterns
GoF Design patterns I: Introduction + Structural Patterns
 
Learn react-js
Learn react-jsLearn react-js
Learn react-js
 
Rest web services
Rest web servicesRest web services
Rest web services
 
Spring Framework
Spring Framework  Spring Framework
Spring Framework
 
Php
PhpPhp
Php
 
Node js introduction
Node js introductionNode js introduction
Node js introduction
 
Design Patterns Illustrated
Design Patterns IllustratedDesign Patterns Illustrated
Design Patterns Illustrated
 
Clean Code - The Next Chapter
Clean Code - The Next ChapterClean Code - The Next Chapter
Clean Code - The Next Chapter
 
JavaScript.pptx
JavaScript.pptxJavaScript.pptx
JavaScript.pptx
 
Java Design Patterns Tutorial | Edureka
Java Design Patterns Tutorial | EdurekaJava Design Patterns Tutorial | Edureka
Java Design Patterns Tutorial | Edureka
 
laravel.pptx
laravel.pptxlaravel.pptx
laravel.pptx
 
Core java
Core javaCore java
Core java
 
Hibernate Presentation
Hibernate  PresentationHibernate  Presentation
Hibernate Presentation
 
ASP.NET MVC Presentation
ASP.NET MVC PresentationASP.NET MVC Presentation
ASP.NET MVC Presentation
 
Javascript
JavascriptJavascript
Javascript
 
Php with mysql ppt
Php with mysql pptPhp with mysql ppt
Php with mysql ppt
 
Introduction to es6
Introduction to es6Introduction to es6
Introduction to es6
 

Viewers also liked

Design Patterns
Design PatternsDesign Patterns
Design Patterns
soms_1
 
Design patterns ppt
Design patterns pptDesign patterns ppt
Design patterns ppt
Aman Jain
 

Viewers also liked (20)

Design Patterns For 70% Of Programmers In The World
Design Patterns For 70% Of Programmers In The WorldDesign Patterns For 70% Of Programmers In The World
Design Patterns For 70% Of Programmers In The World
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Gof design patterns
Gof design patternsGof design patterns
Gof design patterns
 
Java Course 10: Threads and Concurrency
Java Course 10: Threads and ConcurrencyJava Course 10: Threads and Concurrency
Java Course 10: Threads and Concurrency
 
Introduction to Design Pattern
Introduction to Design  PatternIntroduction to Design  Pattern
Introduction to Design Pattern
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Software design patterns ppt
Software design patterns pptSoftware design patterns ppt
Software design patterns ppt
 
Design Patterns (Examples in .NET)
Design Patterns (Examples in .NET)Design Patterns (Examples in .NET)
Design Patterns (Examples in .NET)
 
Design patterns ppt
Design patterns pptDesign patterns ppt
Design patterns ppt
 
Your first 5 PHP design patterns - ThatConference 2012
Your first 5 PHP design patterns - ThatConference 2012Your first 5 PHP design patterns - ThatConference 2012
Your first 5 PHP design patterns - ThatConference 2012
 
Javantura v3 - FIWARE – from ideas to real projects – Krunoslav Hrnjak
Javantura v3 - FIWARE – from ideas to real projects – Krunoslav HrnjakJavantura v3 - FIWARE – from ideas to real projects – Krunoslav Hrnjak
Javantura v3 - FIWARE – from ideas to real projects – Krunoslav Hrnjak
 
Javantura v3 - Just say it – using language to communicate with the computer ...
Javantura v3 - Just say it – using language to communicate with the computer ...Javantura v3 - Just say it – using language to communicate with the computer ...
Javantura v3 - Just say it – using language to communicate with the computer ...
 
Javantura v3 - ES6 – Future Is Now – Nenad Pečanac
Javantura v3 - ES6 – Future Is Now – Nenad PečanacJavantura v3 - ES6 – Future Is Now – Nenad Pečanac
Javantura v3 - ES6 – Future Is Now – Nenad Pečanac
 
Javantura v3 - Develop the right way with S-CASE – Marin Orlić
Javantura v3 - Develop the right way with S-CASE – Marin OrlićJavantura v3 - Develop the right way with S-CASE – Marin Orlić
Javantura v3 - Develop the right way with S-CASE – Marin Orlić
 
Javantura v3 - CQRS – another view on application architecture – Aleksandar S...
Javantura v3 - CQRS – another view on application architecture – Aleksandar S...Javantura v3 - CQRS – another view on application architecture – Aleksandar S...
Javantura v3 - CQRS – another view on application architecture – Aleksandar S...
 
Javantura v3 - Conquer the Internet of Things with Java and Docker – Johan Ja...
Javantura v3 - Conquer the Internet of Things with Java and Docker – Johan Ja...Javantura v3 - Conquer the Internet of Things with Java and Docker – Johan Ja...
Javantura v3 - Conquer the Internet of Things with Java and Docker – Johan Ja...
 
Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der ...
Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der ...Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der ...
Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der ...
 
Javantura v3 - Java & JWT Stateless authentication – Karlo Novak
Javantura v3 - Java & JWT Stateless authentication – Karlo NovakJavantura v3 - Java & JWT Stateless authentication – Karlo Novak
Javantura v3 - Java & JWT Stateless authentication – Karlo Novak
 
Javantura v3 - Going Reactive with RxJava – Hrvoje Crnjak
Javantura v3 - Going Reactive with RxJava – Hrvoje CrnjakJavantura v3 - Going Reactive with RxJava – Hrvoje Crnjak
Javantura v3 - Going Reactive with RxJava – Hrvoje Crnjak
 
Javantura v3 - Apache Spark revolution – what’s it all about – Petar Zečević
Javantura v3 - Apache Spark revolution – what’s it all about – Petar ZečevićJavantura v3 - Apache Spark revolution – what’s it all about – Petar Zečević
Javantura v3 - Apache Spark revolution – what’s it all about – Petar Zečević
 

Similar to Design Patterns & JDK Examples

PresentationPatterns_v2
PresentationPatterns_v2PresentationPatterns_v2
PresentationPatterns_v2
Maksym Tolstik
 

Similar to Design Patterns & JDK Examples (20)

Design pattern is_everywhere_by_saurabh_sharma
Design pattern is_everywhere_by_saurabh_sharmaDesign pattern is_everywhere_by_saurabh_sharma
Design pattern is_everywhere_by_saurabh_sharma
 
Objects & OO Thinking for Java
Objects & OO Thinking for JavaObjects & OO Thinking for Java
Objects & OO Thinking for Java
 
Testable JavaScript: Application Architecture
Testable JavaScript:  Application ArchitectureTestable JavaScript:  Application Architecture
Testable JavaScript: Application Architecture
 
Javascript classes and scoping
Javascript classes and scopingJavascript classes and scoping
Javascript classes and scoping
 
Java for android developers
Java for android developersJava for android developers
Java for android developers
 
Design patterns in javascript
Design patterns in javascriptDesign patterns in javascript
Design patterns in javascript
 
Java
JavaJava
Java
 
Write code that writes code! A beginner's guide to Annotation Processing - Ja...
Write code that writes code! A beginner's guide to Annotation Processing - Ja...Write code that writes code! A beginner's guide to Annotation Processing - Ja...
Write code that writes code! A beginner's guide to Annotation Processing - Ja...
 
Write code that writes code!
Write code that writes code!Write code that writes code!
Write code that writes code!
 
JDD 2016 - Grzegorz Rozniecki - Java 8 What Could Possibly Go Wrong
JDD 2016 - Grzegorz Rozniecki - Java 8 What Could Possibly Go WrongJDD 2016 - Grzegorz Rozniecki - Java 8 What Could Possibly Go Wrong
JDD 2016 - Grzegorz Rozniecki - Java 8 What Could Possibly Go Wrong
 
33rd degree talk: open and automatic coding conventions with walkmod
33rd degree talk: open and automatic coding conventions with walkmod33rd degree talk: open and automatic coding conventions with walkmod
33rd degree talk: open and automatic coding conventions with walkmod
 
Introduction to Design Patterns in Javascript
Introduction to Design Patterns in JavascriptIntroduction to Design Patterns in Javascript
Introduction to Design Patterns in Javascript
 
Design patterns
Design patternsDesign patterns
Design patterns
 
PresentationPatterns_v2
PresentationPatterns_v2PresentationPatterns_v2
PresentationPatterns_v2
 
Java basic concept
Java basic conceptJava basic concept
Java basic concept
 
Application Frameworks: The new kids on the block
Application Frameworks: The new kids on the blockApplication Frameworks: The new kids on the block
Application Frameworks: The new kids on the block
 
JavaScript OOPS Implimentation
JavaScript OOPS ImplimentationJavaScript OOPS Implimentation
JavaScript OOPS Implimentation
 
Introduction to Underscore.js
Introduction to Underscore.jsIntroduction to Underscore.js
Introduction to Underscore.js
 
Jump start to OOP, OOAD, and Design Pattern
Jump start to OOP, OOAD, and Design PatternJump start to OOP, OOAD, and Design Pattern
Jump start to OOP, OOAD, and Design Pattern
 
Jump Start To Ooad And Design Patterns
Jump Start To Ooad And Design PatternsJump Start To Ooad And Design Patterns
Jump Start To Ooad And Design Patterns
 

Recently uploaded

%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
masabamasaba
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Medical / Health Care (+971588192166) Mifepristone and Misoprostol tablets 200mg
 
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Medical / Health Care (+971588192166) Mifepristone and Misoprostol tablets 200mg
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
masabamasaba
 

Recently uploaded (20)

%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
 
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
 
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
 
WSO2CON 2024 Slides - Open Source to SaaS
WSO2CON 2024 Slides - Open Source to SaaSWSO2CON 2024 Slides - Open Source to SaaS
WSO2CON 2024 Slides - Open Source to SaaS
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
 
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
 
Artyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxArtyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptx
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 

Design Patterns & JDK Examples

  • 2. “Human beings are pattern-seeking animals. It's part of our DNA. we always look for the wider, bigger explanations for things.” - Adrian McKinty first of all (as always), think about it …
  • 3. “As long as habit and routine dictate the pattern of living, new dimensions of the soul will not emerge.” - Henry Van Dyke first of all (as always), think about it …
  • 4. “The best way to learn to write simple code is to write simple code. 
 Patterns, like all forms of complexity, should be avoided until they are absolutely necessary.” - Jeff Atwood co-founder - stackoverflow first of all (as always), think about it … http://goo.gl/Myu8uU
  • 5. “Design patterns” are concepts used by people who can’t learn by any method except memorization, so in place of actual programming ability, they memorize “patterns” and throw each one in sequence at a problem until it works. - Dark Shikari first of all (as always), think about it …
  • 6.
  • 8. creational patterns ■ used to create objects for a suitable class that serves as a solution for a problem ■ particularly useful when you are taking advantage of polymorphism, choose between different classes at runtime rather than compile time ■ allow objects to be created in a system without having to identify a specific class type in the code
  • 9. Structural patterns ■ form larger structures from individual parts, generally of different classes. ■ vary a great deal depending on what sort of structure is being created for what purpose. ■ are concerned with how classes and objects are composed to form larger structures.
  • 10. behavioral patterns ■ describe interactions between objects ■ They focus on how objects communicate with each other ■ They can reduce complex flow charts to mere interconnections between objects of various classes
  • 11. Abstract factory ■ creational methods returning the factory itself which in turn can be used to create another abstract/ interface type) ■ javax.xml.parsers.DocumentBuilderFactory#newInstance() ■ javax.xml.transform.TransformerFactory#newInstance() ■ javax.xml.xpath.XPathFactory#newInstance()
  • 12. builder ■ creational methods returning the instance itself) ■ java.lang.StringBuilder#append() (unsynchronized) ■ java.lang.StringBuffer#append() (synchronized) ■ java.nio.ByteBuffer#put() (also on CharBuffer, ShortBuffer, IntBuffer, LongBuffer, FloatBuffer and DoubleBuffer) ■ javax.swing.GroupLayout.Group#addComponent() ■ All implementations of java.lang.Appendable
  • 13. factory method ■ creational methods returning an implementation of an abstract/interface type ■ java.util.Calendar#getInstance() ■ java.util.ResourceBundle#getBundle() ■ java.text.NumberFormat#getInstance() ■ java.nio.charset.Charset#forName() ■ java.net.URLStreamHandlerFactory#createURLStreamHandler (String) (Returns singleton object per protocol)
  • 14. prototype ■ creational methods returning a different instance of itself with the same properties ■ java.lang.Object#clone() (the class has to implement java.lang.Cloneable)
  • 15. singleton ■ creational methods returning the same instance (usually of itself) everytime ■ java.lang.Runtime#getRuntime() ■ java.awt.Desktop#getDesktop()
  • 16. Structural patterns ■ form larger structures from individual parts, generally of different classes. ■ vary a great deal depending on what sort of structure is being created for what purpose. ■ are concerned with how classes and objects are composed to form larger structures.
  • 17. bridge ■ creational methods taking an instance of different abstract/interface type and returning an implementation of own abstract/interface type which delegates/uses the given instance ■ new LinkedHashMap(LinkedHashSet<K>, List<V>) which returns an unmodifiable linked map which doesn't clone the items, but uses them. ■ The java.util.Collections#newSetFromMap() and singletonXXX() methods however comes close.
  • 18. composite ■ behavioral methods taking an instance of same abstract/interface type into a tree structure ■ java.awt.Container#add(Component) (practically all over Swing thus) ■ javax.faces.component.UIComponent#getChildren() (practically all over JSF UI thus)
  • 19. decorator ■ creational methods taking an instance of same abstract/interface type which adds additional behaviour ■ All subclasses of java.io.InputStream, OutputStream, Reader and Writer have a constructor taking an instance of same type. ■ java.util.Collections, the checkedXXX(), synchronizedXXX() and unmodifiableXXX() methods. ■ javax.servlet.http.HttpServletRequestWrapper and HttpServletResponseWrapper
  • 20. facade ■ behavioral methods which internally uses instances of different independent abstract/interface types ■ javax.faces.context.FacesContext, it internally uses among others the abstract/interface types LifeCycle, ViewHandler, NavigationHandler and many more without that the enduser has to worry about it (which are however overrideable by injection). ■ javax.faces.context.ExternalContext, which internally uses ServletContext, HttpSession, HttpServletRequest, HttpServletResponse, etc.
  • 21. flyweight ■ creational methods returning a cached instance, a bit the "multiton" idea ■ java.lang.Integer#valueOf(int) (also on Boolean, Byte, Character, Short and Long)
  • 22. proxy ■ creational methods which returns an implementation of given abstract/interface type which in turn delegates/ uses a different implementation of given abstract/ interface type ■ java.lang.reflect.Proxy ■ java.rmi.*, the whole API actually.
  • 23. behavioral patterns ■ describe interactions between objects ■ They focus on how objects communicate with each other ■ They can reduce complex flow charts to mere interconnections between objects of various classes
  • 24. chain of responsibility ■ behavioral methods which (indirectly) invokes the same method in another implementation of same abstract/ interface type in a queue ■ java.util.logging.Logger#log() ■ javax.servlet.Filter#doFilter()
  • 25. command ■ behavioral methods in an abstract/interface type which invokes a method in an implementation of a different abstract/interface type which has been encapsulated by the command implementation during its creation ■ All implementations of java.lang.Runnable ■ All implementations of javax.swing.Action
  • 26. interpreter ■ behavioral methods returning a structurally different instance/type of the given instance/type; note that parsing/formatting is not part of the pattern, determining the pattern and how to apply it is ■ java.util.Pattern ■ java.text.Normalizer ■ All subclasses of java.text.Format ■ All subclasses of javax.el.ELResolver
  • 27. iterator ■ behavioral methods sequentially returning instances of a different type from a queue ■ All implementations of java.util.Iterator (thus among others also java.util.Scanner!). ■ All implementations of java.util.Enumeration
  • 28. mediator ■ behavioral methods taking an instance of different abstract/interface type (usually using the command pattern) which delegates/uses the given instance ■ java.util.Timer (all scheduleXXX() methods) ■ java.util.concurrent.Executor#execute() ■ java.util.concurrent.ExecutorService (the invokeXXX() and submit() methods) ■ java.util.concurrent.ScheduledExecutorService (all scheduleXXX() methods) ■ java.lang.reflect.Method#invoke()
  • 29. memento ■ behavioral methods which internally changes the state of the whole instance ■ java.util.Date (the setter methods do that, Date is internally represented by a long value) ■ All implementations of java.io.Serializable ■ All implementations of javax.faces.component.StateHolder
  • 30. observer (or publish/subscribe) ■ behavioral methods which invokes a method on an instance of another abstract/interface type, depending on own state ■ java.util.Observer/java.util.Observable (rarely used in real world though) ■ All implementations of java.util.EventListener (practically all over Swing thus) ■ javax.servlet.http.HttpSessionBindingListener ■ javax.servlet.http.HttpSessionAttributeListener ■ javax.faces.event.PhaseListener
  • 31. state ■ behavioral methods which changes its behaviour depending on the instance's state which can be controlled externally ■ javax.faces.lifecycle.LifeCycle#execute() (controlled by FacesServlet, the behaviour is dependent on current phase (state) of JSF lifecycle)
  • 32. Strategy ■ behavioral methods in an abstract/interface type which invokes a method in an implementation of a different abstract/interface type which has been passed-in as method argument into the strategy implementation ■ java.util.Comparator#compare(), executed by among others Collections#sort(). ■ javax.servlet.http.HttpServlet, the service() and all doXXX() methods take HttpServletRequest and HttpServletResponse and the implementor has to process them (and not to get hold of them as instance variables!).
  • 33. template method ■ behavioral methods which already have a "default" behaviour definied by an abstract type ■ All non-abstract methods of java.io.InputStream, java.io.OutputStream, java.io.Reader and java.io.Writer. ■ All non-abstract methods of java.util.AbstractList, java.util.AbstractSet and java.util.AbstractMap. ■ javax.servlet.http.HttpServlet, all the doXXX() methods by default sends a HTTP 405 "Method Not Allowed" error to the response. You're free to implement none or any of them.
  • 34. visitor ■ two different abstract/interface types which has methods definied which takes each the other abstract/ interface type; the one actually calls the method of the other and the other executes the desired strategy on it ■ javax.lang.model.element.AnnotationValue and AnnotationValueVisitor ■ javax.lang.model.element.Element and ElementVisitor ■ javax.lang.model.type.TypeMirror and TypeVisitor
  • 35. recommended* resources * use at your own risk !
  • 36. resources ■ gof patterns ■ stack overflow ■ wikipedia