task: Explanations and grammar fixes for all the GoF patterns (#1791)
* Grammatical fixes to command pattern * Update bridge pattern readme * Fixes to builder pattern grammar * Update chain of responsibility * Improvements to the composite example * Fixes to headings * Minor updates to decorator pattern * Update facade * Update factory example * Update factory method * Update flyweight * Interpreter explanation * Update iterator readme * Add explanation for mediator pattern * Grammatical fixes to memento * Grammar fixes for observer * Update explanation for the prototype pattern * Proxy pattern grammar fixes * Update singleton * Grammar fixes to state pattern * Grammar fixes for strategy * Grammar fixes, template method * Grammar fixes for visitor * Fix typo
This commit is contained in:
@ -13,13 +13,12 @@ tags:
|
||||
|
||||
Ensure a class only has one instance, and provide a global point of access to it.
|
||||
|
||||
|
||||
## Explanation
|
||||
|
||||
Real world example
|
||||
Real-world example
|
||||
|
||||
> There can only be one ivory tower where the wizards study their magic. The same enchanted ivory
|
||||
> tower is always used by the wizards. Ivory tower here is singleton.
|
||||
> tower is always used by the wizards. The ivory tower here is a singleton.
|
||||
|
||||
In plain words
|
||||
|
||||
@ -46,9 +45,17 @@ public enum EnumIvoryTower {
|
||||
Then in order to use:
|
||||
|
||||
```java
|
||||
var enumIvoryTower1 = EnumIvoryTower.INSTANCE;
|
||||
var enumIvoryTower2 = EnumIvoryTower.INSTANCE;
|
||||
assertEquals(enumIvoryTower1, enumIvoryTower2); // true
|
||||
var enumIvoryTower1 = EnumIvoryTower.INSTANCE;
|
||||
var enumIvoryTower2 = EnumIvoryTower.INSTANCE;
|
||||
LOGGER.info("enumIvoryTower1={}", enumIvoryTower1);
|
||||
LOGGER.info("enumIvoryTower2={}", enumIvoryTower2);
|
||||
```
|
||||
|
||||
The console output
|
||||
|
||||
```
|
||||
enumIvoryTower1=com.iluwatar.singleton.EnumIvoryTower@1221555852
|
||||
enumIvoryTower2=com.iluwatar.singleton.EnumIvoryTower@1221555852
|
||||
```
|
||||
|
||||
## Class diagram
|
||||
@ -62,13 +69,13 @@ Use the Singleton pattern when
|
||||
* There must be exactly one instance of a class, and it must be accessible to clients from a well-known access point
|
||||
* When the sole instance should be extensible by subclassing, and clients should be able to use an extended instance without modifying their code
|
||||
|
||||
## Typical Use Case
|
||||
Some typical use cases for the Singleton
|
||||
|
||||
* The logging class
|
||||
* Managing a connection to a database
|
||||
* File manager
|
||||
|
||||
## Real world examples
|
||||
## Known uses
|
||||
|
||||
* [java.lang.Runtime#getRuntime()](http://docs.oracle.com/javase/8/docs/api/java/lang/Runtime.html#getRuntime%28%29)
|
||||
* [java.awt.Desktop#getDesktop()](http://docs.oracle.com/javase/8/docs/api/java/awt/Desktop.html#getDesktop--)
|
||||
@ -77,8 +84,8 @@ Use the Singleton pattern when
|
||||
|
||||
## Consequences
|
||||
|
||||
* Violates Single Responsibility Principle (SRP) by controlling their own creation and lifecycle.
|
||||
* Encourages using a global shared instance which prevents an object and resources used by this object from being deallocated.
|
||||
* Violates Single Responsibility Principle (SRP) by controlling their creation and lifecycle.
|
||||
* Encourages using a globally shared instance which prevents an object and resources used by this object from being deallocated.
|
||||
* Creates tightly coupled code. The clients of the Singleton become difficult to test.
|
||||
* Makes it almost impossible to subclass a Singleton.
|
||||
|
||||
|
Reference in New Issue
Block a user