From 1bef44c4e8aec017a31dc235cf93123b5f476e26 Mon Sep 17 00:00:00 2001 From: Markus Date: Sun, 6 Sep 2015 18:54:23 +0200 Subject: [PATCH] fix #237 - Removed Self-Links and instead used another way of making custom id's - Removed TOC - Removed Back to top arrows - Made FAQ an extra page --- README.md | 87 +++++-------------------------------------------------- faq.md | 63 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 80 deletions(-) create mode 100644 faq.md diff --git a/README.md b/README.md index 4715c3b9b..307d6cde8 100644 --- a/README.md +++ b/README.md @@ -4,25 +4,12 @@ # Design pattern samples in Java +[![Build status](https://travis-ci.org/iluwatar/java-design-patterns.svg?branch=master)](https://travis-ci.org/iluwatar/java-design-patterns) +[![Coverage Status](https://coveralls.io/repos/iluwatar/java-design-patterns/badge.svg?branch=master)](https://coveralls.io/r/iluwatar/java-design-patterns?branch=master) +[![Coverity Scan Build Status](https://scan.coverity.com/projects/5634/badge.svg)](https://scan.coverity.com/projects/5634) [![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) -[![Build status](https://travis-ci.org/iluwatar/java-design-patterns.svg?branch=master)](https://travis-ci.org/iluwatar/java-design-patterns) [![Coverage Status](https://coveralls.io/repos/iluwatar/java-design-patterns/badge.svg?branch=master)](https://coveralls.io/r/iluwatar/java-design-patterns?branch=master) - Coverity Scan Build Status - - - - - -# Table of Contents - - Introduction - - How to contribute - - Frequently Asked Questions - - Credits - - License - - -# Introduction [↑](#top) +# Introduction {#intro} Design patterns are formalized best practices that the programmer can use to solve common problems when designing an application or system. @@ -35,71 +22,11 @@ problems, and it also improves code readability for coders and architects who are familiar with the patterns. -# How to contribute [↑](#top) +# How to contribute {#contribute} If you are willing to contribute to the project you will find the relevant information in our [developer wiki](https://github.com/iluwatar/java-design-patterns/wiki). - -# Frequently asked questions [↑](#top) - -**Q: What is the difference between State and Strategy patterns?** - -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. - -**Q: What is the difference between Strategy and Template Method patterns?** - -In Template Method the algorithm is chosen at compile time via inheritance. -With Strategy pattern the algorithm is chosen at runtime via composition. - -**Q: What is the difference between Proxy and Decorator patterns?** - -The difference is the intent of the patterns. While Proxy controls access to -the object Decorator is used to add responsibilities to the object. - -**Q: What is the difference between Chain of Responsibility and Intercepting Filter patterns?** - -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. - -**Q: What is the difference between Visitor and Double Dispatch patterns?** - -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. - -**Q: What are the differences between Flyweight and Object Pool patterns?** - -They differ in the way they are used. - -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. - -In contrast, a Flyweight object is singleton, and it can be used simultaneously -by multiple clients. - -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. - -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. - - -# Credits [↑](#top) +# Credits {#credits} * [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) @@ -114,6 +41,6 @@ Flyweight. * [Pattern Oriented Software Architecture Vol I-V](http://www.amazon.com/Pattern-Oriented-Software-Architecture-Volume-Patterns/dp/0471958697) -# License [↑](#top) +# License {#license} This project is licensed under the terms of the MIT license. diff --git a/faq.md b/faq.md new file mode 100644 index 000000000..5633a693d --- /dev/null +++ b/faq.md @@ -0,0 +1,63 @@ +--- +layout: page +title: FAQ +permalink: /faq/ +icon: fa-question +page-index: 2 +--- + +### Q1: What is the difference between State and Strategy patterns? {#Q1} + +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. + +### Q2: What is the difference between Strategy and Template Method patterns? {#Q2} + +In Template Method the algorithm is chosen at compile time via inheritance. +With Strategy pattern the algorithm is chosen at runtime via composition. + +### Q3: What is the difference between Proxy and Decorator patterns? {#Q3} + +The difference is the intent of the patterns. While Proxy controls access to +the object Decorator is used to add responsibilities to the object. + +### Q4: What is the difference between Chain of Responsibility and Intercepting Filter patterns? {#Q4} + +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. + +### Q5: What is the difference between Visitor and Double Dispatch patterns? {#Q5} + +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. + +### Q6: What are the differences between Flyweight and Object Pool patterns? {#Q6} + +They differ in the way they are used. + +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. + +In contrast, a Flyweight object is singleton, and it can be used simultaneously +by multiple clients. + +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. + +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.