Compare commits

..

55 Commits

Author SHA1 Message Date
3407392664 Reach milestone 1.19.0 2018-03-31 10:34:25 +03:00
474c218f85 Update license headers 2018-03-31 10:25:58 +03:00
17ea0b17f6 Disable flaky tests mentioned in issue #643 and #699 2018-03-31 10:16:56 +03:00
7d4ccc6490 Merge pull request #730 from Deathnerd/master
Add Java annotation to code blocks in README files #728
2018-03-31 09:50:28 +03:00
8b06ea52ab Removed unnecessary changes outside of scope of the task 2018-03-28 01:41:43 -04:00
86ee59c232 Add Java annotation to code blocks in README files 2018-03-28 01:35:43 -04:00
6879990857 Merge pull request #726 from valery1707/patch-1
Update SonarCloud badge
2018-03-24 16:24:05 +02:00
855cf75dd6 Merge pull request #729 from S177LM/patch-1
Fixed typo
2018-03-22 17:38:32 +02:00
ecad864703 Fixed typo
Just fixed a little repetition in the javadoc comment.
2018-03-20 19:51:04 +01:00
69be74c016 Update SonarCloud badge
Update link into badge URL as described in https://about.sonarcloud.io/news/2018/02/05/new-project-badges.html
2018-03-14 20:20:15 +03:00
c723289bbb Merge pull request #723 from Juaanma/patch-1
Captain is implementing RowingBoat - Adapter pattern
2018-03-11 21:59:13 +02:00
477da92e2f Merge pull request #724 from anthonycampbell/master
My solution to issue #602.
2018-03-11 21:23:32 +02:00
ac57d67f45 solution to issue #602. Implemented multiton with enum, added example to app.java, a test for the enum, and commented my code 2018-03-08 16:08:09 -08:00
960d2ea6f7 solution to issue #602. Implemented multiton with enum, added example to app.java, a test for the enum, and commented my code 2018-03-08 15:52:35 -08:00
87cb33f69b Fixed tests 2018-03-07 17:43:03 -03:00
915a1f3eb0 Forgot to delete row's @Override
My bad, sorry. It should compile now.
2018-03-07 17:26:39 -03:00
c8fd0bc23d Merge pull request #716 from baislsl/javadoc-fix
Improve Javadoc
2018-03-07 21:52:50 +02:00
696ed86aff Captain is implementing RowingBoat - Adapter pattern
Captain and RowingBoat aren't interchangable. 
Captain, as a client, may have a method to use the boat, but it isn't needed that they share the same interface, as it makes the code more confusing.
2018-03-07 00:19:33 -03:00
e0b8f6f850 fix checkstyle 2018-03-06 16:09:22 +08:00
e01d640499 Merge pull request #713 from baislsl/master
Use the @TestInstance annotation
2018-02-25 08:54:00 +02:00
7fef5e4cd5 Merge pull request #696 from besok/master
#677 add pattern Trampoline.
2018-02-25 08:45:36 +02:00
991ba320a6 Improve Javadoc 2018-02-19 22:01:14 +08:00
d78434fed8 Merge pull request #644 from spanhal1/master
added tutorial links to bridge, decorator, abstract-factory, strategy…
2018-02-17 20:39:52 +02:00
f9f93695fe Merge pull request #609 from igorcadelima/master
Protect against instantiation via reflection
2018-02-17 20:36:40 +02:00
a367832d9e Merge pull request #711 from ryanguest/master
Fix typo
2018-02-17 20:26:26 +02:00
36f5947cd7 Use the @TestInstance annotation 2018-02-08 03:00:55 +08:00
f62ae456b0 Fix typo 2018-02-01 15:44:23 -08:00
5cbf651a3e Merge branch 'master' into master 2018-01-28 14:44:19 -05:00
e7b119c95c Merge pull request #709 from mookkiah/issue_508_prototype
issue 508 - using copy constructor to implement prototype.
2018-01-28 10:44:25 +02:00
ec28b1250d Merge pull request #708 from BeeHuang/fix-comment
Fix error comment with isServiceRunnign in Event Queue
2018-01-28 10:29:19 +02:00
2dcf63c646 fixed typo in abstract factory pattern 2018-01-27 20:30:15 -05:00
0805716515 issue 508 - using copy constructor to implement prototype.
As per http://www.artima.com/intv/bloch13.html, clone method in java is
broken or confusing. So staying away from clone method.
2018-01-27 09:57:15 -05:00
9f797b3009 fix error comment with isServiceRunnign 2018-01-27 16:44:23 +08:00
33a3d6fef4 Merge pull request #702 from zafarella/patch-4
Add thread safety comment on enum based singleton
2018-01-23 23:24:39 +02:00
dddfb52c70 Update EnumIvoryTower.java 2018-01-23 00:07:11 -05:00
9667878b5f add junit - jupiter -engine 2018-01-20 22:09:42 +03:00
4c4cbd41cf fix checkstyle errors 2018-01-20 21:42:14 +03:00
f7825f6c99 changes fixing mistakes 2018-01-20 13:36:43 +03:00
8960ef6111 Merge pull request #698 from olcbean/redundant_super
Remove redundant explicit super() constructor calls #694
2018-01-16 21:22:20 +02:00
a82000650d Remove redundant explicit super() constructor calls #694 2018-01-15 19:33:55 +01:00
e9021329e1 Merge pull request #697 from james-a-roland/issue_694
Removing all redundant super constructor calls, issue 694.
2018-01-13 22:25:31 +02:00
e9a541259b Removing all redundant super constructor calls 2018-01-10 21:20:37 -08:00
94fdefee3a add code 2018-01-08 14:45:38 +03:00
b61b64073a #677 init folder for pattern trampoline 2018-01-08 14:00:12 +03:00
09c0891948 Merge pull request #693 from jujis008/master
fixed issue #681
2018-01-08 07:55:39 +02:00
90570f809b rename png file and changes for README.md 2018-01-08 11:09:04 +08:00
55be744c4a #674 update SonarQube badge URL and link 2018-01-07 21:34:15 +02:00
c34975bdff #674 update SonarQube analysis URL 2018-01-07 21:25:00 +02:00
ed37d5cdc7 regenerate UML diagram 2018-01-07 12:26:58 +08:00
f87754917c Merge pull request #690 from amogozov/master
Cleanup commented code
2018-01-02 19:29:14 +02:00
e046007db7 fixed issue #681 2018-01-02 18:23:11 +08:00
0306161380 Cleanup commented code 2018-01-02 09:24:18 +09:00
dea2316f1f Set version for next development iteration 2018-01-01 16:58:29 +02:00
684cad9beb added tutorial links to bridge, decorator, abstract-factory, strategy and template method patterns 2017-09-23 20:55:38 -04:00
3c6f7aa046 Protect against instantiation via reflection
Signed-off-by: Igor C. A. de Lima <igorcadelima@gmail.com>
2017-08-12 12:11:10 -03:00
221 changed files with 999 additions and 471 deletions

