README.md 6.8 KB
Newer Older
M
Markus 已提交
1 2 3 4 5
<!-- the line below needs to be an empty line C: (its because kramdown isnt
     that smart and dearly wants an empty line before a heading to be able to
     display it as such, e.g. website) -->

# Design pattern samples in Java
I
Ilkka Seppälä 已提交
6

T
The Gitter Badger 已提交
7 8
[![Join the chat at https://gitter.im/iluwatar/java-design-patterns](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/iluwatar/java-design-patterns?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)

I
Ilkka Seppälä 已提交
9 10 11 12
![Build status](https://travis-ci.org/iluwatar/java-design-patterns.svg?branch=master) [![Coverage Status](https://coveralls.io/repos/iluwatar/java-design-patterns/badge.svg?branch=master)](https://coveralls.io/r/iluwatar/java-design-patterns?branch=master) <a href="https://scan.coverity.com/projects/5634">
  <img alt="Coverity Scan Build Status"
       src="https://scan.coverity.com/projects/5634/badge.svg"/>
</a>
I
Ilkka Seppälä 已提交
13

M
Markus 已提交
14 15 16 17

<a name="top"/>

# <a name="toc">Table of Contents</a>
18 19 20 21
 - <a href="#introduction">Introduction</a>
 - <a href="#faq">Frequently Asked Questions</a>
 - <a href="#credits">Credits</a>
 - <a href="#license">License</a>
M
Markus 已提交
22

23

24
# <a name="introduction">Introduction</a> [&#8593;](#top)
25

26 27
Design patterns are formalized best practices that the programmer can use to
solve common problems when designing an application or system.
28

29 30
Design patterns can speed up the development process by providing tested, proven
development paradigms.
31

32 33 34
Reusing design patterns helps to prevent subtle issues that can cause major
problems, and it also improves code readability for coders and architects who
are familiar with the patterns.
35

J
joshzambales 已提交
36

37
# <a name="faq">Frequently asked questions</a> [&#8593;](#top)
38

39
**<a id="Q1">Q: What is the difference between State and Strategy patterns?</a>**
I
Ilkka Seppälä 已提交
40

41 42 43 44 45
While the implementation is similar they solve different problems. The State
pattern deals with what state an object is in - it encapsulates state-dependent
behavior.
The Strategy pattern deals with how an object performs a certain task - it
encapsulates an algorithm.
46

47
**<a id="Q2">Q: What is the difference between Strategy and Template Method patterns?</a>**
I
Ilkka Seppälä 已提交
48

49 50
In Template Method the algorithm is chosen at compile time via inheritance.
With Strategy pattern the algorithm is chosen at runtime via composition.
I
Ilkka Seppälä 已提交
51

52
**<a id="Q3">Q: What is the difference between Proxy and Decorator patterns?</a>**
I
Ilkka Seppälä 已提交
53

54 55
The difference is the intent of the patterns. While Proxy controls access to
the object Decorator is used to add responsibilities to the object.
56

I
Ilkka Seppala 已提交
57 58
**<a id="Q4">Q: What is the difference between Chain of Responsibility and Intercepting Filter patterns?</a>**

59 60 61 62 63
While the implementations look similar there are differences. The Chain of
Responsibility forms a chain of request processors and the processors are then
executed one by one until the correct processor is found. In Intercepting
Filter the chain is constructed from filters and the whole chain is always
executed.
64

65 66
**<a id="Q5">Q: What is the difference between Visitor and Double Dispatch patterns?</a>**

67 68 69 70
The Visitor pattern is a means of adding a new operation to existing classes.
Double dispatch is a means of dispatching function calls with respect to two
polymorphic types, rather than a single polymorphic type, which is what
languages like C++ and Java _do not_ support directly.
71

72 73 74 75
**<a id="Q6">Q: What are the differences between Flyweight and Object Pool patterns?</a>**

They differ in the way they are used.

76 77 78 79 80
Pooled objects can simultaneously be used by a single "client" only. For that,
a pooled object must be checked out from the pool, then it can be used by a
client, and then the client must return the object back to the pool. Multiple
instances of identical objects may exist, up to the maximal capacity of the
pool.
81

82 83
In contrast, a Flyweight object is singleton, and it can be used simultaneously
by multiple clients.
84

85 86 87 88
As for concurrent access, pooled objects can be mutable and they usually don't
need to be thread safe, as typically, only one thread is going to use a
specific instance at the same time. Flyweight must either be immutable (the
best option), or implement thread safety.
89

90 91 92 93
As for performance and scalability, pools can become bottlenecks, if all the
pooled objects are in use and more clients need them, threads will become
blocked waiting for available object from the pool. This is not the case with
Flyweight.
94

95

96
# <a name="credits">Credits</a> [&#8593;](#top)
I
Ilkka Seppälä 已提交
97

I
Ilkka Seppälä 已提交
98 99
* [Design Patterns: Elements of Reusable Object-Oriented Software](http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612)
* [Effective Java (2nd Edition)](http://www.amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683)
100
* [Java Generics and Collections](http://www.amazon.com/Java-Generics-Collections-Maurice-Naftalin/dp/0596527756/)
101
* [Let's Modify the Objects-First Approach into Design-Patterns-First](http://edu.pecinovsky.cz/papers/2006_ITiCSE_Design_Patterns_First.pdf)
102
* [Pattern Languages of Program Design](http://www.amazon.com/Pattern-Languages-Program-Design-Coplien/dp/0201607344/ref=sr_1_1)
103
* [Martin Fowler - Event Aggregator](http://martinfowler.com/eaaDev/EventAggregator.html)
J
joshzambales 已提交
104
* [TutorialsPoint - Intercepting Filter](http://www.tutorialspoint.com/design_pattern/intercepting_filter_pattern.htm)
I
Ilkka Seppala 已提交
105
* [Presentation Tier Patterns](http://www.javagyan.com/tutorials/corej2eepatterns/presentation-tier-patterns)
I
Ilkka Seppala 已提交
106
* [Functional Programming in Java: Harnessing the Power of Java 8 Lambda Expressions](http://www.amazon.com/Functional-Programming-Java-Harnessing-Expressions/dp/1937785467/ref=sr_1_1)
107
* [Martin Fowler - Service Layer](http://martinfowler.com/eaaCatalog/serviceLayer.html)
I
Ilkka Seppala 已提交
108
* [Martin Fowler - Specifications](http://martinfowler.com/apsupp/spec.pdf)
I
Ilkka Seppala 已提交
109
* [Martin Fowler - Tolerant Reader](http://martinfowler.com/bliki/TolerantReader.html)
110
* [Trygve Reenskaug - Model-view-controller](http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller)
I
Ilkka Seppala 已提交
111
* [Flux - Application architecture for building user interfaces](http://facebook.github.io/flux/)
I
Ilkka Seppala 已提交
112
* [Richard Pawson - Naked Objects](http://downloads.nakedobjects.net/resources/Pawson%20thesis.pdf)
I
Ilkka Seppala 已提交
113
* [Patterns of Enterprise Application Architecture](http://www.amazon.com/Patterns-Enterprise-Application-Architecture-Martin/dp/0321127420)
I
Ilkka Seppala 已提交
114
* [Spring Data](http://www.amazon.com/Spring-Data-Mark-Pollack/dp/1449323952/ref=sr_1_1)
I
Ilkka Seppala 已提交
115
* [J2EE Design Patterns](http://www.amazon.com/J2EE-Design-Patterns-William-Crawford/dp/0596004273/ref=sr_1_2)
D
Dmitriy Zarubin 已提交
116
* [Marco Castigliego - Step Builder](http://rdafbn.blogspot.co.uk/2012/07/step-builder-pattern_28.html)
117 118
* [Douglas C. Schmidt and Charles D. Cranor - Half Sync/Half Async](http://www.cs.wustl.edu/~schmidt/PDF/PLoP-95.pdf)
* [Pattern Oriented Software Architecture Vol I-V](http://www.amazon.com/Pattern-Oriented-Software-Architecture-Volume-Patterns/dp/0471958697)
I
Ilkka Seppälä 已提交
119

120

121
# <a name="license">License</a> [&#8593;](#top)
I
Ilkka Seppälä 已提交
122

J
joshzambales 已提交
123
This project is licensed under the terms of the MIT license.