From 8aca41e00739119b1405345b8d5e49ab2555f31b Mon Sep 17 00:00:00 2001 From: Luis Date: Mon, 16 Jun 2025 10:57:50 -0300 Subject: [PATCH 1/3] docs: add README for each design pattern --- .../constructs/abstractfactory/README.md | 29 +++++++++++++++++++ .../example/constructs/adapter/README.md | 21 ++++++++++++++ .../example/constructs/decorator/README.md | 21 ++++++++++++++ .../example/constructs/factory/README.md | 19 ++++++++++++ .../constructs/factorymethod/README.md | 17 +++++++++++ .../example/constructs/observer/README.md | 23 +++++++++++++++ .../example/constructs/singleton/README.md | 15 ++++++++++ .../example/constructs/strategy/README.md | 22 ++++++++++++++ .../constructs/templatemethod/README.md | 18 ++++++++++++ 9 files changed, 185 insertions(+) create mode 100644 src/main/java/com/penapereira/example/constructs/abstractfactory/README.md create mode 100644 src/main/java/com/penapereira/example/constructs/adapter/README.md create mode 100644 src/main/java/com/penapereira/example/constructs/decorator/README.md create mode 100644 src/main/java/com/penapereira/example/constructs/factory/README.md create mode 100644 src/main/java/com/penapereira/example/constructs/factorymethod/README.md create mode 100644 src/main/java/com/penapereira/example/constructs/observer/README.md create mode 100644 src/main/java/com/penapereira/example/constructs/singleton/README.md create mode 100644 src/main/java/com/penapereira/example/constructs/strategy/README.md create mode 100644 src/main/java/com/penapereira/example/constructs/templatemethod/README.md diff --git a/src/main/java/com/penapereira/example/constructs/abstractfactory/README.md b/src/main/java/com/penapereira/example/constructs/abstractfactory/README.md new file mode 100644 index 0000000..86e3c71 --- /dev/null +++ b/src/main/java/com/penapereira/example/constructs/abstractfactory/README.md @@ -0,0 +1,29 @@ +# Abstract Factory Pattern + +The abstract factory pattern provides an interface for creating families of related objects without specifying their concrete classes. This example defines two factories that each create a pair of products. + +## Class diagram +```plantuml +@startuml +interface AbstractFactory { + +createProductA() + +createProductB() +} + +interface ProductA +interface ProductB + +class Factory1 implements AbstractFactory +class Factory2 implements AbstractFactory + +Factory1 --> ProductA1 +Factory1 --> ProductB1 +Factory2 --> ProductA2 +Factory2 --> ProductB2 + +class ProductA1 implements ProductA +class ProductA2 implements ProductA +class ProductB1 implements ProductB +class ProductB2 implements ProductB +@enduml +``` diff --git a/src/main/java/com/penapereira/example/constructs/adapter/README.md b/src/main/java/com/penapereira/example/constructs/adapter/README.md new file mode 100644 index 0000000..4000ca7 --- /dev/null +++ b/src/main/java/com/penapereira/example/constructs/adapter/README.md @@ -0,0 +1,21 @@ +# Adapter Pattern + +The adapter pattern allows incompatible interfaces to work together. It wraps an existing class with a new interface so that it can be used as another type. + +## Class diagram +```plantuml +@startuml +interface Target { + +request() +} +class Adaptee { + +specificRequest() +} +class Adapter implements Target { + -adaptee : Adaptee + +request() +} +Target <|.. Adapter +Adapter --> Adaptee +@enduml +``` diff --git a/src/main/java/com/penapereira/example/constructs/decorator/README.md b/src/main/java/com/penapereira/example/constructs/decorator/README.md new file mode 100644 index 0000000..670f073 --- /dev/null +++ b/src/main/java/com/penapereira/example/constructs/decorator/README.md @@ -0,0 +1,21 @@ +# Decorator Pattern + +The decorator pattern attaches additional responsibilities to an object dynamically by wrapping it with decorator classes. + +## Class diagram +```plantuml +@startuml +interface ComponentIF { + +operation() +} +class ConcreteComponent implements ComponentIF +abstract class Decorator implements ComponentIF { + -component : ComponentIF +} +class ConcreteDecoratorA extends Decorator +ComponentIF <|.. ConcreteComponent +ComponentIF <|.. Decorator +Decorator <|-- ConcreteDecoratorA +ConcreteDecoratorA --> ComponentIF +@enduml +``` diff --git a/src/main/java/com/penapereira/example/constructs/factory/README.md b/src/main/java/com/penapereira/example/constructs/factory/README.md new file mode 100644 index 0000000..5fd08ab --- /dev/null +++ b/src/main/java/com/penapereira/example/constructs/factory/README.md @@ -0,0 +1,19 @@ +# Factory Pattern + +The factory pattern encapsulates object creation logic in a dedicated factory class. The factory decides which concrete product to instantiate. + +## Class diagram +```plantuml +@startuml +interface Product { + +name() +} +class ConcreteProductA implements Product +class ConcreteProductB implements Product +class ProductFactory { + +createProduct(type) +} +ProductFactory --> ConcreteProductA +ProductFactory --> ConcreteProductB +@enduml +``` diff --git a/src/main/java/com/penapereira/example/constructs/factorymethod/README.md b/src/main/java/com/penapereira/example/constructs/factorymethod/README.md new file mode 100644 index 0000000..62b8ea1 --- /dev/null +++ b/src/main/java/com/penapereira/example/constructs/factorymethod/README.md @@ -0,0 +1,17 @@ +# Factory Method Pattern + +The factory method pattern defines an interface for creating an object but lets subclasses decide which class to instantiate. + +## Class diagram +```plantuml +@startuml +abstract class GenericProduct { + +factoryMethod() + +build() +} +class ConcreteProductA extends GenericProduct +class ConcreteProductB extends GenericProduct +GenericProduct <|-- ConcreteProductA +GenericProduct <|-- ConcreteProductB +@enduml +``` diff --git a/src/main/java/com/penapereira/example/constructs/observer/README.md b/src/main/java/com/penapereira/example/constructs/observer/README.md new file mode 100644 index 0000000..dca7ecc --- /dev/null +++ b/src/main/java/com/penapereira/example/constructs/observer/README.md @@ -0,0 +1,23 @@ +# Observer Pattern + +The observer pattern defines a one-to-many dependency so that when one object changes state, its dependents are notified automatically. + +## Class diagram +```plantuml +@startuml +interface ObservableInterface { + +getSupport() + +addPropertyChangeListener(l) + +removePropertyChangeListener(l) +} +abstract class ObservableAbstract implements ObservableInterface +class Observable extends ObservableAbstract { + +doSomethingWith(n) +} +class Observer implements PropertyChangeListener { + +propertyChange(e) +} +ObservableAbstract <|-- Observable +Observable --> Observer : notifies +@enduml +``` diff --git a/src/main/java/com/penapereira/example/constructs/singleton/README.md b/src/main/java/com/penapereira/example/constructs/singleton/README.md new file mode 100644 index 0000000..f559bc5 --- /dev/null +++ b/src/main/java/com/penapereira/example/constructs/singleton/README.md @@ -0,0 +1,15 @@ +# Singleton Pattern + +The singleton pattern ensures a class has only one instance while providing a global point of access to it. + +## Class diagram +```plantuml +@startuml +class Singleton { + -uniqueInstance : Singleton + -Singleton() + +instance() : Singleton + +doSomething() +} +@enduml +``` diff --git a/src/main/java/com/penapereira/example/constructs/strategy/README.md b/src/main/java/com/penapereira/example/constructs/strategy/README.md new file mode 100644 index 0000000..f80181c --- /dev/null +++ b/src/main/java/com/penapereira/example/constructs/strategy/README.md @@ -0,0 +1,22 @@ +# Strategy Pattern + +The strategy pattern defines a family of algorithms, encapsulates each one, and makes them interchangeable at runtime. + +## Class diagram +```plantuml +@startuml +interface Strategy { + +executeAlgorithm() +} +class StrategyImpl1 implements Strategy +class StrategyImpl2 implements Strategy +class Context { + -strategy : Strategy + +operation() + +setStrategy(Strategy) +} +Strategy <|.. StrategyImpl1 +Strategy <|.. StrategyImpl2 +Context --> Strategy +@enduml +``` diff --git a/src/main/java/com/penapereira/example/constructs/templatemethod/README.md b/src/main/java/com/penapereira/example/constructs/templatemethod/README.md new file mode 100644 index 0000000..9f77710 --- /dev/null +++ b/src/main/java/com/penapereira/example/constructs/templatemethod/README.md @@ -0,0 +1,18 @@ +# Template Method Pattern + +The template method pattern defines the skeleton of an algorithm in a base class and lets subclasses override specific steps. + +## Class diagram +```plantuml +@startuml +abstract class AbstractClass { + +templateMethod() + #stepOne() + #stepTwo() +} +class ConcreteClassA extends AbstractClass +class ConcreteClassB extends AbstractClass +AbstractClass <|-- ConcreteClassA +AbstractClass <|-- ConcreteClassB +@enduml +``` From 027ed441720720e8621198f2d14d6b366a0f5d6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Pe=C3=B1a?= Date: Mon, 16 Jun 2025 14:23:52 -0300 Subject: [PATCH 2/3] Add assets folder for class diagrams and abstractfactory png --- assets/images/abstractfactory.png | Bin 0 -> 21474 bytes .../constructs/abstractfactory/README.md | 3 +++ 2 files changed, 3 insertions(+) create mode 100644 assets/images/abstractfactory.png diff --git a/assets/images/abstractfactory.png b/assets/images/abstractfactory.png new file mode 100644 index 0000000000000000000000000000000000000000..801ddaafd69a42d2ab20fab5fb0b8a7967eb31b0 GIT binary patch literal 21474 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 NJYD@<);T3K0RWzy1G4}C literal 0 HcmV?d00001 diff --git a/src/main/java/com/penapereira/example/constructs/abstractfactory/README.md b/src/main/java/com/penapereira/example/constructs/abstractfactory/README.md index 86e3c71..de6918b 100644 --- a/src/main/java/com/penapereira/example/constructs/abstractfactory/README.md +++ b/src/main/java/com/penapereira/example/constructs/abstractfactory/README.md @@ -3,6 +3,9 @@ The abstract factory pattern provides an interface for creating families of related objects without specifying their concrete classes. This example defines two factories that each create a pair of products. ## Class diagram + +![Class diagram](/assets/images/abstractfactory.png) + ```plantuml @startuml interface AbstractFactory { From 850373ef54d9a95a3e6fcf1316e9a91938dd9817 Mon Sep 17 00:00:00 2001 From: Luis <1105281+lpenap@users.noreply.github.com> Date: Mon, 16 Jun 2025 22:44:43 -0300 Subject: [PATCH 3/3] Add descriptions and class diagrams for each pattern and problem --- assets/images/adapter.png | Bin 0 -> 10184 bytes assets/images/decorator.png | Bin 0 -> 17086 bytes assets/images/factory.png | Bin 0 -> 13383 bytes assets/images/factorymethod.png | Bin 0 -> 13947 bytes assets/images/observer.png | Bin 0 -> 26060 bytes assets/images/producerconsumer.png | Bin 0 -> 12753 bytes assets/images/singleton.png | Bin 0 -> 5397 bytes assets/images/strategy.png | Bin 0 -> 15142 bytes assets/images/templatemethod.png | Bin 0 -> 14755 bytes .../example/constructs/adapter/README.md | 4 +++- .../example/constructs/decorator/README.md | 6 ++--- .../example/constructs/factory/README.md | 3 +++ .../constructs/factorymethod/README.md | 15 ++++++++---- .../example/constructs/observer/README.md | 4 +++- .../constructs/producerconsumer/README.md | 22 ++++++++++++++++++ .../example/constructs/singleton/README.md | 3 +++ .../example/constructs/strategy/README.md | 5 ++-- .../constructs/templatemethod/README.md | 15 ++++++++---- src/main/resources/application.properties | 2 +- 19 files changed, 62 insertions(+), 17 deletions(-) create mode 100644 assets/images/adapter.png create mode 100644 assets/images/decorator.png create mode 100644 assets/images/factory.png create mode 100644 assets/images/factorymethod.png create mode 100644 assets/images/observer.png create mode 100644 assets/images/producerconsumer.png create mode 100644 assets/images/singleton.png create mode 100644 assets/images/strategy.png create mode 100644 assets/images/templatemethod.png create mode 100644 src/main/java/com/penapereira/example/constructs/producerconsumer/README.md diff --git a/assets/images/adapter.png b/assets/images/adapter.png new file mode 100644 index 0000000000000000000000000000000000000000..09ec674482709383b6c0253ee11d29c7771ff55d GIT binary patch literal 10184 zcmch7Wk6JI*RCjninMg62-4jh0|EjnNJ|gh3{ncx-6;q|BQ0GLLw8Ec2vQP5NW-~( zo;S~TzQ2bbFneat-iv$gb*(EV^tqZM_5<<z9YgzWBKxP)=7kfQE`Dhe_1b+EXbhby zjWj$Vw$wYm&(HeKOFNE;?$#}4DTti(3z*@~M^BwcipVw%bO#b-V9vd=;3C5b$cL{pxG=J`Gnq4R!fI>s=AN_x?)po2}{tx>j;d z!{&Q8Lf!34c2ncxF{SRb(_>3^EB-pUmf=?P_fQV+5Z}kNf-Y29zPV{VNf(a6c+wO7 zaa?W@3*~UiC`QbI`%~h%_4Hd>rg23@MCD!nyB|)Mg>;-Bm3mw+7f-n{*!2?9UP)n| zz!jq_5l|LRPRY{9a1zcc2n7}0H4$l^7tU|3-`k&Eu%D5y9#C%;P_9e*oPUuG#5{tc531EyS_|h)2_-k<*&qrwcDpPAcDI%#XHbIO*yA4X+Od zI735285AN&xs2Zx6cj9s)-C&r`d*%fg@w&lTh7nV(}=jS;{FH0;(GU@u~=H8CyLe9?4 zltT9#T-I|w1mn^K1qZ{E&-7)%mb+?k2FrF-=khJxM;`hm2^l-%`|b{?#F)gh+_0rz zp*bI19CokQQ%6S!tfu{PtE#ES-dbs3bv5rM|MTqi!Bp8!?NZ&T0(BZ^YAUKo9r8RP z@DYl89X*}(GWzS1b(ZREwWBk}F;kVMik|o84hsue931vQv2YSD0Rai;)w&Th0|NsR z4t*sp->c&pQlh1Lr+}bOHd2At>ykI2Gj~u{TR*@L5_x%bMMXsgA?M^QPe~z7lV<}9 ziE&i!5?QBRijtO=?hM8)NG?1#XmXcN_Wt#aoA1YbtzE#}#mOGS18mqp68l*0MAt_4 zSmwmQ`bbuKYU<9n$~!9tjjpd>e_UA5&n+r0ww|xuNjCC@xIpDY`~u4zKAxWrCX`=Z zy}UTxU2NhsXiPB7;qD=gG&K2o(~e0KE`GFU=Mi0XmfrJ;0Oi7AGGg6I1rbECD<6 zP-PVr_!Zxqy``4k%*4dIv4tBcxh*G4UVN9;BN7aKT%(<*Q5oFR0Whb%p_*s2U9^H|VZeJDvzo21>Ce{eOva@!Iye}03Fx;i3Ee}@wX;z1@(m7iue-ateyOPVs-D4s zzT&_iG^74sa4tm9W;4U#{!yrWb#>K|G1KSgnZmz-{@^AN7nrmu~kHHm79(xAhEx$+=bfB)Dm$$IU4-Up`S*UX`T5k23YQ=oo zCHNAc6FxPy8mCdKH`LCq#p}f0Qz@ESd?N|#p^Ud3L`mserD;zPHU$PYIe^Tkkm_yG z-PV?tEAaG4hOn#_G76sR=I%}{26J?Gch}X`RZzeP4U39O;`CL4K(aOBl;0B(5ydmB zIy*W#y11kZyZkKGtHY~z`q6E_*m%4-Vc8r+A!wffMi_MB=X#c3e%|}uUL`+2KhJye zA;}NQymy-Uo3GNi?^Me;4J)*D_w*Eao$SIDBK!OLp0Kd=_Vvz{KTvU6t#$ zJ-xQJ#>jMgzQzVq5N~sBZK}p*CR*Y=L=GF^@bT8vmuEt74PC4cy~7_xgFk$rl<+2P zV3|a*R1+!>2jQk?phYvHvy=tFc6M-qv>$|%k%&bpG8ifBpLP`Sa(T zoSe~=A4NHyWT@TUU8`@KOe;T!(pg?@=g=%6Jal-OSIp>%q7U66(zf*2c+o!-GLn;$ zkU=s*-dN;cc0xqFem~9G$WR{t^&ZabyHM}MsI2%Nz=WE*I*s^S*Nfjf+}`jeOK#-V z<>hL+F@CSs>5$+u*Ge2-^b!?&b948}kTJzGfBj2b$;;7ZPnXg=7GHLT()ig}S##(} z{WVa7zAx0&)c#!ckr-NSZ7ocwmq~#lJ3E_?xVq`xEq5B~ha?e^k*K&7M@WbwjYF)+ z{apynGIX(CoTP>?LemXpyfs-==;tcsaee8@hghXFbtWMpsS3vL-r-V4!1=pf9QT&Q zBZveXmL9V4DciiCDL3Ne;3z9Dj^o1(j*P_q*c2QX_{P`i;#kAcXGi3&yXRCejMFs?SEf1vM zQI_5{c@Zr&341NWZu}yoJIF98G4Ty+VeLc|-tu=YBn8eFGC&!QV#7j0KxY(Zu42o0 z2mIkTcd>{oviHaVX29^H$M`R%&w@x$^K}l7{g&`DTc(dztLM6pLi32%m< zJbn5X#0mK0o)Sp{;sKq=UwKT?j+qg5Gvaq`YGb2vJ?ifwkakCiD4IBP((Q7!x@P@_ z*s*HXt)=f8V$gL67N_L;18M|sO~%M{rXnf=Dxv4K+r>8TZhjBf@v))J)z6BWb+zVK zJ-S&Kok5%^>(WNudbG}D7!|*sjf(NteI~m5g2FCsI$0HOP z&Yz?IdWk;Y<@WCXeRKIH7$lBs>UEv{qOLR{CP6lV3>jh$!LS)EdEI;c!&G_#oi#B_ z$BLxQVu)Oz?$eX_jEq4RVr0WDaGs19$wt#@GN)0dh#RYb#I$9Ky59vFF){Jg&V?85 zVN_VCh|?CM$?QY_x$GHaG?nPjo$Z}nVJk!LjiAejkABMruE(^#NJ_f0O#6VA-~>vE zUJJs>+u}qwNJKc$7mu|IK9q+3#p~M`Eqh;5yRaMKX$OVE<&!}82#lZZ^$BXBc>oVOnHjvq`wA8B@oZ;9*0 zNKv&AM*A+#4w*Z6)-+~nC0!`?v?}mCd#1X2KW3>N@#bdbj;#}`@eA1b(dPC{c{Tpj zY`v4Ig#|N(HQq)t>~x>v=gCcNS&|B3<=2{w_xvU5>K*Dm&9`|TWH{fIc=y{H%5@qc z$6I-`b8}VrQ>kK}2Z}U4T|v`no`*k~n3=1x&)@ro_6!b9%*S)5og)-X7Pn;`_)ZzQ zd?$FA$#5bLqkY^W*k4cpy0L$7zym0#6B3=`F+2*X_}4@o4%)&zXY$<~&x`d7HE~so zOi}A{5I;!Oti4R3p&@U8(diZX1D^lIdaAgvuy=Xc@At3S0~S6~2m~@bJPf88_?;9k z3FN}j=7fR1J{Z7{$jCxvlwdM49Z^)GK!&VuZG{zn{`{06%05T0&fe$zh^&02JCcG? zOj42t_rt%YGy|tuXAm~ao9WN587rj6I8kV5Xen@BkroATmF(yfWMi&|jVLQ4Bf|2wPgkqYg_xLF&_gnr z4j*st7~8=VZdhE*VpkXX1NQo}GQbWuufXDIj@-p~Uq2tm>$bFv9zXs$Q1_7fqt~<4+#_i=xqEMi< za%3^{ivR?A0`Z}#r3LMcAme3L%V2>%*aQH`j>&TD?;E-Y6xlW6Dnd=$L2zMhcRC3y z%KK*Vx4(_CO4a1$?g+;ko%uHE6ISoGkd+v`tHg8XMvDLN9^ra_3aj5Xti(Sz)Ar_X9FvT7k zQqp?A8(%R#pgg)t=MgCZHb?r?(oWeK_|@v zT=oL>qbK*~571$te}PL6XlQE6JXp~c`-w7?kWEy$q2x_|@z!{uq@@bhS5jX=&*hZBZ)%fe`A+#Uf-E>Sn>^SyjC{Ki*bVRpoxyQ$gtgS4|gqAvP`~ zBI5q*8$Rv>3^W*zQc{U_d5&QF=;Fq)(tcn3V_wT)+p(O$h6Z8fuOmlCuA28|kQ(gI zQ{(E&wUn_{PP;zG3r{UK`Oz>-cTCHP@ww5E!qFr4$_$#i6|7o|gV4y2l|K!034DNh zCXlDhWse)R`Cd_7zk#%Msici;EiNp6xi%=-@ih%nAS0d3~69Rq|Jp}W|2v2{kQVj>k@2O zvsQH_%UlXA|52RRZB#Zbm%KujcKVM;{Bf|FK+CvuXMU>JOV$l((>2!UR2m5Y#J(qr z`CVs3j(!Rr*mwOfP*ig2a)rT)D-e6$!3*(eNQ-(ZQDaz^U;9c`)2O?9f7UW9o2kv~ zgo7em8aH{RD3EtD;FMgJbQNpFxQFH>E9Xe%v@|WMa1IWtn(TloD4T}N zRPH~s`%{l*X>!S?PDwsPani;*k64W(QzV^X52)6>A#L}+s(nXC;7e8gR$=_dpAsG( z(;9kKgiexVLbe8`T+L8LpwyZg>$r0s0gM`rmL-l(EiB8zlG8c3+X|U9xR)+*R-OJo zN@;}uZe>iY`(3-IqUm>Ky^_#PXcRq4VP?$t^TIj~nZDs%Lk=B0nPNm>ZAJZy(HsyX z5hq*N7^s%FzW>dC{_rS2*_SV0>gbT3%{}{DkIp{AKrcYnl&SX)4j%3A)2;(0u{~c` zKDW$=eM=3&HuJdI`)nNeO<*=0RVhYO*PP*K5$45q*<4wQ>b9MXe3n&GQ5op%rPUZ4 z8}sz^T-6`<&I(n4u;xM1ICIs~`1;!0+lPkieh#Jr(lp*Ek)4~H3%XbG=8|`al#Fb1 zZ%>^QJK`-~*2~Nj>GQ!_h%}DgPZIsJw8-i2@KZ}s>*b4?N}M-e-=Tr_&NuHMi_~Pp zrU(0ol7PVZbpOreQhj~BN-_u3AnRShA9YBKTW?P2&t*VW>76_G7@w1bBE%S_z&&ZMN>*xs%HO{Ezzc0_xB6 zQ~PsmlmJD+Fnbt;Rh7P{Lzc~;&ZmQUJS6$1nyO~+YTGdQ6SH9{ALQ`ax7pd(uV2f{ z%V%@<1jrw-BAS|-;C9Ku3(cN{2=c9@A~&LCi{ru%@u4rgH8&e2Ka&kGYkH?Y`@0q{ zWKSf8V$P&8Lm#!IZ$@UO#M`3{;5?b0DztVLKH6Jf7qlFv^t|W!pzZ7@#ovW(EUxkU zo`ptQ^BZy)g3E|Z)7^4Ct|+nl-Q%y*)5IgexjI?2P-Yk)8V7iPNx8&j z6#ql8LVJiGAGNyUB_w`-(=EZ~ojiyAynusM*VYTBg$B*SaKH!;uIvEQOYGg0$EHyvJLH-i#4NILA# zO6dgO`Xk5g{zH!GLSc^@T{lgvt*xQZSzsFRotk0iIQ!i0h{dYOc*Fv|zEAx#>uCII zAtuUAdi&&hZ5uBok`eD8!YdCgVhcZtoD=tj|9iSQ3TMMtuYx>jQ#Z*N_jJ4?C!H{3 z>uwJPrKeMP7Sq$yZv;KU2yG3|lJt`>5Mn7*JThqh^d9hgCSl=Jjn4*`V7&NUq7(sX zhu%&E3M0Z~2g#kGrm6~DN4u&|p?5+HyYc#2ra3YRpFVy1?SBfBe`f&yv+w?y4*Y+4 z<&?k=Xy`L0hRjfY+f#xp;IA1Ps&TF%@uPI!LihKXt^s)g)({|H^vN&8KA&vQ;8r@s zk&AeTVgkFqwyNsSRJ~~-#@!YW5CH9Ks~Hd^iURGsHC>vXm&ddq3*NLj5u8y0!6x7B z3fP<|5ET*W5ch@$?kzS6a?HvF;Y1?``ui6a7vE6rQc+SmRskbTAU3-b4*R~o4p_2v z_6ndGmT=*BS|}rLRA6~ICw`mlEYDvu^k%!fEho0Fre;m@8ZahBOrV zgu;wPO027r!+i3o@6KEeaM#SRh&KeEV>o?QA*&%6Nn*8n@L8`e%I%44h@ei|vq;5l zS72!5sU+jjNGyzv;q%&Fb_vViaWtmaTQ$reCu_7enyX-uKFpeHQWz{l=t>-Zff$H8;%4D?ejwI9Ab!xg9B%CmL7d> z)CN@{WH*&Os~K%DI8%PDxGe3leYw z9K*s&)+dNZ!AZ!g0dHBr&s);i`#a|ET4j{bg7~7wZJ?a)VB&mY(bLldrZ@;jt~cP( z-$r$L9hREAy5t0o4B!PwZc(FV`k=AYe`>cmRF8vh{v%0A30I8;`r7Ar|99oqYIF3$ zTS`hwL7EuuV%_CR@4Fp4l2EnQ6Vx1$?F+ba$>I0*fLEouz}Y;zxBxOlk2;Wp_Q{jJ z*;&v1@9n@MaYpq-(*U=pF+6G+O0+h(Thg}1XaPv-q2d@yYf z_xDM8%tg-uZz5xL5m>#t*q2ze|N&>UV-XErwu34rCs&Kf%ALlJpb` zYV`CJej=y%;wq;A30$32KPO4}MBfA%vh@5&GtB~Lb!V&^Q_srnFO{Yr5)VSFB4BtH z&N5zt_P4OG02sG=u+kYEGBr23+~P%2UQksPr!Uj|w@hn@2n(Z!|376~p=j|E*i5=M z%_Vgd_O2c_DtXYKQcJ!fHr_y%h2nbB*@{=ua_b;^_4~}H@H}i<;a5y zc9z@x0Fh4Pw^3+|x`jI6xKn!DWGsdY*;k$^>cPS4>h0~VuTR;p2yKLKQHg^MPJP7( zC+vhRBqx>X5$Q{ON?@0anVC2djMWVd3Hh2b{DU93%Jt3Uz?D9f$0f{`Lr5jPj z9$>dC9ODlVbBV|j(({>$!ii=}z*fUlIL>;i`<3{dobRWVhUHLN&C8&~#Fw_eN}?}E zYk$y5NvckmS}AlbH@ac9T>(dik@9hULO3R$Ht^ri?`1@g^Rx2tB?R5R4vvk1ydnzriVNp!=llJ?HQMRI|EAGGq6*LD)e(OL)<^x1CrRtvhMfcw z+}mbq$0xhXiqzppzd3LMF}KgJ)WrlzmqB+$M#kjQ_+8?|x#(ZwbSWw-s-&&ZnekRC zbJfTWwfbH)9*l&F)K=zEsm=Q}UvX8^*4G(3F3Cd6cRqBl zggYCVj{cUNdgLPaN&FrEp!HW3$A+G?*q@`xCC|^o*KMUEZ!2H`ufVpjHD?CsvI|6I zIF$hgGt0Tx*?XNY`!tGy;(pimp9O`F48&G?V;M4+3`t8y!f_EW-}Pk=5@@SSu*-*f z94Cs^wOAv~uNH)b6MR5Vj!lPZJ%*d)G+zeI&Ca*X)fm6~SWvEgT7ZukO*PIPL}HcK z7eX@0`L}NgoJwW!kY$jgkW0tYKYm<5-Bmpj_vs1kf0~>Burq-O8T^q>X+k~n?>GO$ z0VQpPHOn-jlT(VgvheY_9<25O-DjGUa0%jQkWp0vW{!#2EAaIks+?Opp z{{1_DpnnV*`wLbS!o$l;A?YjDV9uw^Ual_|5*4-kt&*W7VbbVfb-3DJ8Cg*76FN@L zXl9U+(XF7@j3;IIOB_29wiZKFolP&w$Ly25ya{2*Y@v9>5A0(Jw|D0kqSLL@oA-?cZS z`iR^>bgK)bY-&ku6D&2&5wPY=T#3_nhFdUh>!yu||47Kth2YzcQ_2%>lfT%P1|;un zZbGmy8yXr|6t7vHlPg~)C#$=uk{MOd0>N) zFKR=i*SO+#pbP~HD3JphF$H&}APhqOQ+2;{LZ4WX-z8&};ZbQYs=T5_raTzz-e@s{e%K-6MkSZhOzv3>9x{WI5(u=;BNR}FV{KMlJBZdcw z0T$VlEQX4Po?16Mb;~&c(V?Mq$$#GnhvBc(OkWWi*KeR1c5--_&TAPZ_Cd^l+50e3 zEN1jM^1|-Ay15%Zq&*E2hB;UbqK5nOrmxIgZSh@hu6^XzR#z+VYw*e$I461>zExzu zEO}+dnD+y*@l75xZ%k2f+_piX!!3bX(Kk7z)Qxcnos*VUirRn0A6R$JxR^yNU2R)G zX0E1tepuEW$0z!T{p{E=>HhJM^|`DI1;-K;Fk$ zG)aBYJknIV6IRYt9}07TC9S=0Jc%Exlz+%dn6t5t=7886DEV!&+O*N@(J3#q6zh#n zt60ic>H+C1@!R2Ye=5w$#?~noGkBEH?1j>W>R$9sDp8%Zm5EykfG+RVBErX~yZIh2 zt&R{Zy)px4QrNEK13rnjtcIhbz`D}JMIx?wRil#KZVEaqhcmb*{TS@OO1(C?i4Z!qav;$l?aE&lng-Ytl{np~NTvH$-8 DdWb1u literal 0 HcmV?d00001 diff --git a/assets/images/decorator.png b/assets/images/decorator.png new file mode 100644 index 0000000000000000000000000000000000000000..33938ee3e614b2f456a32306803eec4d3b6b7617 GIT binary patch literal 17086 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 literal 0 HcmV?d00001 diff --git a/assets/images/factory.png b/assets/images/factory.png new file mode 100644 index 0000000000000000000000000000000000000000..8b61776919e3f9ea047d7e2912aeb79d80460347 GIT binary patch literal 13383 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 K{dlYE^M3%$cv2_; literal 0 HcmV?d00001 diff --git a/assets/images/factorymethod.png b/assets/images/factorymethod.png new file mode 100644 index 0000000000000000000000000000000000000000..4ea90872ce5df2fd09f443a1b4306c1c099a7cd8 GIT binary patch literal 13947 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�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Μ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 literal 0 HcmV?d00001 diff --git a/assets/images/strategy.png b/assets/images/strategy.png new file mode 100644 index 0000000000000000000000000000000000000000..237e5fea8e71cf7504326a4c985cb5eff2f8caf4 GIT binary patch literal 15142 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 literal 0 HcmV?d00001 diff --git a/assets/images/templatemethod.png b/assets/images/templatemethod.png new file mode 100644 index 0000000000000000000000000000000000000000..c005d0bd569de1928ccc968856ffc3d9aac508cc GIT binary patch literal 14755 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 S;I}1jJe5_JDUdSw@P7dPIY9OR literal 0 HcmV?d00001 diff --git a/src/main/java/com/penapereira/example/constructs/adapter/README.md b/src/main/java/com/penapereira/example/constructs/adapter/README.md index 4000ca7..22c5669 100644 --- a/src/main/java/com/penapereira/example/constructs/adapter/README.md +++ b/src/main/java/com/penapereira/example/constructs/adapter/README.md @@ -3,6 +3,9 @@ The adapter pattern allows incompatible interfaces to work together. It wraps an existing class with a new interface so that it can be used as another type. ## Class diagram + +![Class diagram](/assets/images/adapter.png) + ```plantuml @startuml interface Target { @@ -15,7 +18,6 @@ class Adapter implements Target { -adaptee : Adaptee +request() } -Target <|.. Adapter Adapter --> Adaptee @enduml ``` diff --git a/src/main/java/com/penapereira/example/constructs/decorator/README.md b/src/main/java/com/penapereira/example/constructs/decorator/README.md index 670f073..2472b26 100644 --- a/src/main/java/com/penapereira/example/constructs/decorator/README.md +++ b/src/main/java/com/penapereira/example/constructs/decorator/README.md @@ -3,6 +3,9 @@ The decorator pattern attaches additional responsibilities to an object dynamically by wrapping it with decorator classes. ## Class diagram + +![Class diagram](/assets/images/decorator.png) + ```plantuml @startuml interface ComponentIF { @@ -13,9 +16,6 @@ abstract class Decorator implements ComponentIF { -component : ComponentIF } class ConcreteDecoratorA extends Decorator -ComponentIF <|.. ConcreteComponent -ComponentIF <|.. Decorator -Decorator <|-- ConcreteDecoratorA ConcreteDecoratorA --> ComponentIF @enduml ``` diff --git a/src/main/java/com/penapereira/example/constructs/factory/README.md b/src/main/java/com/penapereira/example/constructs/factory/README.md index 5fd08ab..9c6b0a1 100644 --- a/src/main/java/com/penapereira/example/constructs/factory/README.md +++ b/src/main/java/com/penapereira/example/constructs/factory/README.md @@ -3,6 +3,9 @@ The factory pattern encapsulates object creation logic in a dedicated factory class. The factory decides which concrete product to instantiate. ## Class diagram + +![Class diagram](/assets/images/factory.png) + ```plantuml @startuml interface Product { diff --git a/src/main/java/com/penapereira/example/constructs/factorymethod/README.md b/src/main/java/com/penapereira/example/constructs/factorymethod/README.md index 62b8ea1..8040ebf 100644 --- a/src/main/java/com/penapereira/example/constructs/factorymethod/README.md +++ b/src/main/java/com/penapereira/example/constructs/factorymethod/README.md @@ -3,15 +3,20 @@ The factory method pattern defines an interface for creating an object but lets subclasses decide which class to instantiate. ## Class diagram + +![Class diagram](/assets/images/factorymethod.png) + ```plantuml @startuml abstract class GenericProduct { - +factoryMethod() + +factoryMethod() {abstract} +build() } -class ConcreteProductA extends GenericProduct -class ConcreteProductB extends GenericProduct -GenericProduct <|-- ConcreteProductA -GenericProduct <|-- ConcreteProductB +class ConcreteProductA extends GenericProduct { + +factoryMethod() +} +class ConcreteProductB extends GenericProduct { + +factoryMethod() +} @enduml ``` diff --git a/src/main/java/com/penapereira/example/constructs/observer/README.md b/src/main/java/com/penapereira/example/constructs/observer/README.md index dca7ecc..f653cc0 100644 --- a/src/main/java/com/penapereira/example/constructs/observer/README.md +++ b/src/main/java/com/penapereira/example/constructs/observer/README.md @@ -3,6 +3,9 @@ The observer pattern defines a one-to-many dependency so that when one object changes state, its dependents are notified automatically. ## Class diagram + +![Class diagram](/assets/images/observer.png) + ```plantuml @startuml interface ObservableInterface { @@ -17,7 +20,6 @@ class Observable extends ObservableAbstract { class Observer implements PropertyChangeListener { +propertyChange(e) } -ObservableAbstract <|-- Observable Observable --> Observer : notifies @enduml ``` diff --git a/src/main/java/com/penapereira/example/constructs/producerconsumer/README.md b/src/main/java/com/penapereira/example/constructs/producerconsumer/README.md new file mode 100644 index 0000000..711fba0 --- /dev/null +++ b/src/main/java/com/penapereira/example/constructs/producerconsumer/README.md @@ -0,0 +1,22 @@ +# Producer / Consumer + +The Producer/Consumer is a concurrency model where producer threads generate data and place it into a shared, thread-safe buffer (like a queue), while consumer threads retrieve and process that data. It helps decouple the creation and processing of data, allowing both to operate at different speeds. Synchronization mechanisms like locks or semaphores are used to ensure safe access to the buffer, preventing race conditions and deadlocks. This pattern is commonly used in logging systems, task queues, and real-time processing pipelines to improve scalability and responsiveness in multithreaded applications. + +In this example implementation a java `BlockingQueue` is used as the thread-safe buffer while a thread pool of 2 consumers and 1 producer is launched through the `Executors` factory. + +## Class diagram + +![Class diagram](/assets/images/producerconsumer.png) + +```plantuml +@startuml +class Producer implements Runnable +class Consumer implements Runnable +class BlockingQueue { + +put() + +take() +} +Producer --> BlockingQueue +Consumer --> BlockingQueue +@enduml +``` diff --git a/src/main/java/com/penapereira/example/constructs/singleton/README.md b/src/main/java/com/penapereira/example/constructs/singleton/README.md index f559bc5..7f99a5a 100644 --- a/src/main/java/com/penapereira/example/constructs/singleton/README.md +++ b/src/main/java/com/penapereira/example/constructs/singleton/README.md @@ -3,6 +3,9 @@ The singleton pattern ensures a class has only one instance while providing a global point of access to it. ## Class diagram + +![Class diagram](/assets/images/singleton.png) + ```plantuml @startuml class Singleton { diff --git a/src/main/java/com/penapereira/example/constructs/strategy/README.md b/src/main/java/com/penapereira/example/constructs/strategy/README.md index f80181c..01d1eb6 100644 --- a/src/main/java/com/penapereira/example/constructs/strategy/README.md +++ b/src/main/java/com/penapereira/example/constructs/strategy/README.md @@ -3,6 +3,9 @@ The strategy pattern defines a family of algorithms, encapsulates each one, and makes them interchangeable at runtime. ## Class diagram + +![Class diagram](/assets/images/strategy.png) + ```plantuml @startuml interface Strategy { @@ -15,8 +18,6 @@ class Context { +operation() +setStrategy(Strategy) } -Strategy <|.. StrategyImpl1 -Strategy <|.. StrategyImpl2 Context --> Strategy @enduml ``` diff --git a/src/main/java/com/penapereira/example/constructs/templatemethod/README.md b/src/main/java/com/penapereira/example/constructs/templatemethod/README.md index 9f77710..8eb2c4f 100644 --- a/src/main/java/com/penapereira/example/constructs/templatemethod/README.md +++ b/src/main/java/com/penapereira/example/constructs/templatemethod/README.md @@ -3,16 +3,23 @@ The template method pattern defines the skeleton of an algorithm in a base class and lets subclasses override specific steps. ## Class diagram + +![Class diagram](/assets/images/templatemethod.png) + ```plantuml @startuml abstract class AbstractClass { +templateMethod() + #stepOne() {abstract} + #stepTwo() {abstract} +} +class ConcreteClassA extends AbstractClass { + #stepOne() + #stepTwo() +} +class ConcreteClassB extends AbstractClass { #stepOne() #stepTwo() } -class ConcreteClassA extends AbstractClass -class ConcreteClassB extends AbstractClass -AbstractClass <|-- ConcreteClassA -AbstractClass <|-- ConcreteClassB @enduml ``` diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 44ac060..5fb1a0c 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -12,7 +12,7 @@ app.linkColorHover=#3366BB msg.windowTitle=Java Patterns and Constructs msg.greeting=Welcome to Java Patterns and Constructs -msg.info=You can check what is implemented in the project's home: +msg.info=You can check documentation, examples and diagrams at: msg.homeUrl=https://github.com/lpenap/java-patterns-and-constructs msg.examplesFound=Implemented examples found