View File

@ -17,7 +17,7 @@ install:
- mvn install -DskipTests=true -Dmaven.javadoc.skip=true -B -V -e
after_success:
- mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent package sonar:sonar -Dsonar.host.url=https://sonarqube.com -Dsonar.login=$SONAR_TOKEN
- mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent package sonar:sonar -Dsonar.host.url=https://sonarcloud.io -Dsonar.login=$SONAR_TOKEN
- bash update-ghpages.sh
# use latest java version available instead of travis default
@ -36,4 +36,4 @@ notifications:
on_failure: always # options: [always|never|change] default: always
on_start: never # options: [always|never|change] default: always
sudo: required
sudo: required

View File

@ -7,7 +7,7 @@
[![Build status](https://travis-ci.org/iluwatar/java-design-patterns.svg?branch=master)](https://travis-ci.org/iluwatar/java-design-patterns)
[![License MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/iluwatar/java-design-patterns/master/LICENSE.md)
[![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)
[![Quality Gate](https://sonarqube.com/api/badges/gate?key=com.iluwatar%3Ajava-design-patterns)](https://sonarqube.com/dashboard/index/com.iluwatar%3Ajava-design-patterns)
[![Quality Gate](https://sonarcloud.io/api/project_badges/measure?project=com.iluwatar%3Ajava-design-patterns&metric=alert_status)](https://sonarcloud.io/dashboard/index/com.iluwatar%3Ajava-design-patterns)
[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/1503/badge)](https://bestpractices.coreinfrastructure.org/projects/1503)
# Introduction

View File

@ -12,8 +12,6 @@ tags:
## Intent
Achieve flexibility of untyped languages and keep the type-safety
![alt text](./etc/abstract-document-base.png "Abstract Document Base")
![alt text](./etc/abstract-document.png "Abstract Document Traits and Domain")

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

View File

@ -1,58 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<class-diagram version="1.1.9" icons="true" automaticImage="PNG" always-add-relationships="false" generalizations="true"
realizations="true" associations="true" dependencies="false" nesting-relationships="true" router="FAN">
<interface id="1" language="java" name="com.iluwatar.abstractdocument.Document" project="design-patterns"
file="/design-patterns/src/com/iluwatar/abstractdocument/Document.java" binary="false" corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="249" y="405"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</interface>
<class id="2" language="java" name="com.iluwatar.abstractdocument.AbstractDocument" project="design-patterns"
file="/design-patterns/src/com/iluwatar/abstractdocument/AbstractDocument.java" binary="false" corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="250" y="237"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="3" language="java" name="com.iluwatar.abstractdocument.domain.Car" project="design-patterns"
file="/design-patterns/src/com/iluwatar/abstractdocument/domain/Car.java" binary="false" corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="108" y="75"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="4" language="java" name="com.iluwatar.abstractdocument.domain.Part" project="design-patterns"
file="/design-patterns/src/com/iluwatar/abstractdocument/domain/Part.java" binary="false" corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="400" y="76"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<generalization id="5">
<end type="SOURCE" refId="4"/>
<end type="TARGET" refId="2"/>
</generalization>
<realization id="6">
<end type="SOURCE" refId="2"/>
<end type="TARGET" refId="1"/>
</realization>
<generalization id="7">
<end type="SOURCE" refId="3"/>
<end type="TARGET" refId="2"/>
</generalization>
<classifier-display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</classifier-display>
<association-display labels="true" multiplicity="true"/>
</class-diagram>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 94 KiB

View File

@ -1,91 +1,137 @@
<?xml version="1.0" encoding="UTF-8"?>
<class-diagram version="1.1.9" icons="true" automaticImage="PNG" always-add-relationships="false" generalizations="true"
realizations="true" associations="true" dependencies="false" nesting-relationships="true" router="FAN">
<interface id="1" language="java" name="com.iluwatar.abstractdocument.Document" project="design-patterns"
file="/design-patterns/src/com/iluwatar/abstractdocument/Document.java" binary="false" corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="341" y="376"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</interface>
<interface id="2" language="java" name="com.iluwatar.abstractdocument.domain.HasModel" project="design-patterns"
file="/design-patterns/src/com/iluwatar/abstractdocument/domain/HasModel.java" binary="false" corner="BOTTOM_RIGHT">
<position height="81" width="173" x="41" y="194"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</interface>
<interface id="3" language="java" name="com.iluwatar.abstractdocument.domain.HasPrice" project="design-patterns"
file="/design-patterns/src/com/iluwatar/abstractdocument/domain/HasPrice.java" binary="false" corner="BOTTOM_RIGHT">
<position height="81" width="175" x="254" y="194"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</interface>
<interface id="4" language="java" name="com.iluwatar.abstractdocument.domain.HasParts" project="design-patterns"
file="/design-patterns/src/com/iluwatar/abstractdocument/domain/HasParts.java" binary="false" corner="BOTTOM_RIGHT">
<position height="81" width="173" x="469" y="194"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</interface>
<class id="5" language="java" name="com.iluwatar.abstractdocument.domain.Car" project="design-patterns"
file="/design-patterns/src/com/iluwatar/abstractdocument/domain/Car.java" binary="false" corner="BOTTOM_RIGHT">
<position height="99" width="173" x="254" y="37"/>
<class-diagram version="1.2.2" icons="true" always-add-relationships="false" generalizations="true" realizations="true"
associations="true" dependencies="false" nesting-relationships="true" router="FAN">
<class id="1" language="java" name="com.iluwatar.abstractdocument.AbstractDocument" project="abstract-document"
file="/abstract-document/src/main/java/com/iluwatar/abstractdocument/AbstractDocument.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="659" y="286"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="6" language="java" name="com.iluwatar.abstractdocument.domain.Part" project="design-patterns"
file="/design-patterns/src/com/iluwatar/abstractdocument/domain/Part.java" binary="false" corner="BOTTOM_RIGHT">
<position height="99" width="173" x="41" y="37"/>
<interface id="2" language="java" name="com.iluwatar.abstractdocument.Document" project="abstract-document"
file="/abstract-document/src/main/java/com/iluwatar/abstractdocument/Document.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="562" y="27"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</interface>
<class id="3" language="java" name="com.iluwatar.abstractdocument.domain.Car" project="abstract-document"
file="/abstract-document/src/main/java/com/iluwatar/abstractdocument/domain/Car.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="348" y="737"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<realization id="7">
<end type="SOURCE" refId="5"/>
<end type="TARGET" refId="2"/>
<class id="4" language="java" name="com.iluwatar.abstractdocument.domain.Part" project="abstract-document"
file="/abstract-document/src/main/java/com/iluwatar/abstractdocument/domain/Part.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="760" y="746"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<interface id="5" language="java" name="com.iluwatar.abstractdocument.domain.HasModel" project="abstract-document"
file="/abstract-document/src/main/java/com/iluwatar/abstractdocument/domain/HasModel.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="355" y="297"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</interface>
<interface id="6" language="java" name="com.iluwatar.abstractdocument.domain.HasParts" project="abstract-document"
file="/abstract-document/src/main/java/com/iluwatar/abstractdocument/domain/HasParts.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="109" y="297"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</interface>
<interface id="7" language="java" name="com.iluwatar.abstractdocument.domain.HasPrice" project="abstract-document"
file="/abstract-document/src/main/java/com/iluwatar/abstractdocument/domain/HasPrice.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="1008" y="283"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</interface>
<interface id="8" language="java" name="com.iluwatar.abstractdocument.domain.HasType" project="abstract-document"
file="/abstract-document/src/main/java/com/iluwatar/abstractdocument/domain/HasType.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="1257" y="277"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</interface>
<realization id="9">
<end type="SOURCE" refId="4"/>
<end type="TARGET" refId="8"/>
</realization>
<realization id="8">
<realization id="10">
<end type="SOURCE" refId="3"/>
<end type="TARGET" refId="7"/>
</realization>
<generalization id="11">
<end type="SOURCE" refId="6"/>
<end type="TARGET" refId="2"/>
</realization>
<generalization id="9">
<end type="SOURCE" refId="2"/>
<end type="TARGET" refId="1"/>
</generalization>
<realization id="10">
<end type="SOURCE" refId="5"/>
<end type="TARGET" refId="3"/>
<realization id="12">
<end type="SOURCE" refId="4"/>
<end type="TARGET" refId="5"/>
</realization>
<realization id="11">
<end type="SOURCE" refId="5"/>
<end type="TARGET" refId="4"/>
<realization id="13">
<end type="SOURCE" refId="4"/>
<end type="TARGET" refId="7"/>
</realization>
<generalization id="12">
<generalization id="14">
<end type="SOURCE" refId="3"/>
<end type="TARGET" refId="1"/>
</generalization>
<generalization id="13">
<realization id="15">
<end type="SOURCE" refId="3"/>
<end type="TARGET" refId="6"/>
</realization>
<generalization id="16">
<end type="SOURCE" refId="8"/>
<end type="TARGET" refId="2"/>
</generalization>
<generalization id="17">
<end type="SOURCE" refId="7"/>
<end type="TARGET" refId="2"/>
</generalization>
<realization id="18">
<end type="SOURCE" refId="3"/>
<end type="TARGET" refId="5"/>
</realization>
<generalization id="19">
<end type="SOURCE" refId="4"/>
<end type="TARGET" refId="1"/>
</generalization>
<realization id="14">
<end type="SOURCE" refId="6"/>
<end type="TARGET" refId="3"/>
<generalization id="20">
<end type="SOURCE" refId="5"/>
<end type="TARGET" refId="2"/>
</generalization>
<realization id="21">
<end type="SOURCE" refId="1"/>
<end type="TARGET" refId="2"/>
</realization>
<classifier-display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">

View File

@ -29,7 +29,7 @@
<parent>
<artifactId>java-design-patterns</artifactId>
<groupId>com.iluwatar</groupId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<artifactId>abstract-document</artifactId>
<dependencies>

View File

@ -34,7 +34,7 @@ Wikipedia says
Translating the kingdom example above. First of all we have some interfaces and implementation for the objects in the kingdom
```
```java
public interface Castle {
String getDescription();
}
@ -74,7 +74,7 @@ public class ElfArmy implements Army {
Then we have the abstraction and implementations for the kingdom factory
```
```java
public interface KingdomFactory {
Castle createCastle();
King createKing();
@ -108,7 +108,7 @@ public class OrcKingdomFactory implements KingdomFactory {
Now we have our abstract factory that lets us make family of related objects i.e. Elven kingdom factory creates Elven castle, king and army etc.
```
```java
KingdomFactory factory = new ElfKingdomFactory();
Castle castle = factory.createCastle();
King king = factory.createKing();
@ -123,7 +123,7 @@ Now, we can design a factory for our different kingdom factories. In this exampl
The client can use FactoryMaker to create the desired concrete factory which, in turn, will produce different concrete objects (Army, King, Castle).
In this example, we also used an enum to parameterize which type of kingdom factory the client will ask for.
```
```java
public static class FactoryMaker {
public enum KingdomType {
@ -179,10 +179,15 @@ Use the Abstract Factory pattern when
* Dependency injection in java hides the service class dependencies that can lead to runtime errors that would have been caught at compile time.
## Tutorial
* [Abstract Factory Pattern Tutorial](https://www.journaldev.com/1418/abstract-factory-design-pattern-in-java)
## Presentations
* [Abstract Factory Pattern](etc/presentation.html)
## Real world examples
* [javax.xml.parsers.DocumentBuilderFactory](http://docs.oracle.com/javase/8/docs/api/javax/xml/parsers/DocumentBuilderFactory.html)

View File

@ -29,7 +29,7 @@
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<artifactId>abstract-factory</artifactId>
<dependencies>

View File

@ -40,7 +40,7 @@ Consider a captain that can only use rowing boats and cannot sail at all.
First we have interfaces `RowingBoat` and `FishingBoat`
```
```java
public interface RowingBoat {
void row();
}
@ -55,7 +55,7 @@ public class FishingBoat {
And captain expects an implementation of `RowingBoat` interface to be able to move
```
```java
public class Captain implements RowingBoat {
private RowingBoat rowingBoat;
@ -73,7 +73,7 @@ public class Captain implements RowingBoat {
Now let's say the pirates are coming and our captain needs to escape but there is only fishing boat available. We need to create an adapter that allows the captain to operate the fishing boat with his rowing boat skills.
```
```java
public class FishingBoatAdapter implements RowingBoat {
private static final Logger LOGGER = LoggerFactory.getLogger(FishingBoatAdapter.class);
@ -93,7 +93,7 @@ public class FishingBoatAdapter implements RowingBoat {
And now the `Captain` can use the `FishingBoat` to escape the pirates.
```
```java
Captain captain = new Captain(new FishingBoatAdapter());
captain.row();
```

View File

@ -29,7 +29,7 @@
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<artifactId>adapter</artifactId>
<dependencies>

View File

@ -26,7 +26,7 @@ package com.iluwatar.adapter;
* The Captain uses {@link RowingBoat} to sail. <br>
* This is the client in the pattern.
*/
public class Captain implements RowingBoat {
public class Captain {
private RowingBoat rowingBoat;
@ -40,7 +40,6 @@ public class Captain implements RowingBoat {
this.rowingBoat = rowingBoat;
}
@Override
public void row() {
rowingBoat.row();
}

View File

@ -66,7 +66,7 @@ public class AdapterPatternTest {
*/
@Test
public void testAdapter() {
RowingBoat captain = (RowingBoat) beans.get(ROWING_BEAN);
Captain captain = (Captain) beans.get(ROWING_BEAN);
// when captain moves
captain.row();

View File

@ -29,7 +29,7 @@
<parent>
<artifactId>aggregator-microservices</artifactId>
<groupId>com.iluwatar</groupId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@ -29,7 +29,7 @@
<parent>
<artifactId>aggregator-microservices</artifactId>
<groupId>com.iluwatar</groupId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@ -29,7 +29,7 @@
<parent>
<artifactId>aggregator-microservices</artifactId>
<groupId>com.iluwatar</groupId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@ -29,7 +29,7 @@
<parent>
<artifactId>java-design-patterns</artifactId>
<groupId>com.iluwatar</groupId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>aggregator-microservices</artifactId>

View File

@ -29,7 +29,7 @@
<parent>
<artifactId>api-gateway</artifactId>
<groupId>com.iluwatar</groupId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>api-gateway-service</artifactId>

View File

@ -29,7 +29,7 @@
<parent>
<artifactId>api-gateway</artifactId>
<groupId>com.iluwatar</groupId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@ -29,7 +29,7 @@
<parent>
<artifactId>java-design-patterns</artifactId>
<groupId>com.iluwatar</groupId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>api-gateway</artifactId>

View File

@ -29,7 +29,7 @@
<parent>
<artifactId>api-gateway</artifactId>
<groupId>com.iluwatar</groupId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@ -29,7 +29,7 @@
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<artifactId>async-method-invocation</artifactId>
<dependencies>

View File

@ -29,7 +29,7 @@
<parent>
<artifactId>java-design-patterns</artifactId>
<groupId>com.iluwatar</groupId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@ -22,6 +22,7 @@
*/
package com.iluwatar.balking;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import java.util.concurrent.ExecutorService;
@ -37,6 +38,7 @@ public class WashingMachineTest {
private volatile WashingMachineState machineStateGlobal;
@Disabled
@Test
public void wash() throws Exception {
WashingMachine washingMachine = new WashingMachine();

View File

@ -34,7 +34,7 @@ Wikipedia says
Translating our weapon example from above. Here we have the `Weapon` hierarchy
```
```java
public interface Weapon {
void wield();
void swing();
@ -109,7 +109,7 @@ public class Hammer implements Weapon {
And the separate enchantment hierarchy
```
```java
public interface Enchantment {
void onActivate();
void apply();
@ -155,7 +155,7 @@ public class SoulEatingEnchantment implements Enchantment {
And both the hierarchies in action
```
```java
Sword enchantedSword = new Sword(new SoulEatingEnchantment());
enchantedSword.wield();
enchantedSword.swing();
@ -188,6 +188,9 @@ Use the Bridge pattern when
* you have a proliferation of classes. Such a class hierarchy indicates the need for splitting an object into two parts. Rumbaugh uses the term "nested generalizations" to refer to such class hierarchies
* you want to share an implementation among multiple objects (perhaps using reference counting), and this fact should be hidden from the client. A simple example is Coplien's String class, in which multiple objects can share the same string representation.
## Tutorial
* [Bridge Pattern Tutorial](https://www.journaldev.com/1491/bridge-design-pattern-java)
## Credits
* [Design Patterns: Elements of Reusable Object-Oriented Software](http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612)

View File

@ -29,7 +29,7 @@
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<artifactId>bridge</artifactId>
<dependencies>

View File

@ -31,7 +31,7 @@ Wikipedia says
Having said that let me add a bit about what telescoping constructor anti-pattern is. At one point or the other we have all seen a constructor like below:
```
```java
public Hero(Profession profession, String name, HairType hairType, HairColor hairColor, Armor armor, Weapon weapon) {
}
```
@ -42,7 +42,7 @@ As you can see the number of constructor parameters can quickly get out of hand
The sane alternative is to use the Builder pattern. First of all we have our hero that we want to create
```
```java
public final class Hero {
private final Profession profession;
private final String name;
@ -64,7 +64,7 @@ public final class Hero {
And then we have the builder
```
```java
public static class Builder {
private final Profession profession;
private final String name;
@ -109,7 +109,7 @@ And then we have the builder
And then it can be used as:
```
```java
Hero mage = new Hero.Builder(Profession.MAGE, "Riobard").withHairColor(HairColor.BLACK).withWeapon(Weapon.DAGGER).build();
```

View File

@ -29,7 +29,7 @@
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<artifactId>builder</artifactId>
<dependencies>

View File

@ -30,7 +30,7 @@
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<artifactId>business-delegate</artifactId>
<dependencies>

View File

@ -29,7 +29,7 @@
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<artifactId>caching</artifactId>
<dependencies>

View File

@ -52,12 +52,12 @@ import org.slf4j.LoggerFactory;
* whether the data is coming from the cache or the DB (i.e. separation of concern). The AppManager
* ({@link AppManager}) handles the transaction of data to-and-from the underlying data store
* (depending on the preferred caching policy/strategy).
*
* <i>App --> AppManager --> CacheStore/LRUCache/CachingPolicy --> DBManager</i>
* <p>
* <i>{@literal App --> AppManager --> CacheStore/LRUCache/CachingPolicy --> DBManager} </i>
* </p>
*
* @see CacheStore
* @See LRUCache
* @see LruCache
* @see CachingPolicy
*
*/

View File

@ -29,7 +29,7 @@
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<artifactId>callback</artifactId>
<dependencies>

View File

@ -33,7 +33,7 @@ Wikipedia says
Translating our example with orcs from above. First we have the request class
```
```java
public class Request {
private final RequestType requestType;
@ -64,7 +64,7 @@ public enum RequestType {
Then the request handler hierarchy
```
```java
public abstract class RequestHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(RequestHandler.class);
private RequestHandler next;
@ -114,7 +114,7 @@ public class OrcCommander extends RequestHandler {
Then we have the Orc King who gives the orders and forms the chain
```
```java
public class OrcKing {
RequestHandler chain;
@ -134,7 +134,7 @@ public class OrcKing {
Then it is used as follows
```
```java
OrcKing king = new OrcKing();
king.makeRequest(new Request(RequestType.DEFEND_CASTLE, "defend castle")); // Orc commander handling request "defend castle"
king.makeRequest(new Request(RequestType.TORTURE_PRISONER, "torture prisoner")); // Orc officer handling request "torture prisoner"

View File

@ -29,7 +29,7 @@
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<artifactId>chain</artifactId>
<dependencies>

View File

@ -29,7 +29,7 @@
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<artifactId>command</artifactId>
<dependencies>

View File

@ -33,7 +33,7 @@ Wikipedia says
Taking our sentence example from above. Here we have the base class and different printable types
```
```java
public abstract class LetterComposite {
private List<LetterComposite> children = new ArrayList<>();
public void add(LetterComposite letter) {
@ -91,7 +91,7 @@ public class Sentence extends LetterComposite {
Then we have a messenger to carry messages
```
```java
public class Messenger {
LetterComposite messageFromOrcs() {
List<Word> words = new ArrayList<>();
@ -122,7 +122,7 @@ public class Messenger {
And then it can be used as
```
```java
LetterComposite orcMessage = new Messenger().messageFromOrcs();
orcMessage.print(); // Where there is a whip there is a way.
LetterComposite elfMessage = new Messenger().messageFromElves();

View File

@ -29,7 +29,7 @@
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<artifactId>composite</artifactId>
<dependencies>

View File

@ -29,7 +29,7 @@
<parent>
<artifactId>java-design-patterns</artifactId>
<groupId>com.iluwatar</groupId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<dependencies>

View File

@ -21,7 +21,7 @@
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<artifactId>cqrs</artifactId>
<dependencies>

View File

@ -50,14 +50,12 @@ public class Author {
* email of the author
*/
public Author(String username, String name, String email) {
super();
this.username = username;
this.name = name;
this.email = email;
}
protected Author() {
super();
}
public long getId() {

View File

@ -43,7 +43,7 @@ public class Book {
private Author author;
/**
*
*
* @param title
* title of the book
* @param price
@ -52,14 +52,12 @@ public class Book {
* author of the book
*/
public Book(String title, double price, Author author) {
super();
this.title = title;
this.price = price;
this.author = author;
}
protected Book() {
super();
}
public long getId() {

View File

@ -45,14 +45,12 @@ public class Author {
* username of the author
*/
public Author(String name, String email, String username) {
super();
this.name = name;
this.email = email;
this.username = username;
}
public Author() {
super();
}
public String getName() {

View File

@ -42,13 +42,11 @@ public class Book {
* price of the book
*/
public Book(String title, double price) {
super();
this.title = title;
this.price = price;
}
public Book() {
super();
}
public String getTitle() {

View File

@ -30,7 +30,7 @@
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<artifactId>dao</artifactId>

View File

@ -31,7 +31,7 @@ import java.util.stream.Stream;
/**
* An in memory implementation of {@link CustomerDao}, which stores the customers in JVM memory
* and data is lost when the application exits.
* <br/>
* <br>
* This implementation is useful as temporary database or for testing.
*/
public class InMemoryCustomerDao implements CustomerDao {

View File

@ -185,8 +185,7 @@ public class DbCustomerDaoTest {
public class ConnectivityIssue {
private static final String EXCEPTION_CAUSE = "Connection not available";
//@Rule public ExpectedException exception = ExpectedException.none();
/**
* setup a connection failure scenario.
* @throws SQLException if any error occurs.
@ -194,8 +193,6 @@ public class DbCustomerDaoTest {
@BeforeEach
public void setUp() throws SQLException {
dao = new DbCustomerDao(mockedDatasource());
//exception.expect(Exception.class);
//exception.expectMessage(EXCEPTION_CAUSE);
}
private DataSource mockedDatasource() throws SQLException {

View File

@ -33,7 +33,7 @@
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<artifactId>data-bus</artifactId>
<dependencies>

View File

@ -34,8 +34,7 @@ import java.time.LocalDateTime;
/**
* The Data Bus pattern
* <p>
* <p>{@see http://wiki.c2.com/?DataBusPattern}</p>
* <p>
* @see <a href="http://wiki.c2.com/?DataBusPattern">http://wiki.c2.com/?DataBusPattern</a>
* <p>The Data-Bus pattern provides a method where different parts of an application may
* pass messages between each other without needing to be aware of the other's existence.</p>
* <p>Similar to the {@code ObserverPattern}, members register themselves with the {@link DataBus}

View File

@ -28,7 +28,7 @@
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<artifactId>data-mapper</artifactId>
<dependencies>

View File

@ -41,8 +41,6 @@ public final class Student implements Serializable {
* @param grade as respective grade of student
*/
public Student(final int studentId, final String name, final char grade) {
super();
this.studentId = studentId;
this.name = name;
this.grade = grade;

View File

@ -28,7 +28,7 @@
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<artifactId>data-transfer-object</artifactId>
<dependencies>

View File

@ -36,7 +36,7 @@ Wikipedia says
Let's take the troll example. First of all we have a simple troll implementing the troll interface
```
```java
public interface Troll {
void attack();
int getAttackPower();
@ -66,7 +66,7 @@ public class SimpleTroll implements Troll {
Next we want to add club for the troll. We can do it dynamically by using a decorator
```
```java
public class ClubbedTroll implements Troll {
private static final Logger LOGGER = LoggerFactory.getLogger(ClubbedTroll.class);
@ -97,7 +97,7 @@ public class ClubbedTroll implements Troll {
Here's the troll in action
```
```java
// simple troll
Troll troll = new SimpleTroll();
troll.attack(); // The troll tries to grab you!
@ -116,6 +116,9 @@ Use Decorator
* For responsibilities that can be withdrawn
* When extension by subclassing is impractical. Sometimes a large number of independent extensions are possible and would produce an explosion of subclasses to support every combination. Or a class definition may be hidden or otherwise unavailable for subclassing
## Tutorial
* [Decorator Pattern Tutorial](https://www.journaldev.com/1540/decorator-design-pattern-in-java-example)
## Real world examples
* [java.io.InputStream](http://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html), [java.io.OutputStream](http://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html),
[java.io.Reader](http://docs.oracle.com/javase/8/docs/api/java/io/Reader.html) and [java.io.Writer](http://docs.oracle.com/javase/8/docs/api/java/io/Writer.html)

View File

@ -29,7 +29,7 @@
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<artifactId>decorator</artifactId>
<dependencies>

View File

@ -30,7 +30,7 @@
<parent>
<artifactId>java-design-patterns</artifactId>
<groupId>com.iluwatar</groupId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@ -29,7 +29,7 @@
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<artifactId>dependency-injection</artifactId>
<dependencies>

View File

@ -27,7 +27,7 @@
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<artifactId>double-checked-locking</artifactId>
<dependencies>

View File

@ -29,7 +29,7 @@
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<artifactId>double-dispatch</artifactId>
<dependencies>

View File

@ -26,7 +26,7 @@
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<dependencies>

View File

@ -26,7 +26,7 @@
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<dependencies>

View File

@ -26,7 +26,7 @@
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<dependencies>

View File

@ -28,7 +28,7 @@
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<artifactId>event-aggregator</artifactId>
<dependencies>

View File

@ -30,7 +30,6 @@ package com.iluwatar.event.aggregator;
public class KingsHand extends EventEmitter implements EventObserver {
public KingsHand() {
super();
}
public KingsHand(EventObserver obs) {

View File

@ -30,7 +30,6 @@ package com.iluwatar.event.aggregator;
public class LordBaelish extends EventEmitter {
public LordBaelish() {
super();
}
public LordBaelish(EventObserver obs) {

View File

@ -30,7 +30,6 @@ package com.iluwatar.event.aggregator;
public class LordVarys extends EventEmitter {
public LordVarys() {
super();
}
public LordVarys(EventObserver obs) {

View File

@ -30,7 +30,6 @@ package com.iluwatar.event.aggregator;
public class Scout extends EventEmitter {
public Scout() {
super();
}
public Scout(EventObserver obs) {

View File

@ -29,7 +29,7 @@
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<artifactId>event-asynchronous</artifactId>
<dependencies>

View File

@ -31,7 +31,7 @@
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<artifactId>event-driven-architecture</artifactId>

View File

@ -33,7 +33,7 @@ import com.iluwatar.eda.model.User;
/**
* An event-driven architecture (EDA) is a framework that orchestrates behavior around the
* production, detection and consumption of events as well as the responses they evoke. An event is
* any identifiable occurrence that has significance for system hardware or software. <p/> The
* any identifiable occurrence that has significance for system hardware or software. <p> The
* example below uses an {@link EventDispatcher} to link/register {@link Event} objects to their
* respective handlers once an {@link Event} is dispatched, it's respective handler is invoked and
* the {@link Event} is handled accordingly.

View File

@ -30,7 +30,7 @@
<parent>
<artifactId>java-design-patterns</artifactId>
<groupId>com.iluwatar</groupId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<artifactId>event-queue</artifactId>
<dependencies>

View File

@ -59,7 +59,7 @@ public class Audio {
}
/**
* This method stops the Update Method's thread.
* This method check the Update Method's thread is started.
* @return boolean
*/
public static synchronized boolean isServiceRunning() {

View File

@ -30,7 +30,7 @@
<parent>
<artifactId>java-design-patterns</artifactId>
<groupId>com.iluwatar</groupId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<artifactId>event-sourcing</artifactId>
<dependencies>

View File

@ -29,7 +29,7 @@
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<artifactId>execute-around</artifactId>
<dependencies>

View File

@ -29,7 +29,7 @@
<parent>
<artifactId>java-design-patterns</artifactId>
<groupId>com.iluwatar</groupId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@ -32,7 +32,7 @@ Wikipedia says
Taking our goldmine example from above. Here we have the dwarven mine worker hierarchy
```
```java
public abstract class DwarvenMineWorker {
private static final Logger LOGGER = LoggerFactory.getLogger(DwarvenMineWorker.class);
@ -140,7 +140,7 @@ public class DwarvenCartOperator extends DwarvenMineWorker {
To operate all these goldmine workers we have the facade
```
```java
public class DwarvenGoldmineFacade {
private final List<DwarvenMineWorker> workers;
@ -175,7 +175,7 @@ public class DwarvenGoldmineFacade {
Now to use the facade
```
```java
DwarvenGoldmineFacade facade = new DwarvenGoldmineFacade();
facade.startNewDay();
// Dwarf gold digger wakes up.

View File

@ -29,7 +29,7 @@
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<artifactId>facade</artifactId>
<dependencies>

View File

@ -30,7 +30,7 @@
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<artifactId>factory-kit</artifactId>
<dependencies>

View File

@ -45,7 +45,7 @@ public class App {
/**
* Program entry point.
*
* @param args @param args command line args
* @param args command line args
*/
public static void main(String[] args) {
WeaponFactory factory = WeaponFactory.factory(builder -> {

View File

@ -35,7 +35,7 @@ Wikipedia says
Taking our blacksmith example above. First of all we have a blacksmith interface and some implementations for it
```
```java
public interface Blacksmith {
Weapon manufactureWeapon(WeaponType weaponType);
}
@ -55,7 +55,7 @@ public class OrcBlacksmith implements Blacksmith {
Now as the customers come the correct type of blacksmith is summoned and requested weapons are manufactured
```
```java
Blacksmith blacksmith = new ElfBlacksmith();
blacksmith.manufactureWeapon(WeaponType.SPEAR);
blacksmith.manufactureWeapon(WeaponType.AXE);

View File

@ -29,7 +29,7 @@
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<artifactId>factory-method</artifactId>
<dependencies>

View File

@ -30,7 +30,7 @@
<parent>
<artifactId>java-design-patterns</artifactId>
<groupId>com.iluwatar</groupId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@ -67,7 +67,7 @@ public class App {
* @see UserGroup
* @see Service
* @see PropertiesFeatureToggleVersion
* @see com.iluwatar.featuretoggle.pattern.tieredversion.TieredFeatureToggleVersion;
* @see com.iluwatar.featuretoggle.pattern.tieredversion.TieredFeatureToggleVersion
*/
public static void main(String[] args) {

View File

@ -47,7 +47,7 @@ public interface Service {
/**
* Returns if the welcome message to be displayed will be the enhanced version.
*
* @return Boolean {@value true} if enhanced.
* @return Boolean {@code true} if enhanced.
*/
boolean isEnhanced();

View File

@ -91,7 +91,7 @@ public class PropertiesFeatureToggleVersion implements Service {
* see the value of the boolean that was set in the constructor
* {@link PropertiesFeatureToggleVersion#PropertiesFeatureToggleVersion(Properties)}
*
* @return Boolean value {@value true} if enhanced.
* @return Boolean value {@code true} if enhanced.
*/
@Override
public boolean isEnhanced() {

View File

@ -65,7 +65,7 @@ public class TieredFeatureToggleVersion implements Service {
* is driven by the user group. This method is a little redundant. However can be used to show that there is an
* enhanced version available.
*
* @return Boolean value {@value true} if enhanced.
* @return Boolean value {@code true} if enhanced.
*/
@Override
public boolean isEnhanced() {

View File

@ -29,7 +29,7 @@
<parent>
<artifactId>java-design-patterns</artifactId>
<groupId>com.iluwatar</groupId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@ -29,7 +29,7 @@
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<artifactId>flux</artifactId>
<dependencies>

View File

@ -32,7 +32,7 @@ Wikipedia says
Translating our alchemist shop example from above. First of all we have different potion types
```
```java
public interface Potion {
void drink();
}
@ -64,7 +64,7 @@ public class InvisibilityPotion implements Potion {
Then the actual Flyweight object which is the factory for creating potions
```
```java
public class PotionFactory {
private final Map<PotionType, Potion> potions;
@ -100,7 +100,7 @@ public class PotionFactory {
And it can be used as below
```
```java
PotionFactory factory = new PotionFactory();
factory.createPotion(PotionType.INVISIBILITY).drink(); // You become invisible. (Potion=6566818)
factory.createPotion(PotionType.HEALING).drink(); // You feel healed. (Potion=648129364)

View File

@ -29,7 +29,7 @@
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<artifactId>flyweight</artifactId>
<dependencies>

View File

@ -30,7 +30,7 @@
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<artifactId>front-controller</artifactId>
<dependencies>

View File

@ -30,7 +30,7 @@
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<packaging>jar</packaging>
<artifactId>guarded-suspension</artifactId>

View File

@ -32,7 +32,7 @@ import java.util.Queue;
* Guarded Queue is an implementation for Guarded Suspension Pattern
* Guarded suspension pattern is used to handle a situation when you want to execute a method
* on an object which is not in a proper state.
* @see http://java-design-patterns.com/patterns/guarded-suspension/
* @see <a href="http://java-design-patterns.com/patterns/guarded-suspension/">http://java-design-patterns.com/patterns/guarded-suspension/</a>
*/
public class GuardedQueue {
private static final Logger LOGGER = LoggerFactory.getLogger(GuardedQueue.class);

View File

@ -29,7 +29,7 @@
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<artifactId>half-sync-half-async</artifactId>
<dependencies>

View File

@ -33,31 +33,31 @@ import java.util.concurrent.LinkedBlockingQueue;
* {@link AsyncTask} and {@link AsynchronousService}.
*
* <p>
* <i>PROBLEM</i> <br/>
* <i>PROBLEM</i> <br>
* A concurrent system have a mixture of short duration, mid duration and long duration tasks. Mid
* or long duration tasks should be performed asynchronously to meet quality of service
* requirements.
*
* <p>
* <i>INTENT</i> <br/>
* <i>INTENT</i> <br>
* The intent of this pattern is to separate the the synchronous and asynchronous processing in the
* concurrent application by introducing two intercommunicating layers - one for sync and one for
* async. This simplifies the programming without unduly affecting the performance.
*
* <p>
* <i>APPLICABILITY</i> <br/>
* <i>APPLICABILITY</i> <br>
* UNIX network subsystems - In operating systems network operations are carried out
* asynchronously with help of hardware level interrupts.<br/>
* asynchronously with help of hardware level interrupts.<br>
* CORBA - At the asynchronous layer one thread is associated with each socket that is connected
* to the client. Thread blocks waiting for CORBA requests from the client. On receiving request it
* is inserted in the queuing layer which is then picked up by synchronous layer which processes the
* request and sends response back to the client.<br/>
* request and sends response back to the client.<br>
* Android AsyncTask framework - Framework provides a way to execute long running blocking
* calls, such as downloading a file, in background threads so that the UI thread remains free to
* respond to user inputs.<br/>
* respond to user inputs.<br>
*
* <p>
* <i>IMPLEMENTATION</i> <br/>
* <i>IMPLEMENTATION</i> <br>
* The main method creates an asynchronous service which does not block the main thread while the
* task is being performed. The main thread continues its work which is similar to Async Method
* Invocation pattern. The difference between them is that there is a queuing layer between

View File

@ -30,7 +30,7 @@
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<artifactId>hexagonal</artifactId>
<dependencies>

View File

@ -50,13 +50,13 @@ import com.iluwatar.hexagonal.sampledata.SampleData;
* from the services it uses.<p>
*
* The primary ports for the application are console interfaces
* {@link ConsoleAdministration} through which the lottery round is
* initiated and run and {@link ConsoleLottery} that allows players to
* {@link com.iluwatar.hexagonal.administration.ConsoleAdministration} through which the lottery round is
* initiated and run and {@link com.iluwatar.hexagonal.service.ConsoleLottery} that allows players to
* submit lottery tickets for the draw.<p>
*
* The secondary ports that application core uses are {@link WireTransfers}
* which is a banking service, {@link LotteryEventLog} that delivers
* eventlog as lottery events occur and {@link LotteryTicketRepository}
* The secondary ports that application core uses are {@link com.iluwatar.hexagonal.banking.WireTransfers}
* which is a banking service, {@link com.iluwatar.hexagonal.eventlog.LotteryEventLog} that delivers
* eventlog as lottery events occur and {@link com.iluwatar.hexagonal.database.LotteryTicketRepository}
* that is the storage for the lottery tickets.
*
*/

View File

@ -29,7 +29,7 @@
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<artifactId>intercepting-filter</artifactId>
<dependencies>

View File

@ -29,7 +29,7 @@
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.18.0</version>
<version>1.19.0</version>
</parent>
<artifactId>interpreter</artifactId>
<dependencies>

View File

@ -23,6 +23,7 @@
package com.iluwatar.interpreter;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
@ -43,6 +44,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
* @param <E> Type of Expression
* @author Jeroen Meulemeester
*/
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public abstract class ExpressionTest<E extends Expression> {
/**
@ -88,6 +90,13 @@ public abstract class ExpressionTest<E extends Expression> {
this.factory = factory;
}
/**
* Create a new set of test entries with the expected result
*
* @return The list of parameters used during this test
*/
public abstract Stream<Arguments> expressionProvider();
/**
* Verify if the expression calculates the correct result when calling {@link E#interpret()}
*/

View File

@ -38,7 +38,8 @@ public class MinusExpressionTest extends ExpressionTest<MinusExpression> {
*
* @return The list of parameters used during this test
*/
public static Stream<Arguments> expressionProvider() {
@Override
public Stream<Arguments> expressionProvider() {
return prepareParameters((f, s) -> f - s);
}

Some files were not shown because too many files have changed in this diff Show More