From 4a2c2ef5bde4e19c95918807fa48d662affe6d02 Mon Sep 17 00:00:00 2001 From: John Webb Date: Tue, 29 Jul 2014 09:25:10 -0500 Subject: [PATCH 01/21] Testing embedding of svg in markdown --- Structural/Adapter/README.md | 5 +++++ Structural/Adapter/uml.svg | 1 + Structural/Adapter/uml.txt | 33 +++++++++++++++++++++++++++++++++ Structural/Bridge/uml.svg | 1 + Structural/Bridge/uml.txt | 35 +++++++++++++++++++++++++++++++++++ 5 files changed, 75 insertions(+) create mode 100644 Structural/Adapter/uml.svg create mode 100644 Structural/Adapter/uml.txt create mode 100644 Structural/Bridge/uml.svg create mode 100644 Structural/Bridge/uml.txt diff --git a/Structural/Adapter/README.md b/Structural/Adapter/README.md index 5d77709..3391617 100644 --- a/Structural/Adapter/README.md +++ b/Structural/Adapter/README.md @@ -8,3 +8,8 @@ To translate one interface for a class into a compatible interface. An adapter a * DB Client libraries adapter * using multiple different webservices and adapters normalize data so that the outcome is the same for all + +## UML Diagram + +Adapter UML Diagram +![Alt Adapter UML Diagram](uml.svg) \ No newline at end of file diff --git a/Structural/Adapter/uml.svg b/Structural/Adapter/uml.svg new file mode 100644 index 0000000..04259f1 --- /dev/null +++ b/Structural/Adapter/uml.svg @@ -0,0 +1 @@ +PaperBookInterfaceturnPage()open()EBookInterfacepressNext()pressStart()Bookopen()turnPage()KindlepressNext()pressStart()EBookAdaptereBook : EBookInterface__construct(ebook : EBookInterface)open()turnPage() \ No newline at end of file diff --git a/Structural/Adapter/uml.txt b/Structural/Adapter/uml.txt new file mode 100644 index 0000000..00aec7d --- /dev/null +++ b/Structural/Adapter/uml.txt @@ -0,0 +1,33 @@ +@startuml +interface PaperBookInterface { + +turnPage() + +open() +} + +interface EBookInterface { + +pressNext() + +pressStart() +} + +class Book { + +open() + +turnPage() +} + +class Kindle { + +pressNext() + +pressStart() +} + +class EBookAdapter { + #eBook : EBookInterface + +__construct(ebook : EBookInterface) + +open() + +turnPage() +} + +PaperBookInterface <|.. Book +PaperBookInterface <|.. EBookAdapter +EBookInterface <|.. Kindle +EBookAdapter o-- EBookInterface +@enduml \ No newline at end of file diff --git a/Structural/Bridge/uml.svg b/Structural/Bridge/uml.svg new file mode 100644 index 0000000..8525670 --- /dev/null +++ b/Structural/Bridge/uml.svg @@ -0,0 +1 @@ +Assemblework()Car__construct()manufacture()Motorcycle__construct()manufacture()Producework()Vehicleprotected workShop1protected workShop2__construct()manufacture()Workshopwork() \ No newline at end of file diff --git a/Structural/Bridge/uml.txt b/Structural/Bridge/uml.txt new file mode 100644 index 0000000..88015af --- /dev/null +++ b/Structural/Bridge/uml.txt @@ -0,0 +1,35 @@ +@startuml +class Assemble { + +work() +} + +class Car { + +__construct() + +manufacture() +} + +class Motorcycle { + +__construct() + +manufacture() +} + +class Produce { + +work() +} + +abstract class Vehicle { + protected workShop1 + protected workShop2 + +__construct() + +manufacture() +} + +interface Workshop { + +work() +} + +Workshop <|.. Assemble +Workshop <|.. Produce +Vehicle <|.. Motorcycle +Vehicle <|.. Car +@enduml \ No newline at end of file From f9ad294c5e61cdf1d9978dab303265873baba815 Mon Sep 17 00:00:00 2001 From: John Webb Date: Tue, 29 Jul 2014 09:26:44 -0500 Subject: [PATCH 02/21] Testing embedding of svg in markdown --- Structural/Adapter/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Structural/Adapter/README.md b/Structural/Adapter/README.md index 3391617..f6103c4 100644 --- a/Structural/Adapter/README.md +++ b/Structural/Adapter/README.md @@ -12,4 +12,4 @@ To translate one interface for a class into a compatible interface. An adapter a ## UML Diagram Adapter UML Diagram -![Alt Adapter UML Diagram](uml.svg) \ No newline at end of file +![Alt Adapter UML Diagram](https://rawgithub.com/jtwebb/DesignPatternsPHP/blob/master/Structural/Adapter/uml.svg) \ No newline at end of file From 3cd84ec8224fd9e96045bb14ec148c66182c8e83 Mon Sep 17 00:00:00 2001 From: John Webb Date: Tue, 29 Jul 2014 09:27:27 -0500 Subject: [PATCH 03/21] Testing embedding of svg in markdown --- Structural/Adapter/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Structural/Adapter/README.md b/Structural/Adapter/README.md index f6103c4..b55aa8d 100644 --- a/Structural/Adapter/README.md +++ b/Structural/Adapter/README.md @@ -12,4 +12,4 @@ To translate one interface for a class into a compatible interface. An adapter a ## UML Diagram Adapter UML Diagram -![Alt Adapter UML Diagram](https://rawgithub.com/jtwebb/DesignPatternsPHP/blob/master/Structural/Adapter/uml.svg) \ No newline at end of file +![Alt Adapter UML Diagram](https://rawgithub.com/jtwebb/DesignPatternsPHP/Structural/Adapter/uml.svg) \ No newline at end of file From a5e7fe226aa4af24987103150a0efb7a3ca16ddb Mon Sep 17 00:00:00 2001 From: John Webb Date: Tue, 29 Jul 2014 09:34:23 -0500 Subject: [PATCH 04/21] Testing embedding of png in markdown --- Structural/Adapter/README.md | 2 +- Structural/Adapter/uml.png | Bin 0 -> 20029 bytes Structural/Bridge/uml.png | Bin 0 -> 15972 bytes 3 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 Structural/Adapter/uml.png create mode 100644 Structural/Bridge/uml.png diff --git a/Structural/Adapter/README.md b/Structural/Adapter/README.md index b55aa8d..a58be28 100644 --- a/Structural/Adapter/README.md +++ b/Structural/Adapter/README.md @@ -12,4 +12,4 @@ To translate one interface for a class into a compatible interface. An adapter a ## UML Diagram Adapter UML Diagram -![Alt Adapter UML Diagram](https://rawgithub.com/jtwebb/DesignPatternsPHP/Structural/Adapter/uml.svg) \ No newline at end of file +![Alt Adapter UML Diagram](uml.png) \ No newline at end of file diff --git a/Structural/Adapter/uml.png b/Structural/Adapter/uml.png new file mode 100644 index 0000000000000000000000000000000000000000..4c90342aeb070e6153afe78af58a05d14221c544 GIT binary patch literal 20029 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 literal 0 HcmV?d00001 diff --git a/Structural/Bridge/uml.png b/Structural/Bridge/uml.png new file mode 100644 index 0000000000000000000000000000000000000000..d378dee62351633f376fb1b392748e924e316603 GIT binary patch literal 15972 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

JxtaI3)DWBvX#7uGIY3ng z=nLF)aZR_5z(+$V`hB3#1CZ2$hi7vP<*c- za&!#1^e_+kR2GWeX+tXvAo`>t&@gOfX2$=5E$NJy_$r!ORDYu>a`sJH2)^$0f69&0 zfQdYys&YcD%b95Y%U3m%6yp79+BZ3z@dy-P(u!2nyTWdjC}|rvsoX5g5_S*gx>3t` zesnZ$U<3Hx@$nlmpM+)*Y~+WGpC+EkIgkZZc;FU-P#G(A8AlxHb}4tOo&jx#5f6c|(_B!VsdC zuL283$s155mGd&Arukn@$YZeI{p~uSc&oE)jlx6?xcA8>3>1!HWepn&wR#HVYUUQx zmxl(l$A1_IhR5#$shUW_!r@KW3j}04O4I>d$Ol15Vez4GY~eZ|RIe)g;&3UgR+T>( zR_f?Zvfeh)$kU^~(e!Rqd50-m;!`ycuQMYDeRpTkZ3nHo0Cd&~_DLpOFUr~2{T$aV z6(ZIq?x*|Hx-$TIMMU2t!GO!K0p&7A`2>)?$;S6UR;H_q@^5B9jj`to`>HG-ymCZP zj}YP_*3mF!^I;&~fKa9LV*}?Z9kCYApk zAipyhkW+x;3&HF);Cb>^Goh)^tHi7mZz}NhbQ_2TjqucktOQWNg~{N28U>0DIu9nb zBZaDnOyNMvYR7d#U@%E5Vuc}{TgQr)%C^-Sc8P-f*q)xoxiY_tAlZ#rI$<^zDAMH@&IxZhD%W|D7WY;2Q&vRIjQ{{`2* zMamQyK&3fQeE<^qu8)>BHokYhsrxzScIjU?{e}cOz1ogGRM1ZSc2DTLDGil_9v(gt z!NB!ASXm11_nXL(qz4Gs^xD<%@iUwnyGNwhxYjEomVBAgBBn?zy20GncmgK zNx3`o-Cns11jYUxjf8rplXbKg+~~XZaU1g6A1w=eytfs~S4u=n;d(k1APx4p5tR9F zEHyR*I8>x^+Fv7VBu=x|ey=!p9h0e?t}oZ}iU&Z9DW`Rhs<5ECSrc*PY_~ zkjpw-TN+6TpYy`c8lQCe)mlzW0@|`pW(UvU4I5gtEE>lLt8K*bp_zRo?1il@!tvO` z_6Y@1!ylYqq<3WU*&YtX-z}|av%W|NqDSHx^<)9Mew~q24?KwZec$&9m4320Mepz6}x2E-a`kE~?O2&lKVghl0Pp#wqks~)g{R8bmu-gxmPh&gz7~({S zEp7lEyBq%DNOn7^j}px;5b%fjIQL}vI{#B)oi3C{j(3BS1zoZwt-tC38f3*yO$4Vi zv&I-Ze4?|ERqb|c=YV6`cQJ*5OXq(016PtqZd%GIpVf)3=s*gWu4;i}r6!=OyDFX- zh$pEHpQ|?S2nudub9ZI;u`t!yc{l+-uTh!P?FRJo*?t+z!MU2(p<|x>2jos-4S*^_ zms*5;y1?0DI@wne$WVc+3CqiBfTVupx93OlsgAaqnwrO}PYWuvnO#pyDvZcxD^0Y_ z%x*GV`A_sd&_#G)9RY5E)c``)mNN!+onaKhcwZ}SHD(kBP<)nJ`ScUGfVuN0V3fFw}JN39>Dd!bDUA!zEJ}mR#nX2H3;;rvDJ27Zu3?4MC#kO zDVg>uqsf9lEu^QVO{<*2N_EOcd=H597@nDdmB|@4E}pgVC-q^4(x07}OIH{QXli{5 zMUp)%b|CDZ87>zF?w8Y>J1=8qvwVLYl~xHXKqa`~={bi<3w`tnIXSA%WG27Dt z5_fgrL>YiPy-ykD7zi+SHUG|NPa)Mw=|tlM&d$z8l3?kUADQ(@2&7aWr^}N<_s#*C zmo_27pgW!I8an*M3cXg|-`~IG%)}k161D6J!23hazfl6}tE~~xI8QTC`B%kP zeNjK`+3s+qz|R=E3HZJML=OFZBo|sM({9iAQAP|lb>(nVxtW(m0N4meO6PN11PRpr v|M(2t5B3M-sdN}mfXkdgbQe>|N6$^-G@mur{spd$KT?uYm#vh3AN0Qf+g4LN literal 0 HcmV?d00001 From 9780f47babeaf2ef8822d75b2d6cf62198bc45ae Mon Sep 17 00:00:00 2001 From: John Webb Date: Tue, 29 Jul 2014 09:35:22 -0500 Subject: [PATCH 05/21] Added Bridge UML --- Structural/Adapter/README.md | 1 - Structural/Bridge/README.md | 3 +++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Structural/Adapter/README.md b/Structural/Adapter/README.md index a58be28..e168dda 100644 --- a/Structural/Adapter/README.md +++ b/Structural/Adapter/README.md @@ -11,5 +11,4 @@ To translate one interface for a class into a compatible interface. An adapter a ## UML Diagram -Adapter UML Diagram ![Alt Adapter UML Diagram](uml.png) \ No newline at end of file diff --git a/Structural/Bridge/README.md b/Structural/Bridge/README.md index 6ddc67e..a318cb6 100644 --- a/Structural/Bridge/README.md +++ b/Structural/Bridge/README.md @@ -7,3 +7,6 @@ independently. (http://en.wikipedia.org/wiki/Bridge_pattern) * [Symfony DoctrineBridge](https://github.com/symfony/DoctrineBridge) +## UML Diagram + +![Alt Bridge UML Diagram](uml.png) \ No newline at end of file From 287e242e831dee38f674489c52803924f6b1e8c1 Mon Sep 17 00:00:00 2001 From: John Webb Date: Tue, 29 Jul 2014 09:44:37 -0500 Subject: [PATCH 06/21] Added Composite UML --- Structural/Adapter/README.md | 2 +- Structural/Adapter/{ => uml}/uml.png | Bin Structural/Adapter/{ => uml}/uml.svg | 0 Structural/Adapter/{ => uml}/uml.txt | 0 Structural/Bridge/README.md | 2 +- Structural/Bridge/{ => uml}/uml.png | Bin Structural/Bridge/{ => uml}/uml.svg | 0 Structural/Bridge/{ => uml}/uml.txt | 0 Structural/Composite/README.md | 5 ++++- Structural/Composite/uml/uml.png | Bin 0 -> 12315 bytes Structural/Composite/uml/uml.svg | 1 + Structural/Composite/uml/uml.txt | 23 +++++++++++++++++++++++ 12 files changed, 30 insertions(+), 3 deletions(-) rename Structural/Adapter/{ => uml}/uml.png (100%) rename Structural/Adapter/{ => uml}/uml.svg (100%) rename Structural/Adapter/{ => uml}/uml.txt (100%) rename Structural/Bridge/{ => uml}/uml.png (100%) rename Structural/Bridge/{ => uml}/uml.svg (100%) rename Structural/Bridge/{ => uml}/uml.txt (100%) create mode 100644 Structural/Composite/uml/uml.png create mode 100644 Structural/Composite/uml/uml.svg create mode 100644 Structural/Composite/uml/uml.txt diff --git a/Structural/Adapter/README.md b/Structural/Adapter/README.md index e168dda..d2390df 100644 --- a/Structural/Adapter/README.md +++ b/Structural/Adapter/README.md @@ -11,4 +11,4 @@ To translate one interface for a class into a compatible interface. An adapter a ## UML Diagram -![Alt Adapter UML Diagram](uml.png) \ No newline at end of file +![Alt Adapter UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Structural/Adapter/uml.png b/Structural/Adapter/uml/uml.png similarity index 100% rename from Structural/Adapter/uml.png rename to Structural/Adapter/uml/uml.png diff --git a/Structural/Adapter/uml.svg b/Structural/Adapter/uml/uml.svg similarity index 100% rename from Structural/Adapter/uml.svg rename to Structural/Adapter/uml/uml.svg diff --git a/Structural/Adapter/uml.txt b/Structural/Adapter/uml/uml.txt similarity index 100% rename from Structural/Adapter/uml.txt rename to Structural/Adapter/uml/uml.txt diff --git a/Structural/Bridge/README.md b/Structural/Bridge/README.md index a318cb6..b4bf4fd 100644 --- a/Structural/Bridge/README.md +++ b/Structural/Bridge/README.md @@ -9,4 +9,4 @@ independently. (http://en.wikipedia.org/wiki/Bridge_pattern) ## UML Diagram -![Alt Bridge UML Diagram](uml.png) \ No newline at end of file +![Alt Bridge UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Structural/Bridge/uml.png b/Structural/Bridge/uml/uml.png similarity index 100% rename from Structural/Bridge/uml.png rename to Structural/Bridge/uml/uml.png diff --git a/Structural/Bridge/uml.svg b/Structural/Bridge/uml/uml.svg similarity index 100% rename from Structural/Bridge/uml.svg rename to Structural/Bridge/uml/uml.svg diff --git a/Structural/Bridge/uml.txt b/Structural/Bridge/uml/uml.txt similarity index 100% rename from Structural/Bridge/uml.txt rename to Structural/Bridge/uml/uml.txt diff --git a/Structural/Composite/README.md b/Structural/Composite/README.md index ae22908..f0ca01c 100755 --- a/Structural/Composite/README.md +++ b/Structural/Composite/README.md @@ -2,7 +2,7 @@ # Purpose -To treat a group of objects the same way as a single instance of the object. +To treat a group of objects the same way as a single instance of the object. # Examples @@ -10,3 +10,6 @@ To treat a group of objects the same way as a single instance of the object. subsequently runs through all its child elements and calls `render()` on them * `Zend_Config`: a tree of configuration options, each one is a `Zend_Config` object itself +## UML Diagram + +![Alt Composite UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Structural/Composite/uml/uml.png b/Structural/Composite/uml/uml.png new file mode 100644 index 0000000000000000000000000000000000000000..e3534467361e12a0c4eb00b49d290ccd748b166f GIT binary patch literal 12315 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 UBC?0{{udd^_iszy7=8Kw0N&l%IsgCw literal 0 HcmV?d00001 diff --git a/Structural/Composite/uml/uml.svg b/Structural/Composite/uml/uml.svg new file mode 100644 index 0000000..6c1cb5c --- /dev/null +++ b/Structural/Composite/uml/uml.svg @@ -0,0 +1 @@ +Formprotected elementsrender($indent = 0)addElement(FormElement $element)FormElementrender($indent = 0)InputElementrender($indent = 0)TextElementrender($indent = 0) \ No newline at end of file diff --git a/Structural/Composite/uml/uml.txt b/Structural/Composite/uml/uml.txt new file mode 100644 index 0000000..598a697 --- /dev/null +++ b/Structural/Composite/uml/uml.txt @@ -0,0 +1,23 @@ +@startuml +class Form { + protected elements + +render($indent = 0) + +addElement(FormElement $element) +} + +abstract class FormElement { + +render($indent = 0) +} + +class InputElement { + +render($indent = 0) +} + +class TextElement { + +render($indent = 0) +} + +FormElement <|.. TextElement +FormElement <|.. InputElement +FormElement <|.. Form +@enduml \ No newline at end of file From 86a2171e899b289f0775dfe533264c6731bdc199 Mon Sep 17 00:00:00 2001 From: John Webb Date: Tue, 29 Jul 2014 09:51:18 -0500 Subject: [PATCH 07/21] Added DataMapper UML --- Structural/DataMapper/README.md | 4 ++++ Structural/DataMapper/uml/uml.png | Bin 0 -> 4879 bytes Structural/DataMapper/uml/uml.svg | 1 + Structural/DataMapper/uml/uml.txt | 26 ++++++++++++++++++++++++++ 4 files changed, 31 insertions(+) create mode 100644 Structural/DataMapper/uml/uml.png create mode 100644 Structural/DataMapper/uml/uml.svg create mode 100644 Structural/DataMapper/uml/uml.txt diff --git a/Structural/DataMapper/README.md b/Structural/DataMapper/README.md index 61245de..70efe20 100644 --- a/Structural/DataMapper/README.md +++ b/Structural/DataMapper/README.md @@ -16,3 +16,7 @@ The key point of this pattern is, unlike Active Record pattern, the data model f ## Examples * DB Object Relational Mapper (ORM) : Doctrine2 uses DAO named as "EntityRepository" + +## UML Diagram + +![Alt DataMapper UML Diagram](uml/uml.png) diff --git a/Structural/DataMapper/uml/uml.png b/Structural/DataMapper/uml/uml.png new file mode 100644 index 0000000000000000000000000000000000000000..748156f5b0cb4b90a3c8364cef62068f198a2a5c GIT binary patch literal 4879 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... (skipping 20 lines) ...+mapObject(array $row)}UserSyntax Error? \ No newline at end of file diff --git a/Structural/DataMapper/uml/uml.txt b/Structural/DataMapper/uml/uml.txt new file mode 100644 index 0000000..6fb4c02 --- /dev/null +++ b/Structural/DataMapper/uml/uml.txt @@ -0,0 +1,26 @@ +@startuml +class User { + protected $userId + protected $username + protected $email + +__construct($id = null, $username = null, $email = null) + +getUserId() + +setUserID($userId) + +getUsername() + +setUsername($username) + +getEmail() + +setEmail($email) +} + +class UserMapper { + protected $adapter + +__construct(DBAL $dbLayer) + +save(User $user) + +findById($id) + +findAll() + +mapObject(array $row) +} + +User +UserMapper +@enduml \ No newline at end of file From 96cb9dc3597ff39e0671cbdce660047c597a6f41 Mon Sep 17 00:00:00 2001 From: John Webb Date: Tue, 29 Jul 2014 09:55:32 -0500 Subject: [PATCH 08/21] Added DataMapper UML --- Structural/DataMapper/uml/uml.png | Bin 4879 -> 13221 bytes Structural/DataMapper/uml/uml.svg | 2 +- Structural/DataMapper/uml/uml.txt | 2 -- 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/Structural/DataMapper/uml/uml.png b/Structural/DataMapper/uml/uml.png index 748156f5b0cb4b90a3c8364cef62068f198a2a5c..dedbddd37f7f219e30f38b1d2422df21f1ce978b 100644 GIT binary patch literal 13221 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 diff --git a/Structural/DataMapper/uml/uml.svg b/Structural/DataMapper/uml/uml.svg index dd55c94..a0dfe25 100644 --- a/Structural/DataMapper/uml/uml.svg +++ b/Structural/DataMapper/uml/uml.svg @@ -1 +1 @@ -... (skipping 20 lines) ...+mapObject(array $row)}UserSyntax Error? \ No newline at end of file +Userprotected $userIdprotected $usernameprotected $email__construct($id = null, $username = null, $email = null)getUserId()setUserID($userId)getUsername()setUsername($username)getEmail()setEmail($email)UserMapperprotected $adapter__construct(DBAL $dbLayer)save(User $user)findById($id)findAll()mapObject(array $row) \ No newline at end of file diff --git a/Structural/DataMapper/uml/uml.txt b/Structural/DataMapper/uml/uml.txt index 6fb4c02..b9d5239 100644 --- a/Structural/DataMapper/uml/uml.txt +++ b/Structural/DataMapper/uml/uml.txt @@ -21,6 +21,4 @@ class UserMapper { +mapObject(array $row) } -User -UserMapper @enduml \ No newline at end of file From 2d6cae6c13dcc057904668c31c2a6b8c871f76b9 Mon Sep 17 00:00:00 2001 From: John Webb Date: Tue, 29 Jul 2014 09:59:06 -0500 Subject: [PATCH 09/21] Removed DataMapper UML --- Structural/DataMapper/uml/uml.png | Bin 13221 -> 0 bytes Structural/DataMapper/uml/uml.svg | 1 - 2 files changed, 1 deletion(-) delete mode 100644 Structural/DataMapper/uml/uml.png delete mode 100644 Structural/DataMapper/uml/uml.svg diff --git a/Structural/DataMapper/uml/uml.png b/Structural/DataMapper/uml/uml.png deleted file mode 100644 index dedbddd37f7f219e30f38b1d2422df21f1ce978b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13221 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 $userIdprotected $usernameprotected $email__construct($id = null, $username = null, $email = null)getUserId()setUserID($userId)getUsername()setUsername($username)getEmail()setEmail($email)UserMapperprotected $adapter__construct(DBAL $dbLayer)save(User $user)findById($id)findAll()mapObject(array $row) \ No newline at end of file From 729d09339159d00a0400cc59f39ef3ccb6504539 Mon Sep 17 00:00:00 2001 From: John Webb Date: Tue, 29 Jul 2014 10:00:01 -0500 Subject: [PATCH 10/21] Added DataMapper UML --- Structural/DataMapper/uml/uml.png | Bin 0 -> 13221 bytes Structural/DataMapper/uml/uml.svg | 1 + 2 files changed, 1 insertion(+) create mode 100644 Structural/DataMapper/uml/uml.png create mode 100644 Structural/DataMapper/uml/uml.svg diff --git a/Structural/DataMapper/uml/uml.png b/Structural/DataMapper/uml/uml.png new file mode 100644 index 0000000000000000000000000000000000000000..dedbddd37f7f219e30f38b1d2422df21f1ce978b GIT binary patch literal 13221 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 $userIdprotected $usernameprotected $email__construct($id = null, $username = null, $email = null)getUserId()setUserID($userId)getUsername()setUsername($username)getEmail()setEmail($email)UserMapperprotected $adapter__construct(DBAL $dbLayer)save(User $user)findById($id)findAll()mapObject(array $row) \ No newline at end of file From 3a7e38f91de9ad61805a5ee04470f7c4b0aa48a6 Mon Sep 17 00:00:00 2001 From: John Webb Date: Tue, 29 Jul 2014 10:18:51 -0500 Subject: [PATCH 11/21] Added Decorator UML --- Structural/DataMapper/uml/uml.png | Bin 13221 -> 12696 bytes Structural/DataMapper/uml/uml.svg | 2 +- Structural/DataMapper/uml/uml.txt | 1 + Structural/Decorator/README.md | 4 ++++ Structural/Decorator/uml/uml.png | Bin 0 -> 16897 bytes Structural/Decorator/uml/uml.svg | 1 + Structural/Decorator/uml/uml.txt | 29 +++++++++++++++++++++++++++++ 7 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 Structural/Decorator/uml/uml.png create mode 100644 Structural/Decorator/uml/uml.svg create mode 100644 Structural/Decorator/uml/uml.txt diff --git a/Structural/DataMapper/uml/uml.png b/Structural/DataMapper/uml/uml.png index dedbddd37f7f219e30f38b1d2422df21f1ce978b..31cb39990ad708583f72fa77869989ba3774c9f2 100644 GIT binary patch literal 12696 zcmZX5bzGEP*Dg|$(jC%BHw-8sEj37&Fmy-_lF|Z_64Eh%zaAv5=6Ea1~$4Y9JvY3j%+4U?2lOAFpv* z0KbG><@8+5ouKdSEv;OU6f7Mr-f+LPC1v1;H+&87v)QqolEh0pIugxiPSH#K@db}oHeG%#aM)UE&{~8~z zHTFsaSw8!a=#tC@HWG=f${VTdh4>}MHk|*A!Itt<3(X-zv{Twv$Y#a%TkX}ST8`fv z^y3>DT&n)KO?mkoH|kf#o7tH-C)j%=f2qznRD1lr>c}}s2-7GrE1;sxC@%nW$YSt* zjW%oZF1}oJe}kQhXNUKv8lM2I zEy0(RRAbP6ahJLdl+r zBGiW$X4)M$abjZ__0SH_u*Kl5?rklh*GNb_xr(wXC!-9On_v7o4b4PYNE_`pf%=nsq~S;ys#!Tu?oE&J4#~)X2pg0Q!hmfCPwfm#;jbZG?T;gX1(r~yV!7J3 zmeNYaGRjIycKZ@J*4NiP_UEL|Ly7(l)0g!AgKKMCV=_^&$!J#1*iP4L2 zbhXX9*GQ~A9b&Z(z70PEs;6Z5t%io@nw%lFQ%%FiXBqvyDyk|mKF{~+O|Kgt8_(2J zJjPmq&Q|bRU7ziBuu@8Hxi;ASEX%%@c?6@2-)cpSH6H#PGYGb_H@L=lh1I9>N$nVy zgO+b^nI|7)6F_7%VXIz&3QtH#I5}~pd|_1o4sHG^u!8t z&Dtd-o@ZC{cywHx`w~WdfjpG zuP}O$JvBu;aama!WI`&g!LZCuvVFF}gf0aONy(f>6Sx-%H}`jmJ5R>@)63ttcr>%Y zjCg=?A%SCaBr?QA%r|@p-pMx!r}bzdyiSc81QUA@3SKTpg>0Vz`B6dHz>92&w{zbV zE>-;Hz&#@psBkabZ3?>a-|tfk!>vsZ!P_F zi^Bzv16phB$2gv*2Mc&tCz!O)-I4Af5B9vYMm%eX=+8>6K}I{>d1$e!^$}??Kr3hc27yJU| zdu*t*)FT)S1w0v;-?Jr@C(>Hz*M1eUeDXfi8JdIV=V$D)@#*?!v#b4O#&hQCjmu-( zWS-x$a;n~!>-5xMOw7omEM(Ygz#^>!$BFnE;bH#GE=uC5#;2d-i;IEC^xKvLXUl(FEjYA&=p^aat&Ywz(_VfWixTX&sgTmD`w;t#v7vis?GwSX7~XUys& zu2vWQykDKTwO~TMpgU#9D&Bb7I(UxvI3Uq466tpZf(AUd_U^axj;O53)^A8l{YCPb zP7yI?H^_#H%dUreU&jj3b54zY-9S;nP1pNGS1LhFA|krd>T;cIA2(Xcz;C;22km{xy%;dycSzSLMex%B&tK)r zpwe%zbPhoLMA_bW9&ap%;&npq@2=HmmN1cFBi=93hhMhznx49CCzT`x<@v3tuywna zD;ZVg^D5rdY^^ojI465fc*= zySw&cw>CGjL98vkqZcPL!TPTGdy9Xv36mqSUyKODx>V?h*0i8kVs6UD{Zjf4 z?E;Xj`)AjImX9<4b&gf@hr6WNo_!990?_U@axs)}H9^0zE!UrAMkp}qyYW;fkgA6TV2C_XSnfERD?rx@yldq zwjF|VwKEqK7@!&Fn}yT1d20yd^|Z6aERoT46}Fki)VE_uCO_~~Lds#n210tXSM*2!3~e1Zg{!$5`&oF+W)=1~!| z`X4WPpPIjaZqIRa(aW=2Y!nWXL1M)SL}DG6TpV%|edc{EMv!XNJ+Q8)!LQb<@@e=j zAO3L59ws>XXV=&U9T402j>#21jsud4epoj9)$1~YnJ+*>g1LN5^Fmke^2Y$SE$(aRp6}) zX?U#6OS9a3iqWczHu3yaerSZx^_(6U}EL5#5SxwJ3Bh+ z8Tf?oLxi=4hiOz<;R?^ISgZxdNJMNvXTNi7WZe%mJLlF(1vU6^${E`HscF)TQgFR>5OGVI=MMFx;pK zMnodCx1JmdWoKgIB$b%DUWq($-!pKSZ&<5c9KzQM)1U^wp{LIfw%6;aeHlc1c3E0$ zOe579H`ms$+A2;MDL3q9)~;PU$<7{q$%1<{8}j{a^lnzL zDeu%<6x2sxoljHg*R4LJr6P8h)J?p5DoM_xUgb?|WpR{}W6~#^GflUPw7T+mkLcX{d?7;ZK$thLVPaxa)?FSC}i#%-Bs!qrb!|VnA*zxh|WgBoQSU^u-Tx|L-Wy_=^ zqxcp!@6Z1jm%L9^Q_jgLP|sSZaZsl89xE5L$sguv9Ep~E&%r*c5)3aNQ7>4vf!;PY zdK#pr@wsjDvXM`fLqK*@F0r!Fzebe0=4~tD7$hGfr%~Q}ug1%pGl|{T^5^vNSFv}x$vtpdc=4uqN^?LssGWt;Tqp{xq!gFpIQLA#>m)Y>cc-Ev zk{CR8T2;A{>A$c@M-G_NNAX3?4@9^VgoLD;MuxTApG%diJ*dHyzmTK?;@2;OQ=u8e zU^FzU&2|8RHZ^5xn5lcHjhM+q0au1fm@}A*)vV$J2Ck&ho3|OD3L{Y8(TVF~l{K?> zW7o6%$~)i!`)(JeX`%TZ0S+%I@PoY5`M$3_)a!g+SH$s62kBJtInHSG#YCy0H#!`^ z&by@>1*%RlR3fiyxS2r|_J6&`+zgO+tbM0Wm=u0-e0rJsOXMy!%bS~3K!{KL&)$H0 zdzE4Em>7tI8VfvL5ViTU9Q*Wij#p;Fmnfc6@GBKH^{d?2u`wh2nZkzZmIXGu~k;R6!V3RLSz^SFI#$R1k!$O_|C|o)DPLhqBlru%Po$_tF zT{*6GE;DI@6vTGCi*7%Q^w_^S`k7F&?6QDRd$;bcBjkV60+;LbU3haP-70AcKr z!Lls2WfZ7V56O@|5f~rvxduzF?;T3a)gG{T@>ECLh4x(r5%8QehzPY8tE+s2-|r(` zi{khL66nr6qb(}oE;qtm)fJ#@md0NS_5jBYB3uHGIBwH25G>DnvXY2NS-!aej#uSZ zHUbPb?rToWY$}ooMJhV)2;cksndrp}$|#C)NFgcUM(JQ5c>RPHE)xB4argXI<&QQ7 z4^9pi6S;0yB3-Yzg~G!+b#r}LspS>a${~wF0s=`j@`KzQzc>uB0TJ&1g9Y%r%DbqV z|3Jd|aKOQ3R)ceZscC6d>tnFiP`270E@euC9$p2b!LOT>$nAM)y;gC8kL;K~LGqzF z^Sk4$DH0<~Tj8ulRjl#s(6~~xK-gpOqCY}ha_IM!WG#ECNn(KEw%{h|*^dJW(`GBH zu4w8RJb09NYj1DV!yJ#yiggCV3uNoQ(B1d+U~d022P#;$Ac!gx;ps_wtF;oZjqC^{ z6rLrIS9J^ZI#6jyNr}EPNA`yq(Djrpcl30mFx}Yq1{juQ%XlXyFxh_4)PDP+!UceKWrjr;ASq|(OdJ6oUN zOJv6=&l2l411Ngi1xX;CH;rhj(2~x&qW55$P;hxKcH1Eb z3t>R{$DgxSq0eD0zKvWk^w^#dW`9e0O-(Q=!tH20Y4>3l34G>w)2Ai@`v~~*DI4*J zchx&+dQyO#aHiS+=NCHvv5s)ll5O@WGuT(wdoXH5d05 z@+-C9w6;XNp$F813ELH6*P~qL_(3pZVlv82WuG~(KloS2*CFv4@@W0?mwk@1!sL1l z{o8|8&x`fRftzJ<4z29|YGRvEJ|?df_~GM^lCc*E8iRkvg$BkWWYLs!eJn+CXmL2_ zEE6|oR$VwX+qVA9>djIE{Mi>E9o@qKpOKSrM*T^g57XfN=9;XX_IvklB4EMuck-EM zkS+Oyzz_L9N)}%HrWGwURJA657~F5C`|GE<`12^Nq`$INr;TwJi{NFi;iE2R#Jeqs ziiX2XlL5s9?oxrllV2vzC~g_SAiC5xgJ63pVH+Q>l*fbmQM0Haq#YtdVK_{+(< zKn3%D3!dwR=Hz4R8s(gH(e?4j9T+O@p(o^@6;=bAs zVg4YT=obKX0Ir5oprBcUOW3V0Av&m!wwLyiyBGOmc+oE79svOvG!XU#>~~}iw;E*S z=Of6Pb@c45t5KrawRAY#D#HF>p4RfskGcu7^ZL2o&*@Ct_itI$42yM2DUZo|hhq*F z5D1MuAMA-zs5b{9P(6?1dpKg$o&QYn-Tb5XQ)YIJKz4WGZM?3S{PNr(>6nA}+C4h+O)ls^Fo zPk4~#-g*!yHRUZ2o7FfP3#~)r(vWj4R`+PmudyCNecWt?R4*_lJ_r+JnhgxQbWk_4Lf-(1#s0d z8I{PpII(GtnWf|6XfNCa`Y|Xgy(!^N83 zc8#h@W4g0eGnvm=t-1U~;bR6{Q+eI5Be|NZ3zhEfm5l1`AFOO5Cdf5rA|_yzku~@H z^Ii5pHzl<4quwHr;*21koC=@B4^jJFjlOGu(~nMemm2xsp5~>e@66S&eoW67xP*9OO13;0)~d0ue%ML94Z@9e#ju3tcEUSb!mc|HqQd7TlK14SQutyF`*eHq*4Q{o zMq12mpZe8LVMA3L9-b>TfZxnLl1dkr05JM-vBA8g|3YK3`(A{pof6{cqxRS9ZC&;y zrD>wx8vR+K(LxpLAgEnsX`-X*898P3gJt&KLkc;POFO5YB=qZt;MyMNQ* zeY-Pv|Kr-3Lk(?0^$drv_^i7joZF#D21 z`y1X?Ha502Qup0y7D-8C+y0z7AkTdKty?+o;sT8mYr;gO+;&w?6^C`!KYP12yZ4%`TS#q!!cphr!rX&LV#rBDei1W zZYbgFC0pybr(2rVo+gzW1;8oWAi=|x>~8?9!DUK{dRmZ?!zVuP^LwK#_cKMYdV{6< z+}2d7ve)T$Pc+IN@u-&aUr9_Ms8V5x{Lf*HKcfjlGzafNeRWXw=MkqQkLX^!u-F(- zx4*1$P+8qS^RS89CgOsoIp?ogH3u83HY)2HP3{=R&uvOBP6 zO@`M1MbUi4o+Y2Z+gX&9Vm#gzDJB7v?egGEl4t&g3ZzT%?Y&yz&)kW3I8c$I1Z+mS zj1`W$y|77D7|cckGHdXuse5E^!lEHc;jFaV*4+60Kar(8fDX8=?w3VW+o6y7k21LD`hVDS$&kF6GVjPT)_nM z!2}R9OQ`1dZ$(^5@~#WPa+C1$v{CtHmxt3NRRWu{`THLfYK9)+GZ}ypPkle4 zQ;>06;80JilJ`n8L0w$(=`j|O)uUur$%85iDv#Q$H39t}0Die5NtbE1(teIDoOCEl zGF-QacHHid=cp1@vqaY69|1m@%y~h@t+^bUFRO(3BW7Kn)Ne3Lo(;&5ujC-JGIB0~ zU=}F4vQ6(RKQIHibSk3(&+n%{fH4(QmEVMSAVoP2)ij+~1|UpbO349!sBQhGc4}*# zrdZyDOT_-Ewwb=_U)N~)M#UK-1e?EZ)T}G{2m?}*Uz8&5xkq$+%Mm11n@=^B^6IC5UM7}x}=LY~tp2>~GNYa|>kWGo9sM_BcXjO~Sefb!MRcT5~ z4Hl#=(yv1I*Jw0tZ__oVC=!`Mj&4;HhRP8u=Mw8ZuOv4Ejb2gPeFMerucvjO%yA_PK$ zahkNeovXIke%HfER@H917w+aSB(J#NPP~YZL^5Ub8)@{oVG&(B171 zbhOKO7BG%^IZ;$q!0N%nDg4J$vhBWkfR6GA#?et+3a`s_@o{d_Do~ihy|ZvO_(}#1=vf>7OPC&=o~StHAh% zgSXmivHILKala?3tY6E@E{=@s`(C>@LFwCt|Gg8HNk_$k-m(_2#2n{d-oX<&7EO-4 z$8d-;1JcN?$G{uhx+U$oGc;dO{p(BA#xnoMy_PLdoY)5V3h1IO3t*+c_6zK+V&S2IXf7 z>83ssu3WjRI)r_M;e#ooAaXN|l_7Z#^!9i`Z7AMBMtqfyaJy{E-%WfDZYoxS^5>9t z_rI$U0HsczYTE`{EHm|OMAnWL8{D+IkiL@!+4A`%TE+BG#*M85l!Y2_@Ac~9?L)$O zZ99Tf+23d^Y9nCkCC+~}0i>04W#vjlOxUdI!jQ%&G1!tQwkSQUn!H)5O2GnGaSQA1 z-1OdFE&Py2NkAnSy@X{zYdP-JD3P+0Qaw_}s(w1+sJL~L7`v{CT{V`I-%kjbrQx3Q zg*83vr>Sw98}>n30*W|x@o)mGlvlWVs+olh*MN@yeAoC6vPgHO41wEaKt{mtdEss2t=yi;s! z8ffwPs91m1LF>l)6woVBIkEnN2`EV`#e0c{>qt1s!*`NHEtd1sGN0YQvbHGdxNeOO zt`wI);o%r>Ajr&9KNZAVtyGO=HuD9Q-tWp}9~Hx4N5x&6#4bPnZWR~~Y}I(upER=y ze3e<8A?bklICLCOdU0Qp7@LuIzTr!*>q`53znB4n45-XT z1;n@76WJEWGOySu)`6+oQHJ$~5DmXAFM<1m8rVX1dr_Z+z&t6CA5i z#ix~3KT**xuP@(|00c{-WxOCcY*Pj(NN#eNcR!g1IJIj{pBv<}zL(;IGUC5vr`avS zkpPBgMjTe%NKE%J*mbs+2YiAQB@rCr4iqZ8Zi`9a?udwQM}G)+Q02dIm5h*Iv` z&o|`hmPhZ3K90&KuhklRfn$}9Vfc}g;Gs0|BQ!n<%1#2}dt4b8m)G(Va`hzv7(QFW zwLK`p>JEUl9e|33g_uEn6a6-V#ZC=OlnO}{Ens>*g3EGZS+sY)VnDGv_o77<1;Z({}Q-H1h z_zA^(;@}~_0}_1{!8gQi|B@TF^Vx(NqXL%etZenwHqi8VpqS_+;u!~N) zqh=|u^Fj!~#<#@}W#tsU2+5Z3Dd)xZCNVYz)-?uRS4B@~kPWI2LC$907Hg;giM*?$ zTrRdF@OPm)8}TXc2?N?G_n@?+V)yVkK?}KLE;ogoY3D>Pn_gjHV}q@V{Rq6MFe)Ha zWuM$$=X2-`tcVbk9{VNY?h*{14Cv%)9{$c!ll@D9C9>z25@hxDofQpVeF~rkm6tC{0ZzMy7X*q8 zfoxYvFg~2bE(RFLqJn3{Uq<7w0yhgNC!ru4ge_Sp9_VhZ+RmhAUcNqvfMdbqID0P6M{!hF*U9u;(1O~CeEUdkBKE$``XA#7rJOZCt-cZtr-%gd9 zx8c2d;`|I`J8(3$rP0#4aDTq{D-})&3efwHF<3=G6cOGYeSHzfhc+Gb ztbYeE!fagM9htE_FMg=)o+R=6Z z!ejs9SFN(m$L-0dzgwR$fapb0q3@`*-8Za$5d?mwW99SnJzR2)XTb&9OH$|N=W}x5 z{f=0@^a1f7!cY*1`lf9XE5{m3dUDK4G|**d3`sQ1>`A#`{Sk+61pokjG`-LLMjGD} zB|T!8CyoQk$?so&ql+Q1=(|(dvLOFIhLMnUKPE=X1pm@{rEl}(!(B7S{XjG-j zil+Is_FIzSwe42f+sPtlzt{pW%~X{&eyFB~Mm5xTER4W++7R8AQeJ&@1E?ilUU*hJ z?)e@pShoq1tH*`g|B?-7XoJY@#Lzr98O}`HjXXNSmaTs}hC{lA4s=b)8s-+9?azmI zY6B(4)!i8_Qk%1zah0@!T{m262+c`2{f zHp=WqzHsAm);Rf>>kD`+3y+UUe34`;9e%pgTVU$xEt2mC(^H!L^M+qPAC`L z95J=n;HFq^OfzGSH@ln2QJ?czAm>3G+gBdDdW62WK%H)!FOT^lzw0tQF+JIA7J937 ze{(5FNk@p-U*!3}LKR-7eQtvmiC(WqLA1x162{ms%*FnxuHnNlta3nsKrsuDW|>K~ zedKQy?W@M}6bL4($WrM*#2kU)Pg1HTTcQa+(}k>$BZYOoRLq*h7SNNW%A;8Z*U75> zEy>-i#dkQ)&uYpEb{RB!D%smJIryw}@b<%#k-#f9)GF;bQeHp!{j@R9)YXbjzSX<3 zT?4$+WRW(JJd$cEA-7Knt3g(~Vp@pv$)On%8W_mxS${}cQ5tF7P{ zbuUHE0TTj;Z*`ywhhIrI+8(6_Y6N>Whq?d;o#nae`^@+Yuufrz*)V`!Oj6^ikOUpo z1w0Thwo*Yl8fGicj6Lj%NS@7<5=V_+UF|ZqQr7(z2%2F&s_DYSL(9c+tqgN?4j=UT(KV`%OxvZW z|Io`ApBx?0p^jaIN25fQc}7Gsk1OxufZM*11rj|irlk4S@;cNug}w)UIdAkr8x0H? zi6A9F*C_+s)8V7;(;YdW?_;FQh=Y>jl}sj;|y>%5|TF?Nv< zeF5Z>DT#=NbB-XQc`5vX3!@+cspk)i!MKJMg`E_C0DLvva3MApToY>%_qn2hovUK~ zgb+Z#Tx^OfElUDgMc&Q)pwX1-I?(5@I-Or=9!zNng|%V&5`}Pegkd18vdr)1C=6|Y zWp@)tu;R!Lxa0u=qzpj0p}9|DNY>5w=N1Ig0>-6+j*69i?>$4&YlTg2d}?kIxl`_-PjE7_B?6#1G1VwpaAPS8SMu zn>Z>!6K#M0_}?C{DnXcypbHRp`^A8UrT0rroR*fBTFUP3!fx_x&z|`ci&1PQd?5+~ z$Nc&8?x9SwWMK;$JyTXzE@Ws>1uIBh=8p8fgrjDVyL!zvz8?=?Vsi7H%zR_isbtE7 z{RrG9ecq{sHcz+X+F(YUAc>WM!H= z;;L*v-qTFQS9&TJGYxLx3+Qhkslfu&{lbM2iQ9j5@a!1?&PZ2(0@ZXM$|dJj^x43j zV%HG!85V8CzZ)TWfW7~Vg!Q~SaV-AvfKWh54|Dyy85GvNuJX2B-JOP}BBo`fbgjgH zbO)>w6i?F|JkDxIuxm-*f{6ySRs*b;G{E%(i0Yv;^`RM#xJ40%Rizq73M`>0j1|H4 zfT>usn5fV?YnGT`HkUyE_SUE~&}uzh!5cDU4-}mAdY=Qso`=ML+jMPcY-|L25BGqc z@+az>?+PN*xcB~Pp{~#cJ@iG==m4gZF#?#*Gk4=n>4N@L?zauq{r&x;x7pJiFq>(OI~EqGxsIisy@ffmt(Covo`Ip2jgbMfrGec$ zBV}SZxF-fKN}ufhGX@UM31$&4Z`R6+^K}vJ-v4IEKT_7D0`mpZcBI8fT0!le>Md!CC_GR(<$XS(uitgO^ z_Zs$sLor&+t)_SRy@YXmJRx9PZZ_uLeB#!pG4VYN9C9=(C>lS+oW$3Lj~0S zzT*D&=x(7^C1Z$xwh)a$s>Pz_R1zx&YE&orXFZxt^mq522UVjf8|@$;QTPMTVD|bH znoTk@I5@UiNfALMru3usOtS7Bo|MPL7i!4{h_Hk`C{MBaA0+H6&7I&E?V5U zz6|b$#km^p-&`~ts1-SHKd=#?Bl#?AAK_p<@oCX!MWI3Z-zb~&~k0V=t za=^&$oDOcQ{2taYSokElGKL-MXMIAkEJ&uJ4vffxme% zvtUud2$s3gR+#RW7%D2N%&aU!L&Gm}RaT3CzKT3MyJ_RV$8J4uIC6kl6_XA&(p$Q8jc+?Z zHzAYfmRBpogk%&_sM&>Ocw(ZWRBzsR$q@+X9JZf!0gE#11j(s(DV>BB%~Cr2KCS*% zaTLe9(j*i3K*7drswXq#I*j4cHM!|xzk@_ZE7fY!+xPw3Hu%Vpv4L^8rcz8G)8ymrU z%?6jKtuR55{KT-&Opdp;F?vu>8@xWclPnxR+pGY#(S^L4g2SVnE@3aqS?^ ziKx&OJ_DS@V3eEX%!s3aYzVBu!7`+lv*IGz!5Q)Jimx>Qs{0%q8FglFqi;7)M!yXw zpm|{t$1VS;R`|+f8Re2vmRp?0 zuTujBjj_(vT0Taf(IQQT1nvuaM;1O8JC>vD;zlXc(REzzDh2mzyK2XS*x0RuhwV^O za{JvWw?l2uB$n2ImRGQ6Umb8vu9CSea82hb>6TX2^3{u=z^%W?9)}0r9d)T$Sq+Yj zg3O6$M}tt+~+Vt=x6> z)$)VkCs2Aws`)UK^?R;nWx*-k-*@!- ztjsy<(cqx;GEn+F4x8-@&kI-@xO3HWb#+~Zp3Wrd)~e0VUO|D3_*EhgHsYaDu7Z4u z*(^L%K}RfGiLIInkxAmk-u zKWc~|2=`qg!9(b|NkeQIssTeZ0!*smqv^ypPxzMn3Ag{)d13n3(ff;a!_e+ElZFz# z8|^oz^Nz`SL_QfdYja*{$XH-h5pOZCQ7i!x#GLK%d>-dx?OWUvHh<_}>3!c`Z?QN! zb2ZK7uwGcrPUf=v=9JdZkF5gKw5CV~RJenl>?OEj+ch6gV!D)h zx-KCO^Tmg;Olj+;TN?$Qlk>f{rn{{Bt3rr>`%=K)T^()%R#@~DZ0W!MWmi3l;xQQTczR!K16%$?0xlEPz5VWFH}hxGyew}r#VzJe6j*}e zB&d5Vp)RK@d~coyj*O?*3A_M*{e7=k>R2_;ashTWI$y9Lc1ZHLwHz%vk)%US2=id| z^gMZT$#B3S@8B2liwq|-A0j^R68v@Tsv!ZnD$(7nvnA^;J*W~Vn_Q-c1Us_Ak)dfp z1Q!R!T#OG@oTqZth-Nb>X4IDhJdFaB-u)fA`wTOich~koVqk`tV^r)w8w^dgl5*DOttu^cEG*b_MUGbv^Ur)@Mpw9s z0?#pJw)w9oljU9#hq~#+T>uBqZP{9W%AR={7Hq=v(Ttzap58&Zb>@%~@&I$D;Ln;L z@|_SSo7-U6_Qe*J_l@X}s6L+Lu`aL}nR{nLx>l9il084)_0#1s zpuGTBvdaWa5}eCDI_8Xr+%oK=;RSE}wuw@|zu!-Ia#_X1T=OgT;iIl;6~MjXQ$4OR zkzTxe%V~2yQ^UDEF}C0tShz38i`&{AUu(V6{DVr-?g0n4BB#0c1F#i$yOX8L#P~1~ zg#X7o+xaYLQTY-7^UgQ6UgLkgGb1y!!Zb=M+HHR$nPU}(B>?-DW~eVxiZnwE_Pn*8 z*zQf{!CqTa7Uet{NNhtuZd9qr6VF${prBZXTwLNYsGRmhwQKxYo9|+O7sBBHj!zW= zKX4;c%;VE3td<2EudwvCKW&I%xBGFooUtq1bX$5+Hi$<9+r`M<9@n}(cvvtwTeENZ zX+B+kbwbk@&$)fEI5<~p{|%Z(8{{s0*a#3qMjT~>JYUEE*|e^ z2kp&NlsemLIbMvUi(kC-yxz{w;IjB^ZObs8E$8og5gHJ8e_y;mbtK;v+K-HNjt>ct>EEpMs3KHJIADBE|l z4P1T)H62Phk7gpDC_Wf3H@TayQ|*pR;6|P-(zJNE?=r%q>6@G+zN!`WH+(n|sADtQ zpR@k8#nPZ;Hd8)%w79w&#&)-zk6}>!n#w>JaO{T>wf1InO`a5!YY{(GbaZeKjKFAq zmB}Ah;8y=rMl+`wppZ;0sqKdk?bTQ!l+#jA1VP4%wgM z2@W_sbk?Q*LHtrwLu0c)fes%0O6ur$hsWhI?L9HhTXbi!)~&KZq3`dT9{4NVoE>?h zTZz6WI_zus?M>v!JGc2=glr@zqEC8{qOnA_3qJK7R%@1T8xrXwVN1K2uiLU2iipPZ zv#kUIj7}STdmp|QBa4{O7i?}zl4hy*e0)$bHf&@Zk(L>co4sJ3Ue#QMqp{q=SWHxB zX*9px-P7jgN)R%L;UzdHJvPjQ6}JIZ#_LOtg|0D`gNP#}uOR};&Wr$<)cG8*xqJ}p zobO%Aa!lbzE=Q1ioIW9p)jMe?l1_Mao^q9t(fQu(?MuY#X{-8SVFjJL>*=0e7kuXS z6val9QRH6&zr0f-eIp{1waPfn40|}WhbXfa-7iA!?|6y(xXTEb5wkt-%#vfz4{05b zSMk_RuFv>%sn^Hyl$B+S3`pCPJ?_pjUUGGXepM~_TmWgPK^j*gL}6>!|D4KQLkK|b+J#kni0mV1^(FIeyBoLI$MP$@Zg4O zU8vZKM5z`G9vN-(WwitnE8DNn4BDqe(P;LL2^!J{e=raj_7hPR9S}C7B5>MK{A9BG zZ1-0UIsUnxpC%8Qkjeb-9B1iUzfBq>$-!4AE%h9{_6Iyv6PRxoe8c20&;?gL`S|!g z;IrLr4sVGDQO7V|&E4J5fD>obGk$RZ+VSyD10O6w{b_3PLD`yIuz72DI_D)-pjJaI zn(aG#(^RzVI1cf~D?@UhD?_}t%%yV210osi^3A=yTq?W~z7#4yq8BetTrbYCPXrm+ zo?o5M;-GVdk%xT@wSmT0S!ppc7o$oMGKRIV43Kbnlk1}ABO-`d5xgo)$5SLDTz=E}TwWUN?`OKZH<*p*(OZrZvV>iMoIw^R>vu7D=p2T@%|DS0 zK41w2N4EH6mv=}f{d9i$niFjU`IawoeUBolsk6o!T)WyOM1!M;p2#Oi*0BK2bQ9t>k>Iy@X9GeD_9;e&|b$mQS+x-A;|lfy|oHo z2F}7hdNrCF+IGaCg4NpHWAk)H^>G*5($xe4RFiwwcD>h$_%c6C`wDdJFQ z@Yy^vfg1~7KHa#ZIk0pkKIb{!hmCE@1{l5U5UpRGl2bH9J}{Xf_p}eZkty(g3k=Uf zn)Hrv@;CrecB933Yrxny)0pJnp!{z-xoQecJ7Ty``2MrrT93Ss#|hf-$*}#~{wJ(+ z^;!nqlGs=(+4!+G2f!Fno)M{JN_7bO)W*&{1AHEi*{cvOCT@=oPXzcGw+HuaKa2y% ztr4lddgyDUCeiQ@j5P%3q#$%mGOfx2h=vC3gr9CQZ3jyWQ zQ#<9t?GlH*g2+e=DNsNMT=xF_EZuTO9WFq0fHc)!1TrZ^j;*bw0t=-c<>P^;`T=~I zu%~yZRBrsj+F%3@TnkC1#rMG$-3sh1u4MNZZ$(9De`lZPll4ktrITM!ur2uSbQR&F zJ(&`(aH#AJIuwYSwwrv->{nDX+p)1hjKAYP*e?7o)n>rya0TNW@C;u@0qWTrV1oqu zpSPs`D1pEq13ABU7IVGzz`!JXSP3&JFvVG39fOuiowI&IU3&|)aad7xZVKUEcr;9? z&D5^WVO}P#qd#y%`QfbUFO>lapwPGiI#A}12<_R~e-17(zm3;x9UgB^P@e4NWY~GN zEb;;z-O}w`=FdgEStP=3lH$+)( zFdwx^jj_i}j4x;Z;S+-9+~s&=dOn@i1PS)%A|PJ|ts#R4V)@Fao5!TkfB4zNU*jcZr>WQlswtX*&VR&5n%0Hq^AIpMkNHf5CHiyJ$u(5;cZ~JlG4ZO!{Qd# z`^JF1hdoLcP%Yd(zHA{1YMGmsfIpwrkg|nh`C?i3kO8cOLPOM~fQX*Wz#w!r@A`-` zK9iYFvMjT^ew@hhz6R3Qo(_F(kbI=FX-dH3t>5nRiPrcP6?`(C496}*HV7g51zd9n z!+rgR$dUJdt`+#dETmQdj6Ql3rzyHt01G{SeCFeE&$DvACm;aIs+d*S0+70Nv`mRf z_!pn9hfBS9o7PAhCJUYKlq5wO+!pihILWk>FcK!$DWxpaVs^^uS~4lM2BcaP*s)a- z?d0Ljfst6){#hHAIGg*%z_K@jR=)apx^g}e5It>WstpO<$U4>8y9hO_%D*ZiI#utk z>lDunb%q=qOqaz&ZD70d^-d-6ocT^JE=!AmwFFoV23_UY4}E{FnTfhv+?2$qI$*Iq zmfAC}D|t2D_I~`cf!Ii)KayGHCzWDvXP?piUU^xrP!}DYFr=M@Zw=)gg4-%*+bn@{ zPHF}iw(G%ns}Vf9F4LtZCmV9HoMt%NbB`!p#!gtNVp?!11ELOSw!gFr7H`{D)#AYI zo|SClHGQ|vveHzk|I_9+|2Ph#P)5adMEQQ!hwX7q$Ac_aSJxsf0Z6Dfy=u|N#`?NT zeb*uswxR|^c$)ml=J(Ae8;e!-)#V3MzJ%mt*U;r~s?Q8aY8q_{3S4i^KOy@U0~FB3 zL2@$;0eRx;+C>lSkJ+z}pDyS#gNoWq%zd7#SvLcuUmblzLn(MnZtiZT-@;P*5_yY0 zm8AVc0v&Q(R+yc~mkc&fuNhlg_&M!Yyq+Z5R~4xv7)o`C9m&d!!5J)<1QZnb#7ao1 ze~lU|KHvmUN$*m|yr7~17tO4xw3(?zo*v3$dO&#yK#H}m@N403?U}`bH$%^s+Q0e_ zMl=NmsEuSu@|j;;9(_wm(NWG*B6*t=lv@ZITV}T>K|hzcK>4<E+jP?XltP9RlWau}^w(diva*do6s7iQaBm2;C#d$7_ZT zzimr60`tFO4TAmt9Oir>Xl8kY4>Rlh*Vqfz3KPh|%0h$L_4(drEHv-t=()i;imcZ9 z@w70a*K6TgOmZ^X^)T|qV*4G{XvR2-K<{BOAm#b=8tHSXHDQ}1H|Lh&n_V0irJRvE zhr;$>GUoDihRU)FXtG?W)Tk<;N27@9;svIsLy-sHAXWf&y;R!o$&qoZ4lMqI3Wm{n0R)z3^O0 zZPU@pg)Ww+V0mhB|1S~ru8i+Ve*clr=Z0HqFv+WR&+Dx@#|6UB@W9RAeJ~yyz+Ffj zU0Q`x4E~})3ubA|H7(8!&M5FFBU^)3+f5eab-((!HA2;N@4_vX`J3`|T_1I40x;a% z>*M>L#=+J3GNzpy6296Rp|9+v8x&&w1WbWj{}2ud(V9+&b@({iUC`N%QM!=VUhTMa z66*YR=6tOU#w8QDGOw9{H%PGD2AjZ#+jLbAj)tSIJCC%_s8Tsm_6*&}~FZTB$b2S_pFzu^@!+adVg2TKzC~1N&UN~m} zxoRjXjq-VH`3+ypAej`LHq2Wvp_-J6Wv4%u4Zhvwbo1?m7ZKG{5A9&f^~Bc(dz?|> zO3+$29>F@p`S|xX`e8M;T{>^x@N-y!qkmdr^dZ2avsf6Ks$+6=RaW;>HOpji4)z& zSiYegqFVSQU0v;JsJGhl;i)N{-z>U%TgU5B$)ibFP`j;k{7hL072RS0UMk5|ShDkr9$V z2@(h69Z-Td#mO7?Vxj7=N~JiyJe)7Pub;r(ri6|cLWDJ*ML@SF3inb3HGi+f*l&*s zS>n9O`Ftm;h`)&bs0+S{Gj)y_)C0+3(QQQI@%Cmm>gohJYBe^9^5(XszV>F?3rQ0Y zXE)`3Tm3TnowOvn)qj&-`jDtgfL%E?yQ@Ti{ z@JF&1NAS1d$_`xsGPTD&M;5jJ`N4x^@%pSmNNC|lp?aPD8c~+4>m9&~wEx(gN#XeN zB{hQK`eTo*wsQf=xb;H)L+P$J%DhYl#L$A89*BM`oflDNqfCVk7PVc^YlxZZf#?ck zz}WZ&Heaz_ayMzx4AK(0EqAeT-u8i_b}T!FF=JY+hxWsdUi<`R0yKvX^$PLUb}IYq z8RYzV*pGC-%gZqWj;t!TE7TKj^4q6A!9nUuy$jf73w7LDC_KFxwmN zmzc`URrGfNTtPt;u|lC*6}50IkNY)BjrdYq{Vi<+T4D&4t;W=2_Dw1_Ym#=EP**~do zJbAtUmESFvF3F5Nd&8_nW!Jg-SiQBL>>|pEW}<~E$KFH ztEd%m68hu#*4a=E_e}uXF*X2kTBvK$ohnz@k~}aG!oV;%WR}(S{+7z6wEUhmteEPU zr7@`PIh3}elevSo49@J;UJz~IfMGdH+Sv6)Qy5AYyr7JpZ2HWTC~piLQ8vzMIM}Xsvnkr7 zcFZm}FCi@Bbrj$7o5W&ta{zedwoEU-sY{)ZW#Qp+z!+dFm!pE&lvtXV--qA}xd0a7 zn>&f~5?d7x>1=x(#;W7xrloGslkql#J%2 zQt9&q3(V{(>2NaX>u-~r3j)c8$2FVQIN37^d_BNcmxPNJpxRhZ!4WV@2dB22`^iB?zUbT~RG$%kTMq+C@G(H!uBg*fz}Ps)E*rX_2fvjZtB_ zsCxE3CPXG$vv|?mYGsnH`@rmmKS$EiGPBZ3%MIZ16q+`7fz{|Ra^pE&O#qTrw^pkO ztSey_hY0hEpi7_w?vjr9F?BY#xHawJQXeND=X^s7I^=x2!0-O<4Rz7bUKu@bi+eYD z`jim{lRMnABw&Wn;@kWqGtc?_PC~-)2A3 z?25P_1FA?|A0M&Ex1;<@fjl#bXCgp8x8HCf#*qA6tV)d-Elu^V8Hlt(^5#-&yMrV8p0u_@53PQGu1 zlV#U@gPp`L2oKSU>THc3;mzQPZ8W_vl)dY6eDPr%ASI3ikZhCU6JqGXp2%25_-H#0H&0=#!#{OMZ}ktgANFSPg9HlI zIfYMAPEMEMl^>MV=+AjcQNZg2P3y56R0fKZs!TAKv*QGiwO7w2=c81R?#p;iVVTd! zVM@~oZX^9<9v=Nbyv$`z(V=*i(toj-Z8>%50jO)cmVKSO@#RX_h1vWyE)-L=O|;-G&2e=a4nFY;0VJWgXuWZhJT#tvRUYs24@kVzfP2U_1kE?o#Fqy!|<*8VG;@B3%g`0z@!zekArs?#)DvQ&QE-X*mo zCdap;%F&QvzIRPeMkUU7a+J#kAgC+toDu6@hy71He)naM(t8c-12#hbIQ2{Ld~F5k z+Z;4%z}pVNF{l>3s?FwczJhvNJ}Be(-GTjG)dyu(RBh`YXU$_MT#06yD=EhcpuIEN z;*rK3$Ud{-e4LAinx7XAq+EPYaUZlC^!8kY#{T;B#kw6y|5j5^>(50=e-wuNX40xn z9_b@KntX|y=_m7$rC0vj)7Czmv7?>_O%VY64}|u_03|5hw}#303^$2?tBh)YLR=j( zKo+W@b}`Ku0roiRyn~1w*5xF@(}E`pBJ9RnDCYWMH<#v)Cko;zs3JSvDW>U-vQ2nr zpR=DpX7hz99?DKf?A$aXF=8Ebt_C`}z?a>| z$5zAJX9E5mn;QLlF=V#?MtRcD?2*t5D=u~f0{az1xi_`!_IQEX+W+8892T)nOVPDz z(Hq7{BPa-th6sz<d|H@gBKSWD*T5Mw!Vzu5Eu9%G} zs)~z-Lw6kPHYJEiQ)#T~6TveP0EhYp3`2om-@oqxZgNr+7gCBIMHCwPy`q%NXi%;goauM!ywDIWwvwi{6sSkgm4ptHDk z!r@XU8_cwt=dgR3<8p>CS~gx3$TX9=q#t_35E=erIzL8BTYDC$07_gO)1lrtHJR=l z?alfROT(iHf(is^jbqthc2yLlRmRCcAi!%j={Sn=5Q_24fe0dcHxT*+&p_;&y*`fj`GRKGK_bPev-Kb6=uX?Smd zWvd@rl|)w}ir;wwo2f9HE7r;exPJm&X+3TH@6dl59Pa)C@^<+&W)>X7+!26}^QR?Y z;=_N!kz#82;kU>K&dc_o^nk`_rDfkypzx^W9`%O2JA%74^C+K*-AC4-uw3r}wxkcW z5t~$%S*)>jT56sIT1fz|LQtgLtxHbkv?AjfG0bv7W^1Ox-Uq1yprDoVRZM_7Vb;R? z7ebH$MdI*5NjeT-uK7Q6$v|xsCRL69i<-*(sbT{ip8P>?4n00G<1*-Z&UV+&eZ!zk z9}`*L0|y3}29AeZfw(%QxR$I^%b5~S@K0pe%ZH=s-W|Uf%&nti^@z^mn%atYbvrv5 zl0F}$Bj;%g#NVeTJyw6={22t?nNVr6Sv~qIEO#ouGC}wYv=;MCMz8A}1*kt7t{X|v z{U9HTWowwNFk@WC!NV)iAlsg;N@smKRGA2H+CX{b=s54o8!!FLKFz$o6bP5{j>^4i z#qCnd{cIHro`6P$sb5};>1e3KS7gkBwwaG(n56NjRoRyFGf8~JRL7?2V*I+z7w5CW zQ0+Y!wmD{Y4oe%o+Zd!?jN9S>8F1}m6RaHb>WPzQoV>hztUsCPsgPz~f~OFVezWGe zCU6yll&)+y%_KoQVMqCb^IYS2aI9nJnsqACEC->LcmPs0RmNI-m!2-rnk>V_!m_hf znMlM*PZ_4ihWh$ZZh}?jc@u@V#im#PVweQZr@is~y2!c|S>733U5OZ=-ki*${+6)o zx$T0p5vUUqO8`2o2*m9Lny*5hP;8zZ>SQI_e(7IU>O}|i_+;*Jx5{H=k%i#I?T5=Q zup&Tf9&Zdy{(#z$t*H9cTI4bP>a_#N2Y_jT2c@p(CsF2nObyOm0}R=MhLUomzYvEj zPb1;~66yPIpK9&8i<=fgo_zla8C}>^$RZtoRzf*~ia++JR=m2AY-J9FV{;U}g6T4G ze?KIhH6Wju5ugG29+`zYTNV!NT+{m=RS*~xH+Kv6BnxXvw{|-RYhi3xT0@@yta0O6 zKHah~4wK?d8%}qnW7)}#j)9I;CZ>yX`~?vN5$b|%{$KJFuyiB()yvXCyIf#Y1!<% zLnK2xQL{SR_tu_2HC)%z%Y+zJ+*i+6Xh@KQi}XL28i9ZEz$T1}!Y4wo9r{l-vh?PS zvmp5qwT(hR-O_mMSGJq;1wi{z2GWxqeJIS+T4Z>$%JhV$iw@W&ow!#-T;(v*<0hMp zQ*1Y)H(&KU=>i%cfIbl*&LHa{?xn8+E?$|5g`8@#atNrC61b(XQ55P`z_fu}zta6Gcd$!12{Kf; z-zAJuK-_O_W)HX`pQ`0ZPy3wX(a9e+R4b~=kmsmG>CeU!Q(-g{&NDI44&v&(H8!|f z03R!%br7|$SzGKY82Hs!Dvlo$+`+k)zQL>a4dToR%wxFOc=}Fc>SHVA2%$7sOS3;CN0vgSjfsg4fF77NK&X*D-9VbsZ1U@Skyo7ClYaOI@iha! zC>qK{IRJ-XLKVb-9|Z*kB_*Y&KB*{5s7mNcVL(&w?D!?;V{)+47f1VqM(;rNN%psI zSGl>wf}E(ty|?5YzCC}=xvXylO5}CKgh)zAd|(gMXH9xakC6A29w|>;MI~A@L`zYD zYb;+?5%F=3`Cb>i8-YO7CPTg%QC~1OC{x|p^eh5ypIrHeph6VHCt@(}=Mgih}+(xQauxyGC3}`Rz(SDDr zg!K0;ySwK3EhZ~l_EIa8roBj;{Mh0D9q^k2+@xBYZxgyFj?;sfrJ7&^pP`;KR%O zC)RtQ0ri-0!gCNPfOGRj&wl4XyvbI8~_ZF)n7pA`SF=`i-`ATNV`$ zl^Tq$4<@skP0&8ynJ5%iahnmUk)P=WR`rqBenfhlZ{Ows_=G%}=(jtyIMhAyt;zGH zj5*&t36*KuJp-V|)~7&XkQO3gmxZC*@MC*`}ArWCDUo*M3ad zc7PrfU&`TH`vVNZk?|KAT5?HqHV^lx%_abHf(r)5d;VuU+@J9kX5Hg?%0MDAk@odq zYjpP6+!<~>o1O>|!`FK2nyw6!cX#a+MSC{>iBYVjx!Y|;b#1m7ap&6f@MTe@#MS?Z zg%!jT?z@ve&n51v_NUYM@0|fnpg7Cz!1Do*eU0d?k{H=Q2dR82@L<4`R32~T(*iyIAS`ApmM%8h=zhaBO5Ucn?AwS-&-PA@kdQDJ9jUDw0fVrgFoZ~! zmzOtTD{Q#{Ds(1#@$BppX!uhlME8q8CSs50AmWTa_d&*ry(buW_TP_2{CiO1-xCtC c*bn4PC}eWc_@lMJb2o63qF|9CA?+{!2az!#8vpUserprotected $userIdprotected $usernameprotected $email__construct($id = null, $username = null, $email = null)getUserId()setUserID($userId)getUsername()setUsername($username)getEmail()setEmail($email)UserMapperprotected $adapter__construct(DBAL $dbLayer)save(User $user)findById($id)findAll()mapObject(array $row) \ No newline at end of file +Userprotected $userIdprotected $usernameprotected $email__construct($id = null, $username = null, $email = null)getUserId()setUserID($userId)getUsername()setUsername($username)getEmail()setEmail($email)UserMapper$user : Userprotected $adapter__construct(DBAL $dbLayer)save(User $user)findById($id)findAll()mapObject(array $row) \ No newline at end of file diff --git a/Structural/DataMapper/uml/uml.txt b/Structural/DataMapper/uml/uml.txt index b9d5239..a521833 100644 --- a/Structural/DataMapper/uml/uml.txt +++ b/Structural/DataMapper/uml/uml.txt @@ -13,6 +13,7 @@ class User { } class UserMapper { + # $user : User protected $adapter +__construct(DBAL $dbLayer) +save(User $user) diff --git a/Structural/Decorator/README.md b/Structural/Decorator/README.md index 52305ab..4eedd89 100644 --- a/Structural/Decorator/README.md +++ b/Structural/Decorator/README.md @@ -8,3 +8,7 @@ To dynamically add new functionality to class instances. * Zend Framework: decorators for `Zend_Form_Element` instances * Web Service Layer: Decorators JSON and XML for a REST service (in this case, only one of these should be allowed of course) + +## UML Diagram + +![Alt Decorator UML Diagram](uml/uml.png) diff --git a/Structural/Decorator/uml/uml.png b/Structural/Decorator/uml/uml.png new file mode 100644 index 0000000000000000000000000000000000000000..bb14f3d9f167443c92699cd4eaab2668fa16e102 GIT binary patch literal 16897 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 literal 0 HcmV?d00001 diff --git a/Structural/Decorator/uml/uml.svg b/Structural/Decorator/uml/uml.svg new file mode 100644 index 0000000..6dc608a --- /dev/null +++ b/Structural/Decorator/uml/uml.svg @@ -0,0 +1 @@ +RendererInterfacerenderData()Decoratorprotected $wrapped : RendererInterface__construct(RendererInterface $wrappable)RenderInJsonrenderData()RenderInXmlrenderData()Webserviceprotected $data__construct($data)renderData() \ No newline at end of file diff --git a/Structural/Decorator/uml/uml.txt b/Structural/Decorator/uml/uml.txt new file mode 100644 index 0000000..f0332ec --- /dev/null +++ b/Structural/Decorator/uml/uml.txt @@ -0,0 +1,29 @@ +@startuml +interface RendererInterface { + +renderData() +} + +abstract class Decorator { + # protected $wrapped : RendererInterface + +__construct(RendererInterface $wrappable) +} + +class RenderInJson { + +renderData() +} + +class RenderInXml { + +renderData() +} + +class Webservice { + protected $data + +__construct($data) + +renderData() +} + +Decorator <|.. RenderInJson +Decorator <|.. RenderInXml +RendererInterface <|.. Decorator +RendererInterface <|.. Webservice +@enduml \ No newline at end of file From aef2f3499332ceacc604fd43ded375b353bf0e21 Mon Sep 17 00:00:00 2001 From: John Webb Date: Tue, 29 Jul 2014 10:58:40 -0500 Subject: [PATCH 12/21] Added DependencyInjection UML --- Structural/Bridge/uml/uml.png | Bin 15972 -> 21131 bytes Structural/Bridge/uml/uml.svg | 2 +- Structural/Bridge/uml/uml.txt | 10 ++++---- Structural/Composite/uml/uml.png | Bin 12315 -> 12745 bytes Structural/Composite/uml/uml.svg | 2 +- Structural/Composite/uml/uml.txt | 10 ++++---- Structural/DataMapper/uml/uml.png | Bin 12696 -> 14730 bytes Structural/DataMapper/uml/uml.svg | 2 +- Structural/DataMapper/uml/uml.txt | 21 ++++++++-------- Structural/Decorator/uml/uml.png | Bin 16897 -> 17063 bytes Structural/Decorator/uml/uml.svg | 2 +- Structural/Decorator/uml/uml.txt | 4 +-- Structural/DependencyInjection/README.md | 4 +++ Structural/DependencyInjection/uml/uml.png | Bin 0 -> 18347 bytes Structural/DependencyInjection/uml/uml.svg | 1 + Structural/DependencyInjection/uml/uml.txt | 28 +++++++++++++++++++++ 16 files changed, 59 insertions(+), 27 deletions(-) create mode 100644 Structural/DependencyInjection/uml/uml.png create mode 100644 Structural/DependencyInjection/uml/uml.svg create mode 100644 Structural/DependencyInjection/uml/uml.txt diff --git a/Structural/Bridge/uml/uml.png b/Structural/Bridge/uml/uml.png index d378dee62351633f376fb1b392748e924e316603..ace71af32ec92aa81d83011be5ee0eb008cebfb0 100644 GIT binary patch literal 21131 zcmaI81z42b_bxmN2!eznA}HM;pi)XB-5`yGAYFpQ&?t(43KG&?(%lT9ba%smbkEQO z3~~1O{^EbW@0=soC3DR)^E`X6z2aVL-HTu~6AiNq;*~1ymj=jGq-So$eKHtzcX<$H={N6ptW*waTMg{cC<5baB;P_<8prM z`tFUn#oKq5=3EZuE`pX?4N(V(+}o*=tpFJd@s2f`gp&poNRUV zHmNlo0qlG@TA=Xib~-j`P2Zmdtm%fKr7Q$< z5d@-EE-xja={~)agsZD5JM)?ENpNYpDM5~=G!y?_uWj{fZT_YbPmU))GEMqZ4zUK6 zzV{DEr}r^Ymm*OM*NWFQmAu7#n79DH_8y80-nZ$4MKWEW zky~NHp7*wJ!Ds(j2C|5EPGoo`NSszqQBhG-{{X|aBEbWCPW zEL5!2H?X*v`+EliIypKzIw~sQ%}vPPO^XjTczK*2<;#9YL+`Imc;sC{z0NP_FOZpN zOS3aE_vL}Fd*xz(=AA8qirR`BWi`8C=t&_@507x4wS&{^A82`aNdL2z7hWix;)std zg~t;q>(E40f3aeufLQ9ta*sw#^gYJh&rlT9kr|2D*`XpKApyHdP7eLgLYx|eC{U@l zzh2zvKTvIC>Z##@*QrKv->TMfLlga5TB&Ap4fW@qos2MO`^C7=?F3PeseQpK)d}B= ztD|Dv@12dtrAF7mr~f7Mei+Ncy~BwV*1a!YERl1)Fu(mNOBUoTdF>hXw8!upV`7XH z{vL!H>0Cn&>k)iWQ{H*j$6@}o#z^ETf|B#q@O&SOO0XuL=WP|AhXp~Ti+#~i zS-P+Md{7QSj%goT(m8a5nGo$Cann+~Uly0_8XKMOEd_0ibc89#l#624h0(P4>|Q7y zXMsjVT(&OQcjKC%N9feO=z}VUjF3C+nVuZY%;amZfe8%5zxqgbVqXvhU@)&$B-H-KWB*S;qEFMnA$Gk`JwuN z#_zloRVYO7`r?F~{#(1E-Bh>Da-J4XP2dF@NL^aJy;$Hq@T26j%g{xwu$qi{lM!M8L7Bf!ypUvQVLYuy$FPyP{`fZ&YCAf;6 z1wDejc|3rUXwN>{8aY0Dlbp^+Bb-hiHMu`tI8Q_~7iga%dO=#<;CF>uUV6EQ&Dbse%8P>mF-5su(}3V$7Nhzg+wlT< zyMn;o7h1>M!G*tJSdc$J>X4iqXv{mfPr**2py|3B-@V*>@!@oRFiW#fBN}Dp8PIKA zQD_m9fWS|Qk7spt`i%SYud01H%65NjP87Zp;6^^xsc|dZ(J?-Xs8Q20wZ$mk*dc<+ zqnLG2GEu>(vHb}lL`?umJq*`h^hUW+36*V!?FhNjS2|22Q;%P)XDsCke9CW26ymmT z^z!hq$&exR_O7b7&yR~DYr~ff-L`#u74j`0+xt=!>!VviiR^ckiYKO@Hh!>WNNtw; z$=eYEbxe()OOo~o8aeoy`|Rg6$mS~i&AkHh0iLDs*k-PZVv+4V)vii2?Xu~e634!t z8H3D~IJ%=PlzF*@@+a;B zeSNm@?`L(-U0fPj;vd=+p}G1o`#m~D_$8u_ko58MJ}Zq_y}2~Xjs0X*V`EtnPs%N> zxVw6bn`DkEqhsfjg6*oS+_nVXVjFZJn^Jh5Y|NG{tQ}5_j>f*q>Asg7(H?@fnJ9{C z4v34hgt-i%4@XoFk1Crk+`jBKF;?9GUPR3tX%qmn%um)m`3#(Rj)^8WxBShaN|M^* z&CU&;&Y!j$TLk1pDK^Rh(>FdFbXA6>@@Ul+Zyv0bzMVHJ9K{@}qC!M|K1TQcz!%_A zb1>Puhqv*tt*x!^)|8i(?H?RC1z|x(>GH&mkMMY7*HgR|O`9pK1)bL%q$Yw74a|uz z!M1~u6d$b1>Kc6WVDFNlnd zjj6xOmI`rla&mAG1U`d^E7yBjOT0`xJ*O>0PWXkdeE}Z2CcNtK(O*k~y^uQXXr%TQ zAu#I572aw%=Ol0Tp-y?8%B=-5W5GI#!D7|-faHVyHT9B zv$waE4#<}j*}n~Yy}GX^*+V-(VqGM%JYifMfGzEk#0qvW6(aQS9bAcd7ysE%!h1z? z38ISn_HL*VXp;eVsLqi1QVDE_I*6 zf%~x>M-QRce&7_e*t;WdH<^iw^_m&gbcj&2U(k4n;y=}U=esL#GIbXM(QJV^lQL_> z6n@oCC2WGf>FzxiPeKcMSFGSo^zoC@ok$h(7*e zz|S`@r+a(IE7UZe#wn*e&vG0iuEbDD6TY*7Cv=td!hHPW8L5BtD>WrgZUA+V#JdFl z=fC*jN9oGmYxU)%AT|Sy4XfVepQbV|^7%Yw<5_c+%^GeaL1pi|mU1^V7>fKnIT`Cj zJW*6B;$$i`)88v>YiY@#`r2og_ApX)lkA>RezXl{15qdh@v)$W(#Pc?A9BmTGK(66 zWplkEH-X7c*So!)&|HN#89T|D286{qkY^W?@wZxA`vUi??%~01KVMHFK5&76#cdla zMk|Rp{xYK0+1Y}XTdHPk=KZxQ4D{}dYUy7>=X=PS zxY^`Qp*nN0sysOEaIsUZVI{=Dp&+|Pz~8jepY;0ao`b`KWZ~d*%hG~hLQHL_;~jDK z%s|`m-efU9`UEo4`|F1%POUJrXIX49+%)r*wprDv@7sC>lozPMw2;y3)x^WoO;B#L z`9@daWCEaM;%)Wlk10v4C6fE=zl~V_y=nBs7HWVnHg6d|ka(V?PkM~tHfmM(*&liS z{E1=RI_E135#X?+W~QdXc7BGm1PZvW54s(!;@rFU@l~bG<@OW~`$PVMfgJUV_HPt_ zw(UBoBM!LOR_fOO9D*RK3tDY)MuJ@?PH^1>Nwy#xX7SYeOW_K<^z5AO{%HD3AlgJ4ny)t??;OD8?PqLMk_2tW@+c}Ae9$l7Ei9*9ogdJPJQS=z#q*WxRVD~v=~q}O ze4d$rT7IWa`lORO+*0_e$$sRgw2I0%#~u?CF@Q4V;`0uXVZdM_sv;Ya^Cq&$+9e35}$U7d2-Mh)M2p3e1&Lf@T*CO0}HaiS+G ztTR}YDUDu6obQ{Tw+6QW5X4mfRLdR5#@ZS`&e!?icfsz0q-X-mNOkcO52tX;=g%IM zRbA@KpqZJI%F8oy`}z{d)u=wbg}gs=N3DHtXhyAz^qtUF56_gDI{|rwH#c3@wPxXm zX=j(QKdL|893ulB`F))i)cO?ueWz))p7T7g(x?|Uqhu&cOpFN4ecU7zyv=uNQH8-! zM_Ybpht|AaCq3K}0A)}KR@eiLsGe6bInbT#)0%S%~a5kV#7W;NfaoFZyi zduy+GfKmX#QAMJykB*L(dQjruz7O)FY2PsmeU1a}HOj9dob`wo=qk#4BZuNZs z&6wVJa|aun+2Z*aL)fNbz6Ki;OA4iEz3Ngsp`;|L89<{^IBcTZN2^POoSa4LSg*F$ z$?m6D*0d#o7AdJ}*mu7@dZL8~kW|sRBnqg-R6w;@BJ}%rvHm`F?*kb%&N&elmd}e< z02KLy5d90*H1fvy`{Rb23)Cp~HMj^3PF1z%va{6hHNNf|6g%c90~%m8dNEe>eSNs) zca0<@`psZ^t3^>9mW+($#DdWd7&&=+AaV#s)}YIXfPXbsUTId; z0RX$fe&)_}N!4YYR{pAh!%5_A7DYpY#L+a#nVy*MkqPs)&H*7I6qc>__8p}UcAe&Y z7MkVrbp}kCfB{+!rZ#3QJ$17s((dTBQ&UmtU1&*=`HmRC&*F2iv^)Un6CL;7_8KPD zKwcKJ8taF-ba`J2p?x1Um@XksSv$?TPJho2mWSDZjPvf}ydFRJMKccS1D02q26DX5 zajD&-zu#?b0M?gm@3a&Dy|IyB;C8qHANpD(|5Kg;d}9scGPBK-J;_f#Zc5)^q5b4< z+HbukrOG9Ol~L39%}!3f=Qrc+?<=x~*WqY={CkXwq5Ed7I6OMLF3g__iDOJ=Tll50 zT}!?slqdmMfH}s>23X<&{OgxHe7uynHv~D2MRyk4GTw9$8B|z3{l50%GU1h7e8Pi? zR0*HxRcW(*K@o%M{_(+*204X!v8#HytMnTIDeqRkupA)vc~t<;^q~e07BXk3E#v?H z!8Mn)_9I>MEf2W^dR++k<0+0N{EUd>$ zn0}Ggezs;|05N^-ZwgyXOX}z$-#wC}!KT>wef`N8a>-XSPAb~)HB69WQHrdr`xh`D zaZZ^d`~w)Q)_!o%s(08~Pxn@`;86-pBQk${bo4PF-}u;=f`TAh3v8r4T{;q=e3;)= zU3i{u=W zHP%#8V?-a7;TeU@*9TtuDTPdO0&7-w;7wJ(m?o#y{rScQ{Q%)+5Z(Vq1_(r4v-o*~ zC9^vSsQ~I=Butw(5!PAL<3TJ6-h1!qfx`7lVsp=}MZlghV2t25Ovj`D7S}8U_ zZplQF#%qwg9XN+U{+a0X|8Rka%kr7qf>Fa;6E~-(hW=&;M+jnHw{-F1RnL-%n;5S# zJ!hEwFnml%(r5gUvxdf!??vPC)0(EWM{Ydj5?Hv$_d$66^IHUDcL5lLp8@UghGIN# zw-?j{(WlukCn9?3K9DS9hwghIQR$Ad9N;Pm0fE&GVesJ(F{m>HLS+FW%hA^)7udS9 z1FJp#GpcDkjfek^dB)HvSz(4lr(aHPSI}>+Z*o#xRn_)nSCoQcp}@D=;d4i*{S#h0 z8j6kX)BT7DGmiZ5v@|cA>&VrZEP*4Q{cY5|b1v(j^s9uin^ej}{olOmxPVmcEyx^SZ4P6AVY{TnX~pt7t^< zkwY0HS&AM1XzDHk15U=iZSMC%x!Dy)2dy67U$5{!t@uj*J(NnwaVWhDAivYM4yD!( z4h8_T7&p|>i+Utc7rnBywVE_qCd&1@^a#I{Cd3z8=_XTMg|ApA)}t@b!qe{ij1kGw z1Jb)dUy7l!zR+ci=F~%Dcm{fblRG@DNY5Y!v8>X13GXM`T zatWIg`<A>Gjb@C0vP4~CKfGp+MNu^ZG}gXB~~ z1HlVLXf|2&#h;w+q(>ws#tOP_swHT?(64d4g8`dV z4MO`ch9>YzxgL$4)v2uDl{R~-6aYX+bTT!w@P*-Jdt8qn`j}lP{MRRWjDfGh{@QRq zjN|JZ52^6q)P@QZSxClg<;-UFY$*Tj2!JC2)vXsmigQ%z)WB9DHhg&uUiTxuT?6_o z7F1=Ymly-p%iINq=iu$x zAy^hj*L5G0RDG^Tul5lL3-gzIn@E0+754571cwDN58jM@d=pr2aV0B_?|k)I+VhaA z?>w^tONX3Y0;&80G>P$>iVpxb5b>gnipd^6?vCQQbEm#P1y(BO|VUnIzo_K9Nm#l6K=_6@2efWwvXG= z=Buaq_F6;UERK!;p8|c8(f>ctL(|~nZnFSiH&4LHxe_Zpj~;o(f*KC|B>wJgC&&He z+ZgSKAVdGUs2H*p<=HhZqH>m{eyL-_jyC=J=>P%*@P4$}b6^7iohK&kfW0M%%q&jx z(fIh-YX?4j?s3@MY};F4X^~8p%u{aGHM+MHSOP;N39Sj51>Ho=16=*7P#ANJzhDf1 zoe-1Msf7^d^QC@Gzl2)%%Jg(8!jSe4A5?l`RAKIW>yxEeBshE8Y;7p9{QYjn$f!{!%b`g2^R)9NE zq5QuET?~wXwIWt3?H5~3?vQ7f1&W=Q47O%E`(DBpK6wknZm7OD{gkkyxErg@kWH8{+OC;s(wAFpLBkdX=)7#7Cy;(F$IlYOV!uU zu}e4kn{R5dbe9YBq+D4QT^+bsdsvv|SMUZXe-1ZhV(Q}Ow>UlBOHO`uaqhNYsR33U zozwpfT`r4td5{ub+vJn+?6^TPunJ`PnmPng%Dmse$=Aa+-BHsojpkNB)S7J?X!#-g z_lsP1vvG4Bjk2;dh`ELgfLpRv1VO#ZyeE>88E19R0K}Z9ATE))29XI0%^dC6+L>jx zJjD@u_ULRm(i6b=a=SOp9-n%8G=QHmYEntvkG&5?$Qp+0kXxsf1%LjVo&`cX-Z6nj zPil^l!F`%WS){fLaX%>Pe-+5sXMbckHgxK5=cK2HzZQ|jgu~DC;725>^U3bdp$xRf zO}!m}JB0nHdzh3nBSO}c-b)h+@P{!?|; zFHV;T!*K~Oec(Q?mw$6<)gZV?+y(5Xg9@EYBf{^-8h!-1gM*#jFZOSgV*{<32T>eX z34v^j@LJ*KI}Nate1dAV0I8P0)rl5Rbpz$4W@%Rww2}FeN}bDwZclVyP5!Fgi?7?6 zzm`XzBaQUq->nbIyql2?J*ORlIiKEQ^n~u|kUON||4R@$jjVq2ZE^k+xWgjZhE2Fs zURQ2q{mC^;HA^i!EUwovfGVIt$a3B%fwm7j0I=4-b-EG zRN^;ZbgEtZx6%U2)5}R+;^5lOcs|<~KNGhxK{Xai?&lhQk3GTaK5(|~(3P+IBrF&l zgYN~kn4cGG@^ajz2F7UCadcFfA{tWknC#*%3S)U7X`@EtXOr0aR7(CWI*HDMZ*Vkr_zpi_k`3od_^h_YrHknvz zYg_HrJlQnBXzwlH>g!=;^dxvE-i^h@#X7Ekc2<4scGe?X8lS^ma&-8d^qpJf588bD z0=`na5u!4d| z4;MlGc@H6{iRtv!!-mDv*xA^EP4A@)5W9<=Sgq2Pf+v2X|{XP>$nO=A@;6VJ7s z+_cTlzi53v<9l>#jk?h%f^^!V!0{#~eDv%h7EnGQNbyfSX-t?&{AKKIGYR`n!9z>? zy88S`$i=D$UY=_+UGMQBu)`u6%d(RsGLZQ6pUm2iwuidl2|YSdye8}$9|eMV8J^X^ z3OpUB>Hv$v0fG+dJuRqg^y^i%h#NZeE9~f4CDLjh=E}nuXm2{Kr=!C`_q(URUq&&1 z43uuB{6G$k@p*Q3e>Q5P@&}e`4>!%ttR_X-H%VZ+Dg!aRy-&{`jrU)!0{VQcRxS{^X!(kVq-FO*YQ!koy8v2$7=d~|qM`A0RnC6;{_qmhXfu=`2Oit+f2k6Mp zkQ_C4)#W_|==@9_M{y(<>hl?wnhFN@^P0X9=}&T|dfNKQc4xH@V#2}w)bjK4jAfni z#Rp%(d*>Tl!`JB@U9N%Je*6!zdmTiEiO(!&=CjQAVLN$rOG-J5E z+G$P#8Ffls@5Z;^nT}M7)2V@3#RNtM4L<$ub>E)zP#OHhGlm-9Zd9Lkg;quXs7Kd0 z8Q=7RKJ5neQA5KC5TWlKBML-oEuS~Q+=XJesBEXofV)sIZxE{9=6gISucPy|pCQkV#(%Q*`eyA=eKzF0GQ}#_w2M%n}mUih=9!~E#2=e!|2)G6b(`AUU7PBY&0*p- zc&#zSQSCZJ^G3MdlkcIQ?yal_>nMtmguOPuO8K(id!AUL3N3cMu($B^%Emcg}gVz@j*LwmsbTiw=;DJes8aeRDsvQ;y3 zm;V(nYnb?1x8d?2e}7f&Fx2EHKpNR^_jzD*tXw78#Y_jWVYdMK78D*9-rLZ`aq0(u zoE6L(gV8C zd70aY3?IRWA{wzEKjPD8h07u&LOur#dV(EdebVTAl{VJA!{RyV1DpOA6vsIGQTfa{h% ztt!>DNM_PC2rJt_I%$UIjKV8f#_Meh>%Pv zfgQsYy#~o>k+Q&$-9uY<6zT|Z?V4ruTQLDU^?)SRH+@v`F+g zy6S~A^@80|u;AR$>QmHHrek3}w=?dtJ`k>pW@o2ebRXL@JU>b}F7mej3WPdBjD0e( z#r-5nFDeZWeInHwAVILsw9fbeXFQ*u=rH{R4+3GAIesnymT4WQ#1*0^zo#~;-ROOB zZpyBa*%SVr(@Ujbe&G#LZtiXblPZk~GC4U}C5dKiMtkvXE$^h(QlTOQ9C;-~THxu( z?5LZkoI3aK?&Jcuqec?G`$8_Ia{5KHClA05yK9RGfO-eatH`#6=tkF{uzDIBz;gZoU!gH~5*V-b9t~M!DSTy5|EFHbCgYC73d5OMxEMH&m$z9iD zwcDJEqq|KEQKRU_{|bDa3@RZ3${^yf{4_im2|RB#rX}NEj4cis#=wxc{YfAc!Qm*=xQ+?^lpXy#S|M9ZYyv$WIugD{UGa) zvIRd5@0a{uN(_!Edc!7+I%|*j*`NKy1^VaA%%3}!!kLb4kV!O1`ACb%Tma5h+gX@O zSPfsU*$RW#WXW=;Urh86u9T%(r|c~NCSMxS;M?<5xy8(k;E|77$?>gLTmwD6g}q?B zFFC-4;gd%gGfs3C2*eSu_~>Y65iU1jtCfS#_W?M@v1r2s4ENdE_?^jn>BS`ytdzEniBM@y(O~%DXp#S(p8o^P4n!rnSA*bs(P zgV%)H4p359x)f7aup)p8A%{2r`GOjbgT3IxX^ZWYF6ak^HNFj$j5yc_M0>v zhwvrp*L|GXQZaXO`DeV>AYZIEbnEWx3P!CVhs%IloP!6Fu~=iA!S%)J4ef_W6-fpn zWyt&Vy?wVE&ueFhsO7BkMa@!3cX^xI$(X=;Y~z}1CdT%>+x_-RTM1MZoByP8V4sQ8`wBs{|hW{v!kK?-&Y_5*`n!73gZbi53I zdrcYLK2fFi3D$sNwt|v6YI+& zm&k@UlMzWqqzw^w-Gf@|wWqySvd5(f%{&eDuqGbF++Qc$SfqvQ$|!F*h^p>>&wEf5 zZUaWnO3kc0wUiDyam=K_`(y2U;r03!W~nIl>3Lb%7f~*2<;_bVbTpGah5SNClEx^6 zZjS$K!DIU)85wg-+iYbs>@EAy4)cIe5OR36*^bDVXW4NeyO*=4d%7jySL9&8OJ_)BI^vOkD*K_~BH` z&w`TshTx=N28le$McW(}MsxjtY+uptf>uZ`SpQ?!Yoqs`9Rqn4W9ON8n9Kr8_^%ZI zu^byLC3OfsChm5=#Q)23d=Jf^S(4$B6oW`JFR48?p1IC83T^>B+EErGats6lfb{@c zN)veRfAB~!d>aiS>^lD6(-Gh43|16*^O(&wjx@Ro%RFs&0~1YvnYT?bg9l!Dl%Og$ z`?5HE48weBAv}85AoOMr@rlOo@8w%QtGmuh&YKROc6kOAd#e07Aje!9)z^3?6x*kH zQpe2Q#;E~H@yzWSq}lT5ruH%STgz0A_Yo1KF<-LsF@cv>Y2Fa*_7L$ng$#2ML|C$uF&^Q(>Oy=!JD{DtqAb4_K)?|X z_`S#l8Eu2f9+#Z%xcmTD{dT#Gs!CcG2;O_{@4K~UFr=;HrcMLfHn?Ary1PN(f&*bk zz^yfxtbGm7>cj)Ys>+%d0i+IBCxGxRSC6PK2u1_=GDId`c?zr82KrC6gYi;?5Wuq} z1&%J~oF!24HYDc(2t;?*?7nWBeDr=Q?sLL(>R^>n3V_KIzZ(#(V@w&#ba}q#+v9jo zuwR?29K83>q-#BN>>oY`AHdj>8WHe=2bG+fUKGTTGN3Q#CsNpF*Z#S7-EoEz?EJ6m z1i$|}PK+r2z?t>|-V5PFkM0~~Kz&B$$WXdC;!(d2??aXufilR5WB5wvZi4K-&H8-j zcpxb3f`cP6hiGC&tKJY$xsm#!v(mWIDQMe7a-Q<=1~64o(?Blmff<2w>id$%RDn++ z?7x;sZv#ol{k-=6{Ctyw8aQ8?`maERkVQ)M^+^)OhDY^ISPiy~RXB*T>+j3_!rxBA zBAom#c5ixOz3=vfoFOu~oSQEafa(uB`a}^BdfA}a0K8LMt0sP5cEHSo20?z0bUd#` zB<

$&W^^8k;3Y>s|#H9I&9!w{`$YZF-k}fmh>9Jbg{TJfMMM8{Ctnh5iRL=wqCw;w6}Xyea|`pe zs0JY)fy+y@AhtwUNpjoSSSD1K)}JA|fIj92{a| zG??4B5lbm-!w-h3X*trLO|4;f)_tTS^-skQ>;;JI#M@U%N$KUwJ0bD4wY7LsB-m`e zw0DjW3KguEKw@2Ap>zZvf?mc5wh`$StkzOJHp|QFR($CjvRnHYs?`}odLj1U*S$0B z%{W;lW6uO=eZeyvL+mawvt-?-mWhd&j-{cTxPQpw;+dl9juH|}vx!j>?WE_I50v~5 z`!X!JGH4~!ZWv;-+0o{Gl-}!nk?Ps-g-(Mh%6HMRq+i!BWAB6F#0`(y8!Q3X^UJu# z#Dx2<#3eI-=Iu?z(NA(^iGIXn6w}szRsw}YZflA9&>0ro}q+W=zfG6_asSbbatvC;-Zc`U3Y-H#oY?~dpZK{qFWBxa4 zv?umf!dC;vR|_Xp0)tOCeO@Asb%u&=pdaYYiXy%cefk5Z`)Mo;KX>iRBT@1f49yV# zMD*#$BrGN-Q#eG>)paj^mpT&b62>c3zf{xe;ig&iRI!|lh2YxO?sC=^y{DcN6}81P zmEAt}tgT(jEv;K|d31vHEr(LsSvL&UtgGzhCAZfI#f*0jFNW?TLyCw5lU&-e^KZD_ zXILZ8tl(W)ko2`!ohp0E81pMESUfZS_owSGqCVclpATD26F;tma-XZPt52^a$`-`{K#uu?4v%)@5YA&A8dotRb!)2Z3K4{ z@5y$#s<}Jr_eZZ};SD@wsQ95oz0hfMkh(J?S6_5${%=d!srHZxEgQ5EEIg?W5ph~S z_H^SI}adv5d2@{ibQFX%9IPKfBv8_1vm9lFQ?UbnZ` z(RNj7-m?gpPSX|EPXOP4e_vDknME%|tjUl;CRQay^hOF%z0mdWJHZq7i(WS(d6L?7 z*5QSPP1It(onkT6FMVV~HYd`hHCEv~JOiQBaAV1g((rJifZOb+3xNU4+cQ;T+moe| z^73WwID4^@u8$tw5U?H31dJz82(q*5C8DmdxKq&I6-+_fT3@%p>2%fTw6@%8Wn<$Q z(`SV@Ix>Qf|IYX9?!+o!BL@AD_oeZheBE5{^*VJVJH>Z@!Z>C%^ohud8MfgYv%jXMLc6V7Mw~f9@c~qT)-yipE21qNzB0ZgI%4j>-|ti0 z)~S+o&&EnUfQa~Ug}ciz6~+g;dsT1O)Xe)I|UG8uiy3$mO`q8#uXfdGl+!+j)QiclJEh-taT&6_u}YQzWkhL z+n0?B6Vu_izPNC0iD#>fEGg-NPo7*oSOH|3LQwy!B69up9$_}vw&ggNq(a6z3$IzY z`XiA8`by88+m~|G^pIRm)>Q`9Q4aeVKC}JzVpAOR1FHMaA-L{vlcfHpOfAR(e6_s20&)v3vNq=SLLHaJXx=n}uJxk`~ zR6+WQp>-|5W*IL|>A7PjU(iCC<~J02vDe}8@KzoYp3$hs)X4klvO?iWLKSo0)x_{N zhE~TC1L~t6{lVZ{n~<>UR2@(LxDMF!Hh*iM5#1f-^K&=Ar;w4QDSA~6s06=v5n*LP zjYMlYZ%ITtH9Y!WRi+k8W-y10(@bttAz?eQ8EH4}n`mp9qJ>ht%v1zb!@%BuO&H_z*ZJ}Y64 zglmj_#NEkOp*jNWbuel2h2s_hdJ6O>Ze0MzN@kRt0gZBY6`&wR0iQBC<9BdqeHe86 zC+|AoY3n-_939TuSnvnMr)R`@nFjO}*>aSn2*lmlHasFC-gjN2&<*l}PNzQGKV3^n z60DS59CqDX*%{@*y5aH`aCx_4Vghw8o*av?y&`hng{@>8@z?i$`qojZp680WofT^5LN# z<-*^VA27~n3Sc1YV3cC+<5h zqcRZzLtp>0+?M`Ssdl$Gl+T@n6$ zz-`Zk;!aF8psr?U_>BkBJ6nL3$4Rr>KWd}>-AAO~g>nG)=u`%GE=G0d*mW;Rkjr=E zW0=a4<`VS)K&_gFzZs?G4WGI1gYZSj+Mzqcbk6N+_U-*-oSDTV>-kYBDt12&Z) zbiA^>obG7b+6=HUrexnm>gyMR)?1V=y}eJx?tr{I0! zU|;%e&17etV@^COQI6l9H|vN1SpUSdG{+Y4mMrBSrO4_7=|(+54^&MJ!-?4foFf@{ zPJO0@Q-rj1u-$Rg*B(mH-{k1pWnxNN_AQ^Qb;d~&eJ8ep7bEwI#*hu^@b;>&IUsV` zz^zd201h;Y;sBm?l+e1e({z4Ev)Tb3!+lkX1|&n0W5lDEcL6of0q$>C_aDhhWZ}ri zaIS{?5R+neIVYGrMU*mFa2)w0(YZs{v2aM;2KN7OTqApcvi)r~8+F0F7bXZS!^2`( zHJ>rjlKJsqt`0ZDLK5|pW|xiO+~tj_eWEhY?QEL8JJwqnD|-mgerD%Z?duE4&>_Z~ zD-otCADqclpK3oDb-*I-g<`m(BrUY{o)92^zuV$Q5 ze9vxr{8z5~L0)4Pr*SGv+@}xmYnfaNM7+)+P37kPM|ZweVv-kz*iRIpLQAE_n?F9h zI(Iill^e3){iKT(S6GKLtwCdi3L|!h?EnQAeOyR7XU$z~51Q0I$B*=1!77uJqti^h z__2};lI4Ocj)wN#p=Gf$GJ=OvU_fP7`T{@3kVD%SdK$SX-;Ly&fhoS4L#$RUfElK6 zTNVN?Z#cZeQpmLu47=2N@LS3(HoFC5++G867K(KcgoxzwZF=5*C1<6;nn35wylZvX z&S~kTns#LxDgjiY2^S6F^2(^$X{;CixYhqxWfT8Ig!}kf4!Z|AtADWHy2% z<+?)t+Y7XwqCq_8^TOey!SW0{G7sx2e_1yQ+l4Gw_g`UgPa?_FKyLDa1Z-O(43JER z{WC${FgFE#9&Hi1#JE(ntypd=P^M$Uc@E=1NLt7cC1ssZfoW_B5_(~5i9uWxqE}f) z^^{+HLdhF}ZhFT~HAOS-QI8K$=~1T&6>Ds5qUCG4JyFMI=UFU5PSe7BY|?=f^-#Z( zi8!OX{bX)^ zouNk39pD;94%b0-i5}4JvHv+b_87|>r||Fq$SJsOGsw=tPG7o1@$~S*<_&QUS3_t8 z1P~W9Q-9g^E2v_ICT}08wvNUf=yq`vmx#w5y#^s;UH2UjS!fU=t=Vd6fCt#wAG%5{ z>ih5-$U;AXpG?mWc$kNXM;*X8;9+`3$@+$zKccdF69hh_M>ICN0SL-*zW6m7muRwl zhfPDKt+l3S#3GWJ&=0*ci=GIV1=DtVulx!N;dOpj4n{^Zb4?O^R0(`Nv!kOm#!cKX zx3S{rBvlnrFs+jUh&Z1=Bcil%QfBtvE;Jw0U zVx;8naILNJzOWAG4Zvdx%eFlJnUTnA?kB*W1970iM@Wq^wdtzAhx+Lr+h}jLxPGZ=T~ZPu zO2+C$rx)+L_@`pXb)e;#c@j^pqR<`h*Q@7Yl{0Uud4_VPj{X$nH84;majy&MX-7BT zU~&7svA?o(S8e^%4485Fieq8%5in-J9~R*Cbn#f|y>rAS|h1lh@ zD=^?QRh%{K7VG88HOC2t-3i<8K#k5tz^nrOG$>FsH~WIAoIm=n)2ppbp2W7J$+<7% zXkiw8+x9cjgP*}HJm4ZVIklwFbGHqGVIuZzVHk;A(x3I30#B&XF;Jc~3(0l_~JY3Z&>h za@77aZDBu>Ds60sAHMydzkd|WQ;gIKJyi1cLcZE0e^eTLRZZ(q#NtHTS7dgn0IGPY0GSWc_0}1r4sYSBTs1k*RIjh zWgu_XRQCS)s1jsnfnKP&h8P0!SzMxR3FMDszyCQrroNJ7sYA$C5=z1IzBa^W%415B zSu}w108B>@hs-vzsc5lf(Nn4pYM&o)UhA9Pnvjt8({aVGvy?_C_XC%R0s+^Fm+p~aeI(54WTWn>us;8|Ef!?-05DGzRW-F^gIy^t7Gbhwp`Z@fHU{{q!P3{d+20@* z_89DYnY07l7xxR%fW7KGk0k+)2o>tN;AJ^?+fme|Uws2ZvKr1ss63ODMj zGTXIQ!_*ZoYxi>@nVfawdoSNs!2&!Ur^e+(`mu@kt ziJ*w>P^@LfWS^~R^~1FfObwUSW{@WnAM2;o*WjEMN5oAvboP&1FDnF&JsmE-)~2i^ z)(f}o>f0z&0!opBh(tu9eIGT*itepJ zPr#uvkthTQ?U-*_j9E6ZL%zY3zVnP)%JjK8e0ts5JUdr9^#!=rWlx}avvXxXO<*Bh zzadQnz3TtCoJCHs<+P^j4Gc7}ZyX<3$(UF?^B&T%<8E~ixD!G0tI6%Y^XyfnOO|G7 zduJ-iuFS@%znkq2Q!+ZT4$>`ynzh(v)mWld8Hn|v6Qf7@LElKaG!7&KfFnH*q_y%| z$y3#jEI2n-v;yF~yQrWNZV$J_xB>pUyK#P!=?xe)ybl=}WE}||EIk&Pxc|IR)njSR z+}?rvQ!Y=+rbdtnd3iri*kTEm$7|obaO|}js^3zPy?IBRusbgVh()((v$X-O!%A|y(QW8*XO7`(+Q z=%U4x%QMqjLG>6Z3&zbQ)E~I~uJrL+M81F{VL0^Lp|kI&Ay8WsQ9vjnnzC@O-~6K4 zScN%E*ZY#7%b*H4c_lT}CNz{!FxPpQF~dAIH7$h_s;fE?bhB|1+7d{z>*PbKWaGBV@_1Z89n;mIQ0jznp~IXOuk_g>t&4@^^6&)!UXB_zuIdGS!NSaP zqrlyGsJsZDVVT)?zGia&kR}oACmPK7)TCX~BKzgFQI}&$C&O&vvvSt>(gcDksXY~4j>QmHeSoDRB)5{g-NjF_d+>nzS zGni98FxOTC@^iXlbU2ZZN=0&fNmT;b-)}~;h($=I&lN-0wXt!B4u#TFQDg(wZNpcs zQT~MO@2K^i_nd9sFZ2NF$;TJc;obr;$x!8)^3uWQ6cKZv>5f1EY=4W@~JEc zkPfWhNntqK+Th$5(J%W010S+jei9a){>)8&=b+z81&MSs{ZDTnpW?d=EOa?ww{WGN zd0jm{y#noRWaRH-y`-#+LXTx4@i1Ff$^^*t_?ES`whQcqbS4$0>pyhL*7nn_0BAs@ zX1Mh0!sPaQht^S*;PvnYBmwuP@XS`BHR+D!un#Yy%T3Rj;j}1@7vDQ4D11+!l!VV1 zanjuFdq|8o)wk!n5$O7nZ7mjWpQr9TDLdGo-LqH=RSh66g#-`ENU8P`+do`kfkT?# z$@A^T5Pd(#;UAIdwTCxc5(&UdY}wX$^S~1&W}<66<^WCy zCh{)a%eCE<>|dnt2zaXyi3;nF^AdXdp6mPlEb@v&+f?+#ss$ZbEK_HvO_&5wtl8Jk z1O`f^1{vYVME5m2GLp*c$Tcr(>xEsh&Il3U^ZzjZ$G;>T&nQyz$h(*5`1W*j<*Db496$1Jyo4R=-8#yJ1Pou zuO6sJV;^(16ZFYK4&oh3v ziM6%yX;AOj`rcm@3G|AyTVy}`rpp;rU0qDy%@X@5`STzJ8MUOANr+3m{f{>|l=h-4 z&7V#*KZMVkinv$#!-m%#fg-1D3i~5NcGdjdSbS7NMCGRd?Y=ignt#d!Bn5kI%7M5W zXtII~E<4i{zI9+=;JDm@?c1a&7fAzmQ}Tg~|DtH;X*9bR$0c zpRqD>9WBC^B0ti|Y1>yvA}E-h%GIi8K}*#b#_LqOXYOIxoXzpYbffN*B_&-656ty+ zkP#tqR&B2T8eHa>0%GcGB(&$*J9i~Kb}24gSzCL?R9=EIF(u9PkiO8RH?hA+IP5O8WcgC&a`O&g%BS413htVGn|TVt zxqgXLQR$y0d15slfvZcH>#mqH{|~@%H9TNKR7ODGEyjic8(tn7-zJ_@sob2(Uf#<{ zkVipuACH+XH-Gr|09+#om?Ag)kA0^6_ci|BT_+2D<>vq`;o&)P)aD5J&^i2HGlvM4 literal 15972 zcmbWeWmuG7^e(J|bR#VdA}uW~-Jo_u6}}b+2{bJL0Xn0xlLM)}u#{aFrBgH6J~Cd;xsE#drez zUe_!Y0saVh$mx4nx_tC;w6^hhq+soA?Pl&_ZAE9{LucpV@lk}E`=g_|vxldXBbU32 zr<2s~r*QYFVx=lmGrE5QZQ7 z*^kUcx$`jbbb8V+&YD ztJcdcgc!mL#{v3QOn5iu+Oi$$6d)ye3bDs2_26fiKQvYN@;s9A7!EI zYb%g_aZ-xv$de)@c$T#I_K;Km@l(Qn>AppQuV_?_?_KCfQAx1rzWyzE`V3VYwO~o$ z>(j*WXr@Lx0s#a*1u|n?kW@c;wGDbT*6R-P^70aPhxtv8Wr}L;xnKm*g~yhn62Bop z4TKS(N)f>Er2g-ZYoe%9BYNv~DH;iN@ocY1Bm$m7WC-%T3C*6cr!nZf_w{9?0*BER zx5NG2+kPc(zF}f6$~bm@cx-DFWHD|QVDd)O%{TKI2Jjdv!($?0tu&|JqN28aJl%xf^Rvd?$zKzS`#E40&WoYhg?wa(i zTk3y>auA{vNt=lQf16s62EHBiaHg&Ix=Zd>zf*1-_RQ%s{JIUuz+#IzDQBd|@(UA#lwB_WOef;>UxpKz64~x~z(s#wzWV%x`e7QLi0oDCN%@742=D{af(9&95yNGzKyKS-QU>s2O zpgwLo1{-#WP;-m!G8&%En_Qdo?wi%wT6pHNaim67Q zzplX)zRh`uSphDi%&_qWFjyr!js9EuNE(Lsr*o-cvXQ>@UZ5 zHTUm>JDwfzi&2B!2EFFZw1(r_KejI~c2BMEu02Cm_bK=sU!M0zJ`>r_r3z(HF)_AT zUcx1u$dp+95{{hFaP_!7s2c8ZQ7Xp;?{GqEqSL-OvY|mz#Km6|63nXe-+#JS$Cp1x zNh50>v+?!)#&>w2ghZQMX(NNKs>|Pss)THBk2l=I8KXxLh@IEOiH!mu{M7^0)S_F4 zbp#ER?fb(0jT*y&NR*~Sw3|C^T!FfRgrD_~wGk7J`qZ9)$W zzKV5<*xjN^w|JH5_N19bH{^|NqkS=+K%D$c+^M28BF z2eH)R3EyG4yn6&A2!7{Q@tpOWMI|)cNfPT|@-u8rRFEWC`?^m(ZH;_dq31eYbKQT( zD*;ho@2W3J1lB7U{d}DeyAf+MZb13V-th!^MHA_0owZ#ZcZR6HN`3KQ5_Yx@zr=V) z9?owB0qf~v*`nRzJ_Pdt=un+K-tQ2rZ;*oT7y5y#m&J1|dHB#+;bb!R&7C3KqFxr? zPztpuJA0oTZogRjop4IF-M zPucN2c;1qGN*{=tSi1t9s+XzUR@HqZ@?vL(`~?@Y#7UMIC`dH0&AYkIV{_*xmwQ6_ z_IiE@e;iD4t!>#DZ8jxpwu$s~MFA&^0n#YXZenT9Eg?I2dAxr2nw1`S1z@7n2NQX) zN2Vs_S|0bG-{sVJ2Tp{a?M9EZl;~4j(V#%PK};uEli+}70sPZ;QE-g0z$|+sJ#5|A z)bFiw-nYe>9xp%V*5s&fxSM>Z5Mp#a5dG25&;597qaW}7{$R<~`50ea{qii6%gvch zcc5di3v_>aH}56npv%O}(m0C_uXF=XX16iTn`hL!dPzcFUDn1_;G>2-r^O%U!kA zdFy8E9b8kUC$s3LxY7#p$icvL?Ff);d^xmZGM~m5*65f9+i6lCFtz60N1hIzWQnF= zpdPP@y4+n+SL(mkK7AI6AZWBJ1_#4ZmHV$!86_hRO-_K5teu^Dv#Dg!=5_79 zvs}Z8otb&KVBUs;qu>eo)0} zGhX`%39$>$!5fICQeHFd@J){D7|EZL^sv(y`9WE1^?r@?g!&Imkvw2W7#g|ZRWK+; zI(cR3!vJP^sf8F#30^2qJ35Bg4HJb$5RX4N>M7}itn9Z zUax%SJyf%KF6|en;J97#CyDHNoDxsbS)Pe~HtVKd2DKk8znDYEY6!cZT*TkeVFP7V2 zqw6=NkaKbLxL#;z+U9aBrNGC7`KJtRF|ORhN<~z`p>k%)J~v*^s1o;nucmr){_8#? zwVs(aXFvZQHL3fS4Q?8^*BwlJIHs*_*x^fx;9*GXMEa*ka>wZw=0}KhZ_)?C9NZ}s zBLgIx588h%@50D#cp<-HO{BR&E@~Wt_gO^rsf!~I(cG}(x+s>0xjJQ`GIW2>9+28LT3UZ-#37CV0;=a_R!&P(=)5j9I$9QB zWM~Y27^wEpd6_H#7*yH?4gCFiseHKK-8s4mh_B}8PYO~4Q3uXt%MkV%cZ;~k*8 zyhR{HH+-~bC=ZeJNl+wv-|27C1rlh(fp^?TMcEp6gK*dV!tlO?;a9mVsCRx?@S2(u zZ5azj*Q27`e=d1!z)$GeGrG9=xmv}Pjmpr&HBHGD57CKD=C8(WY2h{HT4hSTbV64U z64F5}+E^G1V5*zzix!Jf1-YaAp1*v+7GUlHVMjtZ1UdL;qkoQxJU-viP*l4hL7Hz! zX4kY;znYo%A~+S|9FM)O(yRIszJekxZQSO;ldI7`2t&NSdr{!#>Ry8iDciE{`g6fZ zD=9Ht`S`@d5}|JA?p7OsIOE93v5nPwTNvDnaY;wx-Z7aeEc<@7emLIfeV##`JaDSO z;^If>`08(&ISuVdp5<#5Rvwel&`fAkEmV9nF*Rz#ykOk(?)}oj05$_);c|nVC}L>| z*M2&`yFf(>^#hyC>e~oO)y+XZ$YiQ{uQTU2-HLS6JbBM+hRexX-tFyAL%2Yg+WPrJ z-1>HbX#6SU-2Cn;HCR|5NnO543vKy<$yxDbXOh+?t))e>T6M&Ju2fj4S;3_Sk9P2& z&h`^VTTIL!R>H!>g!W;DN~5Oap;viPXJp)HZf5in67FZ4kl!7m@0>P8tAJw+cqFj{ zr9_T`yI1S9lcp1Cd|sPF_dOiysw)bh@8-R}HNWta%xQd;N9fO%{`Yt+kuOfDHBlhY zc2F@*sGH~jBjFn}h>wo4Ar*4KYE^SHV~61B{# zOr5T0+kO71XNkN5d&AQB6tGc`r~Olh-ive?*Y#x@0SC3!_d;WjeK%MoMV&Oqj2V`}OH6c`KnAV1mpLnkwhMC~ zg+-ianffE|Z~%P8ZJPhHsnh>c%-J6Ir%dq)&Iu4jQe*};cn1aA(lJ=O%@KXXFIc@l z*fEH4V2_9G(|AP=uM`HefV@xEXf6&G%vJCs7!w{X6u%SK(y}~jX zJM{D?wf^wvDTSMjwZc|{Bs(vpo5p)vFphrV28c~PgvXnWkziRbpKDyeD>93}W4^Dp zpp_jNj(A2Pkx=I*3~WHa$B5<|0->nD+Yl>-2#5|cY`zx66`NpQyb_P?Cs3UO-Y!8K z%GwfgcnqqZ(jRzCK7Gd5K$yOn>brx;4&S8f6Z0qVO1yi~MxL1{wf-(pId@^45{CP^ zM28=U@^!Tl6p{r*uqV*OuDp9uMP!f;o{u{rmU>K*k>!gG$1j15$;27*ySLZp zS7Ye^!Hy(86a*_7ZP965`n3}Fcje&)YK_3LVKV2W@2~VsNgdF{^#k#MsPM{=h^VC}e2Q8tz?d{2RTWKFPrPuse ziKL^uK|X^}d@~Wc8ex*=dFl%^Qm)(Up?F+J@fUo2GY1R3K+E*rs|4qD&OEdb%3xUk z;3OC_kvkW2I=x~03^H$GZeG~YA&fYakoeHNW#pGkyD4E^S^`COo% zQqxJY3ChFUbUfU%#YNBIr%H`lIB-1HcFWSXRp-6axmlh&L5H-)3?~Bu?%ImRD3j8s zPeAc^<*O^1tso&m-f8Qa9tI;fYz3k^YGbnwWos%BV$|)0W@GYpP2jsg7o`TF(t5(6NPyC)EE16*3?zR+i{{kE&S$i|t}R45I1 zEHiP`e>Hd&6y(w9nUk_`hDrP-(s7-W#$LD6pZbXqJp=?(kAl?-UC0;nz+j2PCk3E3A zHiSzh%R=5-p4{benYJsA(-B~VJNsiLAVD8u_6)A6U&|g<#9_ta<+ytM6+_A$V4P~V zmNocS#2^$&Y5-Y;%(r)qnm}-UK;Z>_DX7*nt6K2naFAy;Hmxnrv7xARhZVImX1!eyXi zOpJg?)0XaT{9WcQl;xkDo<4p09ykRj^*-mfKpm*I_KB=u5l5%z;J21}a`=S%od<`6 z&(D?4-yJ({fU$La-Zo_S2uMb$V3*k@lVv?AmU27m=vg2GvIM=4C%V>^qJ?7(16?4A zgQhVm9yGy#O^Ig{+H}wow`;8R%t6e(H)2dI(8zf*cjV-?MfbujlUu0_x=e00a8dwB zH>+*N!s6$2^y1F|t~E^Lb=2j+WTiNsjkf0a2i3MpnWrd;- zjt0X(mmyhopm;bbn!|Ss1Q+t!Vg>7Q-xVR_HRgHN`{nkQq86zS7HyGnplX}>ft8p{}{5cA|(9PP)~VzxYXU3&q<}G`LFY;zYA?wz#6+a zNxsO7dV)~Ls+h|;e#wjVo`VLgCw(iLF$umA41QWagVAGYSn>xcVpERP*fU|a z99exbOv1HA8m3g59r$-oSGqy(sUPZa1=>>gd=83IdGt+(ggzH?frpytYngOY}=%y`F(Y#q^fBf`NX8 z`-|gG{v!qDOBuZfX>tNhO!wPzMeWFQC!do$S7~3c9y(#I*{!qa8Xo33HKvhC5bWzS zBZEW4oap8dagfZ13k|BK4M;$_1>#=eSf=!CpKVd_=tTA#s=rNcg4y3vZ7MmWe|@dk zx|chH*$Uf8^@ByLnp$VyLWoyj2w8V-GvwLkM0Pb_vijF8QBQ1gXehN8Dc||=9Mw-; zBGT?q0-5jhE2v3jjozrbNALPTNmB|gzDwI!2(ObYJ+`3$c|1{}7mU(Yp#dr0+roZi z5h^op(#zeJ_4Q@_ooNR5@m^c-9Hh>_H%of==0h1H7JT$`8rIK#I<+HLV56R$7UL@;`oxHA{`biz zYpS6y`+ZNd#LYib_9?AXVMmVaeEeQ%9e2^5D;~B}g}X1#s&D=5wYTrdUy`j>vl<&` z>vC6cz}+Y@uy|OsVXP%*T3nc6>e6u*LZqatwy$4sl}D@f{alJT#r(@_GqF501!XRc z%I!2Dw1yd1-jICQ)*VRS?X-N4swu_lWod4{+U_e}3H?h<8Y3+E+e#R4&XRRMITfru zoX-ORXZ^olYK*x+f_kd&Xwb1K zDj`K2(~6|JqFxp)!e|@!lIeSOwZapC?u*m5o>&IACw6$pIcJ`FQ?${&G^+~mVQ{TO zJ&b<@5Oz#b3k%dy^9>1bRC(E%^#F-$odW-gdIfBrw;OYeUna*3l55r^h+Cod z0if^Yyd4L<>C=Ek!0;qDVw`;};slut%}C$l()uSvEPU+7{ptt{;B=<2iL4Gw!4Fpb zNN%0}mRZ5Bai!e8N}VXVHAeAnbcdII|2zC4@>A(^z)iHx)+t<0ER&Q`Wq^kRy7w@W z08xG>lVih?!g-(Q1+x;Y~F> zUxv-^D?KjMp=1uVKK= zM;)=9^c+9M&~1Q%p^}%G9g*JtrXI@Dv8(M%e~BTIJk9J%q_h$Jo^ba(}@l+a_3ju4Wk8)W6wTLd;M&pNVDDB6O&rN zx%`>HxBot*qfukXu`x<4uk$J{%AacL78WqTR#hcRKDWXP#5M7p-6+-rzCx!rT0sEK zbI0DOLE%>~?cFCYu)~6R@VA$XbD2VSlEc2MynXi>>5=@MA+SiLm-RqtQR=PSeraTr z;&Y}vF>`GJ+O$Gic}aaSw;W&kQb`Dq;}hhIfl{BZLwQ}oI}2(d)%6%ct(#Db^>5w*p@jG|wN*TlD8ysvkLlh1*p?IB@3k*|ei|=n)Rd-Vn{_1qw8Tm$0VDMS zI{c~%RrnH`g7lRzh)9zSoF&N;E#Z<;C;^%kjGDe{hh|xk}JwQ=Fkp0*mP@YY3wzATz_Qi`-3x4rAuU_0NFEd1-Ki}3Wy0u+F`uOzpg^xWFg zHQmgTJ20&2n5V-C;*WvBOgkd%L^7)m!neIqbLv3dtk_aoLQY9BDO_`hjxXxdM6koJD6y!~z^B96G16)x!K^VWR;|&?SLRC-q zxByl3Bn{?4HMp@5_vOLW0uEs@Fe39Rys)>%j3)=MAZ4yCnM*%qbf^$xd6YeszlZn} z(a!)&{ad-g^UFC`?v5TzR-mcxGYNcxwmW#{&0YM>s|jzhbW>v>z#bpRex?Rc|Y8N&y8Odm-o)Ms) z#=(Hc+7Ay)*3}eAUk(L)(Mp2?j^a+qP4JK|c4#%QVirgSz5*aOUF7=2$JCVd1O_%cCc z?^cmQYyM$B3qy6_wh2@r2nJ=sUN?=zm7o5f&Vmy>0nVox=_mhe9w zS2Xk0qo&{JbhLc)=JOjmx|p~!MSqKaLACB23NmT@K9Sd7$c@nNp+n{s97KmZ;;;Q> zkD|&q3rj*uocf4PCQFsqZamGZ;*xuVmZNYGUarMew)*nki(AFj*n~eG-vnhPqkEFe z!89ovf``m^a3K&#AE6t`%=9#nAhDO)OMsg{`a>t^vVKfQJztr6VeA6$c;o_9&RNq7 zi3%GDRk|e0lG&lqj^WqlqN0kEVtpU{2%You-&!OFT4!E(uvN(uV7j?7hQkqvr|9U3 zIjM<>TJ&n?XZDi9)t`7SNTReC5Sc7K@E_O;ePoZ1(>Gd6=!OGT~ z7T zu@?V@aT;Rq-3v`GT?a@=toA>4tTXg>caxz;rwhDT0h^wmhgPcKGhJ7lcuYCvu}G+@ z<|Gx>{O%ZS{UpjJbQN|5s{^RkrvWyodpMj~@r;+Sug=y#xb*sxInS$1uyr^giTKh* z_SNwrdxs}-?76Cr!;stN&{9Q?#}s^}NpjwP2R~bgHqfO-mofg1%?+(7*E#r{WE~fJ zY)8Hd{n)!QEL^tZnl{KQ-EaFOSaf-_|9Z3-Iaf9dgJcvJ%za$za=yFC;CEX7xZYDG z5Df$NB5DI`M|_^zKsdPpp!*n4&q1ClP^Q%R-!*CL7^a)`n_@dH@5;+M>XAS?0nYrD zjn_xlnI#YGXh%_Ar7`NjeI=8dcVO%66`Gk441Tg zy)p0K0Xhjrdnw-Zl5m*%sMd?gly}H)thzu-J2t6d!#x}j0DmPl12=uPV~WN&$cdD& zOiz3bMR_9VDs1L&f3jqoGqUCflyGC8FMXE+rx5bd(Pv@bm{-f3(V;iUgZr}&tXgMC zwHSRh;%3&m?^tMPPa5{Aj4Kc{tM(r6$o4x2Xzi@!cT1qf{x##WCY2a6D)vdpzgors zN2#TW7tz_^dr{715;c^SBj_|6hQGw&zF2J<7-%#$raBl)JHP@7d#l%gBOilt86!Z+ z+5-}8qi0mOwB-f}PBi@EscLhRfvc4j+AnxV1^@xU$Y@f_vIPdJ{J8;uGz6eF4fIo4 zP2a4*wFjnaT>v>pI=}teR>R8g-{31}Tir9n`8V~f<#z9Q22J@?Sd)vw#okPb^Qxhs zpjijlr|}73nIm?=EKULAy`0CW(qcY9O1U@TdA5Ri%*^|mUc&XSs(!;QoJJp@kxzMk z%oe!lNoz#viu6OjaLfLL#p@y>h)w$*s%585Ln-aWkr zc|&8;+Dbp-sce+SYIzK`(G|?aZA+zh;#pTlzE0vfDxU*!K%Pu`@=^->7QAZSN4GB)g0iQ5MX~N0 zsw(EBg&O{-D=xOto!K6mn%bkpj@_fPoTOOQPhR+!XF6S&auuUaO|7^7!#9nEK_$s|{xV5P_4caO@0!2Fu%XoPxL&U+ z2G#YH_c?UWOZv!vPxEJm5g{NPW6_`~(SC3hSoXrI;IR()$AZy!m|-0jIBeb`M$1f| zHHix(o|TC$xkd&Um&Y$dySMPCU)nR2XNrQz@7tO`*xw+3tbac5wmyYw%*2GhBF|ZLp&o(Cj zWMp+C&C4;6{nLfJVr{@Dznr-p{O*w}o`$>vG7C&7cZIiHp* zjQo=GqZ^aRpe}NV2o2j&ib`45#$WoUse!J4z9f8N_L55yjCgmr_3quyHJ~3M9GEW< z^!})jkz;u)I{_PrK3J$S+ll0+oDtR&;k!KgmFAmHIdRp@)wm(k3w1IWb8b4H=U(Ft zuI*ut=~QTnoZ>&(W>Cm|5@2TD{)gs1+yMt?6F zQaCeu7``(BbNp%aw-=~Qz2iAAJB4x(8ne1?QO55bLj6VMn)-Y%9Kyb|2EsPb z9uy-s-L=!`>%yEG*_$uj{1Z{&>oQ)_J-WJAiNn>Q;x=rlw%W!{gLc6F_aiumIbi zBao5Fil*8*&44M*K#0*}ZspYtI@HDdzrfYevqT!!pD8+X(m)R zX817E1{`-zGt*5>C3ZSTu-oKbLB-McB8|k|RKsXqvrY-UHm`9&%BEGO#NNyHBgN_0 zzOYD4QS93n8BA|!puLc9A4NH(nl%@t;(xJT{2h#;7W2DI1qx)YY4P!*s%p`g*IGq} zDx>kQM^%Na0=u%@iVyY=Z^!c#FlVvz4$KE*`d6&i{?rYuwBzf@U2aL}A8vZeWgW1n z4ul|*ey?pZVc~G}Bh=A7Yy$2PwhFP%-^d@)(J;M9-kU441j>pmYPC$UU;g+3tRpX9 zY^`PK`fLfx20iLDPT4#-Ww9am?-8X!tLq4jNZvDR3wF`_EZ=&7DJ}fnnw>2uAiFam z52#xn>R34HYBK=oxbHvZGof~RngGL(p(P9$dZW&$U=kStb7rAIPQd-Q$LKAdj&5$) zYHH%Wdkjc(cBl0l9Igk+#{mKt*sa_ZpTkeNO>rDoTbWnIiaqDc5zX>J!M)+mtIMM= zdv&C*J_8O*i+JWPL$N>`qVgOs5!gMqxx1;121jAEV#Q^e5B0wbjVpPSVA6<)o84O* zEs71{X`8eqSue$K_IF?WiA*qEU9+X6jE3|*%&VUq{c6I(hk9*f(ykg*Fayo0x zow)e!V9ndy2Y)Pmd2?m(tC5q*>y;lC`XfbbB68mRolIfN97&BIGg)2ZX_c;ju02Ys zElWcTwJf|p%l4KEKqb|q4}Z}+Uy@{Vsns{U{#);0`*vS}efY=C>EOrxZ7kaaiWc+d z{)3$=U`2g(Mq5-E_i6~VHw@FtYyEj{SanH1wqo<0r1JYQ^N4mOz+cynVz9U!rD0bY zLsZfyxTKn=1B&XnO|Y&vA_ri0`y`<0Lt?5HLDT0f+(g%}@f1z9WdPJwtoynY^jTPC6iQ>%r{*+WyAH(T4 z>^=z5!;CCq>J4nxV>BOxDmZAXBq4|ilGh$~0*Es=bkokKMw6?h!cn-nq##m1UmT1;%aVNeDXlPoW-te&s87Gwwt zPpicq|9(LII^{8c(nM#PEkC%77H;8t(wKU`Y+ISi^@ON$h(5_qTsIe`w^W z_keA8xGwmCsxZ+=e=kZtMKU@#;OfPns4Z=2u(!jj$?Pp%YDi*B!g$e_3rbqAMsLQ% z9rcfTSLoY1Fa723KQgbw)8Ysg0DKb?P@k5z*947WKCZ(g=y`lF8~!ku6X+(GLig9Bsy0;=<6otKP7M z#F7$r`99k}d_=t{Oq9vA;GHiKmN*<1B8yC%1{48fMsXAqXiO!O%Fei1h`*J-;+++m z;GL-Ft0N54-m?**qj|Si)jvje+21L}OR$zL^n;qTL>bFSp#|cdY#Pm)5!q(U$n^2H zks(&EWCJmAKd&!rKky!t1=8(oHk1NwV!KD-x24{3kCtS;XR}p2(39Za>A-miH%Ih= zobCPh-TMENZ5pNLO!(~AB^c#-`Oz2CK@qlANxz^n%h!DUA?)UN6mnIPTIJm}_fZK5 zyzuY#@allXs0&8sFyOl(HzP^S^zIseCb}n(JbUF{kn4D zOn5@Arlkx)hTdfW5Bmaj1TUd$O{V`c?d)?qN@jlCOEaAdTLiobS;~uu(Vot)cc)Rp zRMRTSH(?RX`s6&HyQ`juf|SgnE^*10NYa~GDxJ}@{(q9Ckc)a3(&DUc_O1Zvx^kmj z0?X?1aj7;Ec=5fO7N(3Pd1N14lxV^ynkFDj%C#~WW=GAB3y*Q9-VuSv%uCG_vq5

JxtaI3)DWBvX#7uGIY3ng z=nLF)aZR_5z(+$V`hB3#1CZ2$hi7vP<*c- za&!#1^e_+kR2GWeX+tXvAo`>t&@gOfX2$=5E$NJy_$r!ORDYu>a`sJH2)^$0f69&0 zfQdYys&YcD%b95Y%U3m%6yp79+BZ3z@dy-P(u!2nyTWdjC}|rvsoX5g5_S*gx>3t` zesnZ$U<3Hx@$nlmpM+)*Y~+WGpC+EkIgkZZc;FU-P#G(A8AlxHb}4tOo&jx#5f6c|(_B!VsdC zuL283$s155mGd&Arukn@$YZeI{p~uSc&oE)jlx6?xcA8>3>1!HWepn&wR#HVYUUQx zmxl(l$A1_IhR5#$shUW_!r@KW3j}04O4I>d$Ol15Vez4GY~eZ|RIe)g;&3UgR+T>( zR_f?Zvfeh)$kU^~(e!Rqd50-m;!`ycuQMYDeRpTkZ3nHo0Cd&~_DLpOFUr~2{T$aV z6(ZIq?x*|Hx-$TIMMU2t!GO!K0p&7A`2>)?$;S6UR;H_q@^5B9jj`to`>HG-ymCZP zj}YP_*3mF!^I;&~fKa9LV*}?Z9kCYApk zAipyhkW+x;3&HF);Cb>^Goh)^tHi7mZz}NhbQ_2TjqucktOQWNg~{N28U>0DIu9nb zBZaDnOyNMvYR7d#U@%E5Vuc}{TgQr)%C^-Sc8P-f*q)xoxiY_tAlZ#rI$<^zDAMH@&IxZhD%W|D7WY;2Q&vRIjQ{{`2* zMamQyK&3fQeE<^qu8)>BHokYhsrxzScIjU?{e}cOz1ogGRM1ZSc2DTLDGil_9v(gt z!NB!ASXm11_nXL(qz4Gs^xD<%@iUwnyGNwhxYjEomVBAgBBn?zy20GncmgK zNx3`o-Cns11jYUxjf8rplXbKg+~~XZaU1g6A1w=eytfs~S4u=n;d(k1APx4p5tR9F zEHyR*I8>x^+Fv7VBu=x|ey=!p9h0e?t}oZ}iU&Z9DW`Rhs<5ECSrc*PY_~ zkjpw-TN+6TpYy`c8lQCe)mlzW0@|`pW(UvU4I5gtEE>lLt8K*bp_zRo?1il@!tvO` z_6Y@1!ylYqq<3WU*&YtX-z}|av%W|NqDSHx^<)9Mew~q24?KwZec$&9m4320Mepz6}x2E-a`kE~?O2&lKVghl0Pp#wqks~)g{R8bmu-gxmPh&gz7~({S zEp7lEyBq%DNOn7^j}px;5b%fjIQL}vI{#B)oi3C{j(3BS1zoZwt-tC38f3*yO$4Vi zv&I-Ze4?|ERqb|c=YV6`cQJ*5OXq(016PtqZd%GIpVf)3=s*gWu4;i}r6!=OyDFX- zh$pEHpQ|?S2nudub9ZI;u`t!yc{l+-uTh!P?FRJo*?t+z!MU2(p<|x>2jos-4S*^_ zms*5;y1?0DI@wne$WVc+3CqiBfTVupx93OlsgAaqnwrO}PYWuvnO#pyDvZcxD^0Y_ z%x*GV`A_sd&_#G)9RY5E)c``)mNN!+onaKhcwZ}SHD(kBP<)nJ`ScUGfVuN0V3fFw}JN39>Dd!bDUA!zEJ}mR#nX2H3;;rvDJ27Zu3?4MC#kO zDVg>uqsf9lEu^QVO{<*2N_EOcd=H597@nDdmB|@4E}pgVC-q^4(x07}OIH{QXli{5 zMUp)%b|CDZ87>zF?w8Y>J1=8qvwVLYl~xHXKqa`~={bi<3w`tnIXSA%WG27Dt z5_fgrL>YiPy-ykD7zi+SHUG|NPa)Mw=|tlM&d$z8l3?kUADQ(@2&7aWr^}N<_s#*C zmo_27pgW!I8an*M3cXg|-`~IG%)}k161D6J!23hazfl6}tE~~xI8QTC`B%kP zeNjK`+3s+qz|R=E3HZJML=OFZBo|sM({9iAQAP|lb>(nVxtW(m0N4meO6PN11PRpr v|M(2t5B3M-sdN}mfXkdgbQe>|N6$^-G@mur{spd$KT?uYm#vh3AN0Qf+g4LN diff --git a/Structural/Bridge/uml/uml.svg b/Structural/Bridge/uml/uml.svg index 8525670..e7b8e4a 100644 --- a/Structural/Bridge/uml/uml.svg +++ b/Structural/Bridge/uml/uml.svg @@ -1 +1 @@ -Assemblework()Car__construct()manufacture()Motorcycle__construct()manufacture()Producework()Vehicleprotected workShop1protected workShop2__construct()manufacture()Workshopwork() \ No newline at end of file +Assemblework()Car__construct(Workshop $workShop1, Workshop $workShop2)manufacture()Motorcycle__construct(Workshop $workShop1, Workshop $workShop2)manufacture()Producework()VehicleworkShop1workShop2__construct()manufacture()Workshopwork() \ No newline at end of file diff --git a/Structural/Bridge/uml/uml.txt b/Structural/Bridge/uml/uml.txt index 88015af..a1100d8 100644 --- a/Structural/Bridge/uml/uml.txt +++ b/Structural/Bridge/uml/uml.txt @@ -4,12 +4,12 @@ class Assemble { } class Car { - +__construct() + +__construct(Workshop $workShop1, Workshop $workShop2) +manufacture() } class Motorcycle { - +__construct() + +__construct(Workshop $workShop1, Workshop $workShop2) +manufacture() } @@ -18,9 +18,9 @@ class Produce { } abstract class Vehicle { - protected workShop1 - protected workShop2 - +__construct() + #workShop1 + #workShop2 + #__construct() +manufacture() } diff --git a/Structural/Composite/uml/uml.png b/Structural/Composite/uml/uml.png index e3534467361e12a0c4eb00b49d290ccd748b166f..0009791d75f3fafb9fa3cc47995704fe634b3a73 100644 GIT binary patch literal 12745 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 UBC?0{{udd^_iszy7=8Kw0N&l%IsgCw diff --git a/Structural/Composite/uml/uml.svg b/Structural/Composite/uml/uml.svg index 6c1cb5c..f5c616d 100644 --- a/Structural/Composite/uml/uml.svg +++ b/Structural/Composite/uml/uml.svg @@ -1 +1 @@ -Formprotected elementsrender($indent = 0)addElement(FormElement $element)FormElementrender($indent = 0)InputElementrender($indent = 0)TextElementrender($indent = 0) \ No newline at end of file +Formelements : array|FormElement[]render($indent = 0 : int)addElement(FormElement $element)FormElementrender($indent = 0 : int)InputElementrender($indent = 0 : int)TextElementrender($indent = 0 : int) \ No newline at end of file diff --git a/Structural/Composite/uml/uml.txt b/Structural/Composite/uml/uml.txt index 598a697..933d4b2 100644 --- a/Structural/Composite/uml/uml.txt +++ b/Structural/Composite/uml/uml.txt @@ -1,20 +1,20 @@ @startuml class Form { - protected elements - +render($indent = 0) + #elements : array|FormElement[] + +render($indent = 0 : int) +addElement(FormElement $element) } abstract class FormElement { - +render($indent = 0) + +render($indent = 0 : int) } class InputElement { - +render($indent = 0) + +render($indent = 0 : int) } class TextElement { - +render($indent = 0) + +render($indent = 0 : int) } FormElement <|.. TextElement diff --git a/Structural/DataMapper/uml/uml.png b/Structural/DataMapper/uml/uml.png index 31cb39990ad708583f72fa77869989ba3774c9f2..fabd1a82b9c63a4c7b166b8fc6ff0359dc8d3685 100644 GIT binary patch literal 14730 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 literal 12696 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 $userIdprotected $usernameprotected $email__construct($id = null, $username = null, $email = null)getUserId()setUserID($userId)getUsername()setUsername($username)getEmail()setEmail($email)UserMapper$user : Userprotected $adapter__construct(DBAL $dbLayer)save(User $user)findById($id)findAll()mapObject(array $row) \ No newline at end of file +User$userId : int$username : string$email : string__construct($id = null : int, $username = null : string, $email = null : string)getUserId()setUserID($userId : int)getUsername()setUsername($username : string)getEmail()setEmail($email : string)UserMapper$adapter : DBAL__construct(DBAL $dbLayer)save(User $user)findById($id : int)findAll()mapObject(array $row) \ No newline at end of file diff --git a/Structural/DataMapper/uml/uml.txt b/Structural/DataMapper/uml/uml.txt index a521833..215a9da 100644 --- a/Structural/DataMapper/uml/uml.txt +++ b/Structural/DataMapper/uml/uml.txt @@ -1,25 +1,24 @@ @startuml class User { - protected $userId - protected $username - protected $email - +__construct($id = null, $username = null, $email = null) + #$userId : int + #$username : string + #$email : string + +__construct($id = null : int, $username = null : string, $email = null : string) +getUserId() - +setUserID($userId) + +setUserID($userId : int) +getUsername() - +setUsername($username) + +setUsername($username : string) +getEmail() - +setEmail($email) + +setEmail($email : string) } class UserMapper { - # $user : User - protected $adapter + #$adapter : DBAL +__construct(DBAL $dbLayer) +save(User $user) - +findById($id) + +findById($id : int) +findAll() - +mapObject(array $row) + #mapObject(array $row) } @enduml \ No newline at end of file diff --git a/Structural/Decorator/uml/uml.png b/Structural/Decorator/uml/uml.png index bb14f3d9f167443c92699cd4eaab2668fa16e102..e1e83f23f5827e4adce5053f43aa1919224a0d13 100644 GIT binary patch literal 17063 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 diff --git a/Structural/Decorator/uml/uml.svg b/Structural/Decorator/uml/uml.svg index 6dc608a..2abab18 100644 --- a/Structural/Decorator/uml/uml.svg +++ b/Structural/Decorator/uml/uml.svg @@ -1 +1 @@ -RendererInterfacerenderData()Decoratorprotected $wrapped : RendererInterface__construct(RendererInterface $wrappable)RenderInJsonrenderData()RenderInXmlrenderData()Webserviceprotected $data__construct($data)renderData() \ No newline at end of file +RendererInterfacerenderData()Decorator$wrapped : RendererInterface__construct(RendererInterface $wrappable)RenderInJsonrenderData()RenderInXmlrenderData()Webservice$data : mixed__construct($data)renderData() \ No newline at end of file diff --git a/Structural/Decorator/uml/uml.txt b/Structural/Decorator/uml/uml.txt index f0332ec..2561cf7 100644 --- a/Structural/Decorator/uml/uml.txt +++ b/Structural/Decorator/uml/uml.txt @@ -4,7 +4,7 @@ interface RendererInterface { } abstract class Decorator { - # protected $wrapped : RendererInterface + #$wrapped : RendererInterface +__construct(RendererInterface $wrappable) } @@ -17,7 +17,7 @@ class RenderInXml { } class Webservice { - protected $data + #$data : mixed +__construct($data) +renderData() } diff --git a/Structural/DependencyInjection/README.md b/Structural/DependencyInjection/README.md index 5c8b453..185a550 100644 --- a/Structural/DependencyInjection/README.md +++ b/Structural/DependencyInjection/README.md @@ -14,3 +14,7 @@ Notice we are following Inversion of control principle in `Connection` by asking * The Doctrine2 ORM uses dependency injection e.g. for configuration that is injected into a `Connection` object. For testing purposes, one can easily create a mock object of the configuration and inject that into the `Connection` object * Symfony and Zend Framework 2 already have containers for DI that create objects via a configuration array and inject them where needed (i.e. in Controllers) + +## UML Diagram + +![Alt DependencyInjection UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Structural/DependencyInjection/uml/uml.png b/Structural/DependencyInjection/uml/uml.png new file mode 100644 index 0000000000000000000000000000000000000000..f38b80b78218db6da486af7ac3c4f10c618a1a15 GIT binary patch literal 18347 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 literal 0 HcmV?d00001 diff --git a/Structural/DependencyInjection/uml/uml.svg b/Structural/DependencyInjection/uml/uml.svg new file mode 100644 index 0000000..1014592 --- /dev/null +++ b/Structural/DependencyInjection/uml/uml.svg @@ -0,0 +1 @@ +AbstractConfig$storage__construct($storage)ArrayConfigget($key : string|int, $default = null)set($key : string|int, $value : mixed)Connection$configuration : Parameters$host__construct(Parameters $config)connect()getHost()Parametersget($key : string|int)set($key, $value : mixed) \ No newline at end of file diff --git a/Structural/DependencyInjection/uml/uml.txt b/Structural/DependencyInjection/uml/uml.txt new file mode 100644 index 0000000..b6765c5 --- /dev/null +++ b/Structural/DependencyInjection/uml/uml.txt @@ -0,0 +1,28 @@ +@startuml +abstract class AbstractConfig { + #$storage + +__construct($storage) +} + +class ArrayConfig { + +get($key : string|int, $default = null) + +set($key : string|int, $value : mixed) +} + +class Connection { + #$configuration : Parameters + #$host + +__construct(Parameters $config) + +connect() + +getHost() +} + +interface Parameters { + +get($key : string|int) + +set($key, $value : mixed) +} + +AbstractConfig <|.. ArrayConfig +Parameters <|.. ArrayConfig + +@enduml \ No newline at end of file From 0a47cdaccd752f18ad9b4a01555e3031c4b001c1 Mon Sep 17 00:00:00 2001 From: John Webb Date: Tue, 29 Jul 2014 11:04:10 -0500 Subject: [PATCH 13/21] Added Facade UML --- Structural/Facade/README.md | 4 ++++ Structural/Facade/uml/uml.png | Bin 0 -> 11877 bytes Structural/Facade/uml/uml.svg | 1 + Structural/Facade/uml/uml.txt | 20 ++++++++++++++++++++ 4 files changed, 25 insertions(+) create mode 100644 Structural/Facade/uml/uml.png create mode 100644 Structural/Facade/uml/uml.svg create mode 100644 Structural/Facade/uml/uml.txt diff --git a/Structural/Facade/README.md b/Structural/Facade/README.md index b7e9156..4a9019c 100644 --- a/Structural/Facade/README.md +++ b/Structural/Facade/README.md @@ -15,3 +15,7 @@ That's why a good facade has no `new` in it. If there are multiple creations for The best facade has no `new` and a constructor with interface-type-hinted parameters. If you need creation of new instances, use a Factory as argument. + +## UML Diagram + +![Alt Facade UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Structural/Facade/uml/uml.png b/Structural/Facade/uml/uml.png new file mode 100644 index 0000000000000000000000000000000000000000..2e68ca6d0b9382d4959ebe388278e0b0f1415213 GIT binary patch literal 11877 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 $os)powerDown()Facade$os : OsInterface$bios : BiosInterface__construct(BiosInterface $bios, OsInterface $os)turnOn()turnOff()OsInterfacehalt() \ No newline at end of file diff --git a/Structural/Facade/uml/uml.txt b/Structural/Facade/uml/uml.txt new file mode 100644 index 0000000..e4b0b94 --- /dev/null +++ b/Structural/Facade/uml/uml.txt @@ -0,0 +1,20 @@ +@startuml +interface BiosInterface { + +execute() + +waitForKeyPress() + +launch(OsInterface $os) + +powerDown() +} + +class Facade { + #$os : OsInterface + #$bios : BiosInterface + +__construct(BiosInterface $bios, OsInterface $os) + +turnOn() + +turnOff() +} + +interface OsInterface { + +halt() +} +@enduml \ No newline at end of file From d2dcb197cd4c41f52f490e6f904e643530682c0e Mon Sep 17 00:00:00 2001 From: John Webb Date: Tue, 29 Jul 2014 11:07:44 -0500 Subject: [PATCH 14/21] Added FluentInterface UML --- Structural/FluentInterface/uml/uml.png | Bin 0 -> 6099 bytes Structural/FluentInterface/uml/uml.svg | 1 + Structural/FluentInterface/uml/uml.txt | 13 +++++++++++++ Structural/README.md | 4 ++++ 4 files changed, 18 insertions(+) create mode 100644 Structural/FluentInterface/uml/uml.png create mode 100644 Structural/FluentInterface/uml/uml.svg create mode 100644 Structural/FluentInterface/uml/uml.txt diff --git a/Structural/FluentInterface/uml/uml.png b/Structural/FluentInterface/uml/uml.png new file mode 100644 index 0000000000000000000000000000000000000000..a1b6b5eca28f2a39b616d3cc38a55add9c9f97e6 GIT binary patch literal 6099 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 : array$from : array$where : arrayselect(array $fields = array())from($table : string, $alias : string)where($condition : string)getQuery() \ No newline at end of file diff --git a/Structural/FluentInterface/uml/uml.txt b/Structural/FluentInterface/uml/uml.txt new file mode 100644 index 0000000..17a76e2 --- /dev/null +++ b/Structural/FluentInterface/uml/uml.txt @@ -0,0 +1,13 @@ +@startuml + +class Sql { + #$fields : array + #$from : array + #$where : array + +select(array $fields = array()) + +from($table : string, $alias : string) + +where($condition : string) + +getQuery() +} + +@enduml \ No newline at end of file diff --git a/Structural/README.md b/Structural/README.md index 6def831..8fe74a4 100644 --- a/Structural/README.md +++ b/Structural/README.md @@ -14,3 +14,7 @@ entities. * [FluentInterface](FluentInterface) [:notebook:](http://en.wikipedia.org/wiki/Fluent_interface) * [Proxy](Proxy) [:notebook:](http://en.wikipedia.org/wiki/Proxy_pattern) * [Registry](Registry) [:notebook:](http://en.wikipedia.org/wiki/Service_locator_pattern) + +## UML Diagram + +![Alt FluentInterface UML Diagram](uml/uml.png) \ No newline at end of file From d0616c79375c9d4fb820204dfad58767d2a1a150 Mon Sep 17 00:00:00 2001 From: John Webb Date: Tue, 29 Jul 2014 11:17:21 -0500 Subject: [PATCH 15/21] Added Proxy UML --- Structural/Proxy/README.md | 4 ++++ Structural/Proxy/uml/uml.png | Bin 0 -> 10913 bytes Structural/Proxy/uml/uml.svg | 1 + Structural/Proxy/uml/uml.txt | 18 ++++++++++++++++++ 4 files changed, 23 insertions(+) create mode 100644 Structural/Proxy/uml/uml.png create mode 100644 Structural/Proxy/uml/uml.svg create mode 100644 Structural/Proxy/uml/uml.txt diff --git a/Structural/Proxy/README.md b/Structural/Proxy/README.md index 3ee37ef..b4c0e39 100644 --- a/Structural/Proxy/README.md +++ b/Structural/Proxy/README.md @@ -7,3 +7,7 @@ To interface to anything that is expensive or impossible to duplicate. ## Examples * Doctrine2 uses proxies to implement framework magic (e.g. lazy initialization) in them, while the user still works with his own entity classes and will never use nor touch the proxies + +## UML Diagram + +![Alt Proxy UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Structural/Proxy/uml/uml.png b/Structural/Proxy/uml/uml.png new file mode 100644 index 0000000000000000000000000000000000000000..2d7b804e049d69658d272f9a9141738daafb4bc2 GIT binary patch literal 10913 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 Md3CuO8S}9J0so;`4*&oF literal 0 HcmV?d00001 diff --git a/Structural/Proxy/uml/uml.svg b/Structural/Proxy/uml/uml.svg new file mode 100644 index 0000000..939c8e6 --- /dev/null +++ b/Structural/Proxy/uml/uml.svg @@ -0,0 +1 @@ +Record$data : array|null__construct($data = null)__set($name : string, $value : mixed)__get($name : string)RecordProxy$isDirty : bool$isInitialized : bool__construct(data : array)__set($name : string, $value : mixed) \ No newline at end of file diff --git a/Structural/Proxy/uml/uml.txt b/Structural/Proxy/uml/uml.txt new file mode 100644 index 0000000..22c5272 --- /dev/null +++ b/Structural/Proxy/uml/uml.txt @@ -0,0 +1,18 @@ +@startuml + +class Record { + #$data : array|null + +__construct($data = null) + +__set($name : string, $value : mixed) + +__get($name : string) +} + +class RecordProxy { + #$isDirty : bool + #$isInitialized : bool + +__construct(data : array) + +__set($name : string, $value : mixed) +} + +Record <|.. RecordProxy +@enduml \ No newline at end of file From 6dd33fd43328e8bfc487b18a04ffb50f349a5831 Mon Sep 17 00:00:00 2001 From: John Webb Date: Tue, 29 Jul 2014 11:22:48 -0500 Subject: [PATCH 16/21] Added Registry UML --- Structural/FluentInterface/README.md | 4 ++++ Structural/README.md | 4 ---- Structural/Registry/README.md | 4 ++++ Structural/Registry/uml/uml.png | Bin 0 -> 5252 bytes Structural/Registry/uml/uml.svg | 1 + Structural/Registry/uml/uml.txt | 9 +++++++++ 6 files changed, 18 insertions(+), 4 deletions(-) create mode 100644 Structural/Registry/uml/uml.png create mode 100644 Structural/Registry/uml/uml.svg create mode 100644 Structural/Registry/uml/uml.txt diff --git a/Structural/FluentInterface/README.md b/Structural/FluentInterface/README.md index 7b605a4..2ed92d3 100644 --- a/Structural/FluentInterface/README.md +++ b/Structural/FluentInterface/README.md @@ -9,3 +9,7 @@ To write code that is easy readable just like sentences in a natural language (l * Doctrine2's QueryBuilder works something like that example class below * PHPUnit uses fluent interfaces to build mock objects * Yii Framework: CDbCommand and CActiveRecord use this pattern, too + +## UML Diagram + +![Alt FluentInterface UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Structural/README.md b/Structural/README.md index 8fe74a4..6def831 100644 --- a/Structural/README.md +++ b/Structural/README.md @@ -14,7 +14,3 @@ entities. * [FluentInterface](FluentInterface) [:notebook:](http://en.wikipedia.org/wiki/Fluent_interface) * [Proxy](Proxy) [:notebook:](http://en.wikipedia.org/wiki/Proxy_pattern) * [Registry](Registry) [:notebook:](http://en.wikipedia.org/wiki/Service_locator_pattern) - -## UML Diagram - -![Alt FluentInterface UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Structural/Registry/README.md b/Structural/Registry/README.md index 39a2661..840d2cf 100644 --- a/Structural/Registry/README.md +++ b/Structural/Registry/README.md @@ -9,3 +9,7 @@ an abstract class with only static methods (or using the Singleton pattern) * Zend Framework: `Zend_Registry` holds the application's logger object, front controller etc. * Yii Framework: `CWebApplication` holds all the application components, such as `CWebUser`, `CUrlManager`, etc. + +## UML Diagram + +![Alt Registry UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Structural/Registry/uml/uml.png b/Structural/Registry/uml/uml.png new file mode 100644 index 0000000000000000000000000000000000000000..3697b8ee004d7ab473c781bd965ef833b350402f GIT binary patch literal 5252 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 literal 0 HcmV?d00001 diff --git a/Structural/Registry/uml/uml.svg b/Structural/Registry/uml/uml.svg new file mode 100644 index 0000000..fe0991d --- /dev/null +++ b/Structural/Registry/uml/uml.svg @@ -0,0 +1 @@ +Registrystatic $storedValues : array;static function set($key : string, $value : mixed)static function get($key : string) \ No newline at end of file diff --git a/Structural/Registry/uml/uml.txt b/Structural/Registry/uml/uml.txt new file mode 100644 index 0000000..483e60f --- /dev/null +++ b/Structural/Registry/uml/uml.txt @@ -0,0 +1,9 @@ +@startuml + +abstract class Registry { + #static $storedValues : array; + +static function set($key : string, $value : mixed) + +static function get($key : string) +} + +@enduml \ No newline at end of file From d42043c36c9e52b052958f3ce41571e98c4259bf Mon Sep 17 00:00:00 2001 From: John Webb Date: Thu, 31 Jul 2014 13:27:12 -0500 Subject: [PATCH 17/21] Updated uml diagrams for structural patterns --- Structural/Adapter/uml/Adapter.uml | 41 ++ Structural/Adapter/uml/uml.png | Bin 20029 -> 13396 bytes Structural/Adapter/uml/uml.svg | 449 ++++++++++++++++- Structural/Adapter/uml/uml.txt | 33 -- Structural/Bridge/uml/Bridge.uml | 50 ++ Structural/Bridge/uml/uml.png | Bin 21131 -> 15981 bytes Structural/Bridge/uml/uml.svg | 452 +++++++++++++++++- Structural/Bridge/uml/uml.txt | 35 -- Structural/Composite/uml/Composite.uml | 42 ++ Structural/Composite/uml/uml.png | Bin 12745 -> 8172 bytes Structural/Composite/uml/uml.svg | 295 +++++++++++- Structural/DataMapper/uml/DataMapper.uml | 23 + Structural/DataMapper/uml/uml.png | Bin 14730 -> 10553 bytes Structural/DataMapper/uml/uml.svg | 414 +++++++++++++++- Structural/DataMapper/uml/uml.txt | 24 - Structural/Decorator/uml/Decorator.uml | 51 ++ Structural/Decorator/uml/uml.png | Bin 17063 -> 11534 bytes Structural/Decorator/uml/uml.svg | 370 +++++++++++++- Structural/Decorator/uml/uml.txt | 29 -- .../uml/DependencyInjection.uml | 38 ++ Structural/DependencyInjection/uml/uml.png | Bin 18347 -> 12816 bytes Structural/DependencyInjection/uml/uml.svg | 433 ++++++++++++++++- Structural/DependencyInjection/uml/uml.txt | 28 -- Structural/Facade/uml/Facade.uml | 24 + Structural/Facade/uml/uml.png | Bin 11877 -> 8579 bytes Structural/Facade/uml/uml.svg | 350 +++++++++++++- Structural/Facade/uml/uml.txt | 20 - .../FluentInterface/uml/FluentInterface.uml | 22 + Structural/FluentInterface/uml/uml.png | Bin 6099 -> 4974 bytes Structural/FluentInterface/uml/uml.svg | 202 +++++++- Structural/FluentInterface/uml/uml.txt | 13 - Structural/Proxy/uml/Proxy.uml | 28 ++ Structural/Proxy/uml/uml.png | Bin 10913 -> 7509 bytes Structural/Proxy/uml/uml.svg | 282 ++++++++++- Structural/Proxy/uml/uml.txt | 18 - Structural/Registry/uml/Registry.uml | 22 + Structural/Registry/uml/uml.png | Bin 5252 -> 4658 bytes Structural/Registry/uml/uml.svg | 153 +++++- Structural/Registry/uml/uml.txt | 9 - 39 files changed, 3731 insertions(+), 219 deletions(-) create mode 100644 Structural/Adapter/uml/Adapter.uml delete mode 100644 Structural/Adapter/uml/uml.txt create mode 100644 Structural/Bridge/uml/Bridge.uml delete mode 100644 Structural/Bridge/uml/uml.txt create mode 100644 Structural/Composite/uml/Composite.uml create mode 100644 Structural/DataMapper/uml/DataMapper.uml delete mode 100644 Structural/DataMapper/uml/uml.txt create mode 100644 Structural/Decorator/uml/Decorator.uml delete mode 100644 Structural/Decorator/uml/uml.txt create mode 100644 Structural/DependencyInjection/uml/DependencyInjection.uml delete mode 100644 Structural/DependencyInjection/uml/uml.txt create mode 100644 Structural/Facade/uml/Facade.uml delete mode 100644 Structural/Facade/uml/uml.txt create mode 100644 Structural/FluentInterface/uml/FluentInterface.uml delete mode 100644 Structural/FluentInterface/uml/uml.txt create mode 100644 Structural/Proxy/uml/Proxy.uml delete mode 100644 Structural/Proxy/uml/uml.txt create mode 100644 Structural/Registry/uml/Registry.uml delete mode 100644 Structural/Registry/uml/uml.txt diff --git a/Structural/Adapter/uml/Adapter.uml b/Structural/Adapter/uml/Adapter.uml new file mode 100644 index 0000000..dec7779 --- /dev/null +++ b/Structural/Adapter/uml/Adapter.uml @@ -0,0 +1,41 @@ + + + PHP + \DesignPatterns\Structural\Adapter\Book + + \DesignPatterns\Structural\Adapter\EBookAdapter + \DesignPatterns\Structural\Adapter\Book + \DesignPatterns\Structural\Adapter\Kindle + \DesignPatterns\Structural\Adapter\EBookInterface + \DesignPatterns\Structural\Adapter\PaperBookInterface + + + + + + + + + + + + + + + + + + + + + + + + Fields + Constants + Constructors + Methods + + private + + diff --git a/Structural/Adapter/uml/uml.png b/Structural/Adapter/uml/uml.png index 4c90342aeb070e6153afe78af58a05d14221c544..b653077f56c497e8c68baae5957bbb4db5c49f6b 100644 GIT binary patch literal 13396 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 literal 20029 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 diff --git a/Structural/Adapter/uml/uml.svg b/Structural/Adapter/uml/uml.svg index 04259f1..189c56f 100644 --- a/Structural/Adapter/uml/uml.svg +++ b/Structural/Adapter/uml/uml.svg @@ -1 +1,448 @@ -PaperBookInterfaceturnPage()open()EBookInterfacepressNext()pressStart()Bookopen()turnPage()KindlepressNext()pressStart()EBookAdaptereBook : EBookInterface__construct(ebook : EBookInterface)open()turnPage() \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + open() + + + + + + + + + + turnPage() + + + + + + + + + + + + + Book + + + Book + + + + + + + + + + + + + + + + + + + eBook + + + + + + + + + + + + + __construct(ebook) + + + + + + + + + + + + + open() + + + + + + + + + + turnPage() + + + + + + + + + + + + + EBookAdapter + + + EBookAdapter + + + + + + + + + + + + + + + + + + + pressNext() + + + + + + + + + + pressStart() + + + + + + + + + + + + + Kindle + + + Kindle + + + + + + + + + + + + + + + + + + + pressNext() + + + + + + + + + + pressStart() + + + + + + + + + + + + + EBookInterface + + + EBookInterface + + + + + + + + + + + + + + + + + + + turnPage() + + + + + + + + + + open() + + + + + + + + + + + + + PaperBookInterface + + + PaperBookInterface + + + + + + + + + + + + + diff --git a/Structural/Adapter/uml/uml.txt b/Structural/Adapter/uml/uml.txt deleted file mode 100644 index 00aec7d..0000000 --- a/Structural/Adapter/uml/uml.txt +++ /dev/null @@ -1,33 +0,0 @@ -@startuml -interface PaperBookInterface { - +turnPage() - +open() -} - -interface EBookInterface { - +pressNext() - +pressStart() -} - -class Book { - +open() - +turnPage() -} - -class Kindle { - +pressNext() - +pressStart() -} - -class EBookAdapter { - #eBook : EBookInterface - +__construct(ebook : EBookInterface) - +open() - +turnPage() -} - -PaperBookInterface <|.. Book -PaperBookInterface <|.. EBookAdapter -EBookInterface <|.. Kindle -EBookAdapter o-- EBookInterface -@enduml \ No newline at end of file diff --git a/Structural/Bridge/uml/Bridge.uml b/Structural/Bridge/uml/Bridge.uml new file mode 100644 index 0000000..13fa058 --- /dev/null +++ b/Structural/Bridge/uml/Bridge.uml @@ -0,0 +1,50 @@ + + + PHP + \DesignPatterns\Structural\Bridge\Vehicle + + \DesignPatterns\Structural\Bridge\Workshop + \DesignPatterns\Structural\Bridge\Car + \DesignPatterns\Structural\Bridge\Produce + \DesignPatterns\Structural\Bridge\Motorcycle + \DesignPatterns\Structural\Bridge\Assemble + \DesignPatterns\Structural\Bridge\Vehicle + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Fields + Constants + Constructors + Methods + + private + + diff --git a/Structural/Bridge/uml/uml.png b/Structural/Bridge/uml/uml.png index ace71af32ec92aa81d83011be5ee0eb008cebfb0..30f78d1e36dfc437b9811d847a6a323d9c6cc3a0 100644 GIT binary patch literal 15981 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 ZqL8~Tl$_PiR?&bzX>kRyyl1by{}27wzE}VN literal 21131 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 diff --git a/Structural/Bridge/uml/uml.svg b/Structural/Bridge/uml/uml.svg index e7b8e4a..8d27913 100644 --- a/Structural/Bridge/uml/uml.svg +++ b/Structural/Bridge/uml/uml.svg @@ -1 +1,451 @@ -Assemblework()Car__construct(Workshop $workShop1, Workshop $workShop2)manufacture()Motorcycle__construct(Workshop $workShop1, Workshop $workShop2)manufacture()Producework()VehicleworkShop1workShop2__construct()manufacture()Workshopwork() \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + work() + + + + + + + + + + + + + Workshop + + + Workshop + + + + + + + + + + + + + + + + + + + __construct(workShop1, workShop2) + + + + + + + + + + + + + manufacture() + + + + + + + + + + + + + Car + + + Car + + + + + + + + + + + + + + + + + + + work() + + + + + + + + + + + + + Produce + + + Produce + + + + + + + + + + + + + + + + + + + __construct(workShop1, workShop2) + + + + + + + + + + + + + manufacture() + + + + + + + + + + + + + Motorcycle + + + Motorcycle + + + + + + + + + + + + + + + + + + + work() + + + + + + + + + + + + + Assemble + + + Assemble + + + + + + + + + + + + + + + + + + + workShop1 + + + + + + + + + + workShop2 + + + + + + + + + + + + + __construct(workShop1, workShop2) + + + + + + + + + + + + + manufacture() + + + + + + + + + + + + + Vehicle + + + Vehicle + + + + + + + + + + + + + + + diff --git a/Structural/Bridge/uml/uml.txt b/Structural/Bridge/uml/uml.txt deleted file mode 100644 index a1100d8..0000000 --- a/Structural/Bridge/uml/uml.txt +++ /dev/null @@ -1,35 +0,0 @@ -@startuml -class Assemble { - +work() -} - -class Car { - +__construct(Workshop $workShop1, Workshop $workShop2) - +manufacture() -} - -class Motorcycle { - +__construct(Workshop $workShop1, Workshop $workShop2) - +manufacture() -} - -class Produce { - +work() -} - -abstract class Vehicle { - #workShop1 - #workShop2 - #__construct() - +manufacture() -} - -interface Workshop { - +work() -} - -Workshop <|.. Assemble -Workshop <|.. Produce -Vehicle <|.. Motorcycle -Vehicle <|.. Car -@enduml \ No newline at end of file diff --git a/Structural/Composite/uml/Composite.uml b/Structural/Composite/uml/Composite.uml new file mode 100644 index 0000000..326dfd3 --- /dev/null +++ b/Structural/Composite/uml/Composite.uml @@ -0,0 +1,42 @@ + + + PHP + \DesignPatterns\Structural\Composite\InputElement + + \DesignPatterns\Structural\Composite\TextElement + \DesignPatterns\Structural\Composite\FormElement + \DesignPatterns\Structural\Composite\InputElement + \DesignPatterns\Structural\Composite\Form + + + + + + + + + + + + + + + + + + + + + + + \DesignPatterns\Structural\Composite\InputElement + + + Fields + Constants + Constructors + Methods + + private + + diff --git a/Structural/Composite/uml/uml.png b/Structural/Composite/uml/uml.png index 0009791d75f3fafb9fa3cc47995704fe634b3a73..70162dca7c04fc31ec7c6e762102fabc2b7c7083 100644 GIT binary patch literal 8172 zcmcI}cT|&G({B_NE2xNcP&|Tk1xXB5Md?LEdhaC!giuVV>Os0F9YQ%u?kB3BYUzzr8|J`iWmwu`QSQW#sinoP1CW|f7XWaLxW~nG3;+N! z0syW|0KhOe08kG8e|ZW?KI`@r(L@0c;lYr&X6ucLN}RX42vK}u7cNZ9F9zqDF7UH!O0#?WdP z6p!Y*nXj@oBt5@vJhweyB1in}$ZS_Dh-8tlp+27yF=SoiH%on+JD{A_;`RC5- z8kw$PU_qI*$RGUKWG2rS;&Axh8|jM=O%oSa(CAKF0gdJnI_6rmfK27&%Y3@Z<8Igr=0dl^t9Zv< z^{Ca0t^!goRt>odmJQ9xMa(&nFW!2}GsX(PEihB^CwEWIVls98F~x@_)Yz>Yh|Z2{ z6>}jlbARil@@R-GQ2;C*z>;BTVuBiN<$n7Y9dig#LdyqhEO=z z+-e+J05ZUT=PzteAmF>QV3VCOWQlWtsXI+^eDwvW`Otd1R@#VnUEku49Uqk&y@>1ylG$G>YZ-qy@to<(pF+6>ZTprh+{^1YTBNIQuMk7DtbF0|QTDLcO6DncvgKxaXQg@V z4UylWlVKkwCec_uH`yq+*HLwwLJQKr3&mTU)R#TUvDV$CI0W=4h07L6N;x7VO+&fg zRv6^ux$I=yI$;8%hA1x23@C`+EQ(`yH>p~M%;6t1Sj!S2E1000V%&G}S4i%8D#br5 znRr1%-QWwPesRy!dS7oBe0~7vVN$6iT97H&H)QXN;RN?5C+G8JRbx0KaPp;bnv|NY zLWbBeln|BTmbatjuqO4>`bai+PW@KR)lw6;f6{;y?xP2}FPCt1o3d0ELvtXWTZpGC zAP7WW728-;)6vn<)YMc}eV5r!;ruB+Qch{9x4m6eU0waTvbuUiCdXmaAko>`dC|5j z>do)ql=6QxJz>k$GrmYol28t!ZcoLmp6h>y>_-QFS3Py9={MUzfXY;7;ZU5r`@MsD zZ%0MbAQ~##QPEj`J<%(d<^6@T6ZlLD76`t33>d2F^5bh`I+kbt({KeYF|+r?|cIx1~F zX|JJuK~55$u+dU?181E!U|W=XDfH`veqsdf7*c6)_;9(WB$JzG-(|5GRHh{dUrDHE zM0B1#yTu?Z10hOKt-2CcHuQ)F<>-=8abaeM!(!J`zT(pXl%rEW)f?T`N+S>ZOt*i) z4qNV$mb-L%up5N9EJN9vMMhV2gSqT042|I$!pFxKi-`mT5PHZx=?G6!%j6Dut$Z(GB^RpraGBHNmUMWmUIMc8^5cl0 zYCrss2ZbWlcX~V@MrZ~=XHy3-E(Ql0>T`GVY7z?Fw@Ht7gts|@iF8bHP5r>6*8cda z#gD9(8SK=K#tCnG`$-Jq>8{IPU+cnsFppaZ`fU2C;yJ>RPA%BfS=LRL9hn@n$|`50 zCEd1L@(Q*68bC7`g6j9}>V|sI#UxV2PuQyj6cnm83o zhWaY@E@h%I!`nV*Qj3Rel_C#GgLciXq;^VwV5~FxV0x{H^${o@F|lM}JbFH3yE*}l zn*-)ik}*);ev$m2z;xFO(B{@)SU$hi+E5Cwn|tETJ;yA@Qp&QKsmlRraQDFP6Cr`v zh`hHkGrO+n5xY(ND;z)GYMy5^0V~@Z5tQZz!C|TGVqnOdQQ>|#OTU2R1G%{oJcZ9V!;Z#xNxN} zwSr9Y3gE4onQy)lOhs~Fk9oJ9s~n^`^~jpr%rA0Uc3tek7q+8wFA*RyH*T z_G9x}l5mc)d9*tq8A~?S@Xd^?pGj5=h7TACB{Yql#5NTsIj}7JlAX|-uSp;xXHMK}hY@D@F(BjJW7%iQ z!GE2(rWK4krUh_5?#g8S?ZhS4CNw>g__g*s4PIgx=#JqQ!8pM-EDHdJ&RZlWVb`7* zy}RimN9HL9-%n=CE9|>!7tY!1N5|_Tt!3ersO~hJOczM9_xN;8WAMdLx z#c!_LF_8nOCH~>^_28`dE$wrIg!YY^N6~W_1|VZt^N+j7{~3N-O#4RpZ$h$Vv&}LO zfWH2YbT#0!!SrNg1q1m1jDCjidaiV&%E5k&KO<#?uKNFq;Q#V5!=-B(P$pg99xGU4 z^!jwy(`kN4ZB~IFv zDedn6H}Ypv+THsR9seiYZyA7@tZ3w0kBe)^-&Gsc?D_E59G3tXM_MA2E>&C}=59AJ z8*PXWOZZH>KlFo00`eOiM=}^kLXb%p|0O5?OMcv#<%0Xfdl0iXuWKThl^hvnJ4NtpS*iB7O#zloV3RL))V4TVSn@< zbF?v8Hja3{PEnG`)?1A|7V>AyZ}n{K9~){)cUF3P#}RA$E1|jV=8}KeY@7UV734+w z_QYf-RtlvTi*J)A%VP*znO3FpWcdIkOJ|YE*kY+Wk(f3)6<6OOq0#|*dehT-otWvB&U=nGKrzWmzhN*_@{&>bS<)eOTwb|og)HS_e_*7_#p z<#b@2XXSm`R3Y1L9C|75KSU?_IN;p^vIJyhLr+VWgWpxx)xc}6*I0g9|Is#(7r1jj zf4I(mZk;e#!^=@l{Xw6)aYTV^5vo$tFTTdsNiV@M1_gDsWBKr=09Ws`Js*xy1Z?kI zmT0C(u*Y#UldNmtiPviyp6{WVS2GUnOxXR7u)?V|E@iI@>F~cG&FDi}<~l#2gr#7) zf++9yDf*NVg+4kmZ-$oIoS?QhB2Pcpc!Jm~4vaK2? zg|nfqPC*H@d$cKP7B+?QP-a$~<9l_-$H$Qki2i{A7W(h<<(a%HOe@`r*Qdqkm3kYA z?#So)`pW(6Ho35qn-k*|mO%l#SqHD~&g6Olx0viN4xOVHI2CZSQMqy7EAff7y!B%~ zG+(G8EsGkhSe1EHw>{6*pQ3Ff`GPgx@WJ1V(P0UvH+UlG(b&S=@uE}M3AK`)ScO89;2DsbB$B*^5X05LVa2JJ#|jWMbmc-NUBm#}YrODDx1O$ZC5Z)+9nX#y8|0us-@U?u zMgzL&#V3wTbt;jDaA~5PsIguVa8ZfrR7#~PbYgAPf3jxr=-z-NmG=E><^}lmbkC&o zw>=)&KJbYD65wHB&!|m$@mg`+R3fRGtzjf~P=n=L|ZxTNZrs`cMNG5R1NYo4& z0}axJJ9u(i9Oih5ykZu!c&E+h_F8XC67M<32`vqhE}(E41~U_>MnOkZ24-5oli5KU ziAPKy3&*HngnT;yrtf!dvSH|zl0-3XdL@&-HXxx>Twc!ZR0D8NM6fg%3|1dmZEW-) z#6laiRyUa$H}G*)}cMHiuNAQ0X@tR7?|vmJ}SDR$X%Z|9aZ) z*AaWO$7I6R#oDNPtElEfjcPYV_=>`a;R?59I$nmv4pG-mgvYv?$Hmo~OO(P@6s7bz744C9%P}W=|rfB!xzJ z$w*$&hkKVhL-lpZq{Yd!(E{(zU`w7dWEatFy?99xg((u%A1F0GYA-im;BYg+&$?vq zr+$Dmd&hPpH`@_jgom%{*SOU$%|x1G8Qo#FT7BO&{FZ7rgqKV*5(UyZ5-=MoMzf+9 zjNWI6%XcMKpO;<6hzW#Pvn6>62X(J%bYX!Zn<6L)z#if3HkVF}Bw>KHmhZ+h8#jWz@s4hQp*C?yF?fS4{gAHQBZlI{+ z@$id{@2;@$l4JJ5zrf>)-jxxD_(0y8CSCcS<~ez07`5DorMUX%z@Q3;eL;D|qOf6u z-$#7WCaHsS;EXhqu@3NKJri!Hv=H?^nmS=Yk$oEU(mwaY;nDMZ+;^7NM~GuadUtpG zC-zG;yFL{{=PZlsRWgiy3+o*ho8PY=bjZ#vPvVw!W2kl`p3fHfHuz$wkFiGDC z6u0bjP!R1Bv%1ZP#)ct&mWyw_&1wsX%(C~Dw@@+KBLqX*tb{kh|zF?o0K z`FW^OT1H0Wi`QYkRSBB74?yy(5&uH$V&pk4GIq0A+5BBL>BRp4X=sl7k0`zc$ZK{`JlxP}$TuV*jo}t8{ojlni zh1rp+D!k-me`aiK?Du6gZEb@#3DX+Q3@3=xyb@Bc#=O!loG8S#xHF5Vw;>=)J5IB= ziE?Jfn=)RxZCY-*xw+~}f$B(2T+UA$$7=YO2Bt;GnCe;DsOhh6$2mB3)w`nQgDK=- z3534lCfVP$9Nj~BY`K8&8NRa_am&!eU;nB(L3TN>YNt3NJ~v@UQ*&8VMZ*}Yum8@4RJwrEG()b4d6C|iIb9vIW-XnV^sAp*04>b!>DY|w6EtKvzs&S|} zJXWdpOkB~UC;_T{L4PTy>WrLO^-{$74S}czA5G zk#W?dQOBxXkn+H=#wv4F>@ZQ>C!7nf#tKEK6^q?ku-jK3Qgl{ipsukx$(xxr%H znz9+Iz{V)6pf<56}^I+x}Q^BE5& z?``QdqjSFn;Slk}v~1Jc3&-eXg=n%gWaO~tWuuCFBW2iQYU8E+_Ux=M8)X}E0j+Ur z3_LvN5n(psMx?;v>y^#ygO3kEv?cxdKH+u@O2P6PuL~ywc{kD;g;k2W&Mx^|Biez2 z3s*G}_v!GQbHJGZv3^dy(?xS3U5d}N&p97@ZNbaltj*0aMxmT_emwJ+PtcQ^>Wp)4 zaqLCl_SKa>5tZou5l3+|7^jFzuURaY^IIQeoYy%4`M+=-sV7kmV#p)s@}s_4)EBOU z{YAr)*jB$Aj2O-@Y_A3K!sNmSdYD&4&#ax#7k!Q)T^`__G)>9mham?XOZwhfBvz#2 z)IObzGtWw2MjFSdjncqU#K+%S%A;8%pM+)5hXWNxCBfGnzJn58)fw0Pn@a$fl{$aRW_4wii$c>yipwVVT>RoISP(W z$eQgAOWCP<_us(7=rBWFcPFXxlNkzo^UFfN&V#wAlY9N@c26doWw4nsVF^3G0MFN9 zelHzqkBi7$4hppW%H}7-%d5DxvcMA4({M{w$xVIE%2w%_e=~5GIXNUSu=$(g12x3m zz^n1a>&D-{H+Bkw$Q!7YTE9$;?6>vV`)!W$y%vWL>b*Af&sXfri~S+biOmZsUY8e} z8UZyY*h?9fB8LSWL~a)a7z>EqAqgIP3DyDO9e=RKK>#r zy;HdB2nUpxTfx?naHZz*2pe)OiS2|d?>toJ3Rlz_q~%W3@IlGm$z#X^6u9M71-NpW z?a%z$y)Rd}wvP0nG!^BI*Djlwor?;e-{5|-Es2+ldR08I1cLkvDlo9G4ZDN8(doIF z;0!@zZ%*=c;2d4N!q-=9Tw9Kt--ni`whG7}LoSUREH~~(8$S3cqW9uUo7ao43{7o{ zO1Jd(d$%I*#x-Euhl^Cdx0j=Yzdw&FlKac>Wz)5;GmD08xuZQx6LAiEIo%CPX8^wj zPZ)-(q;6aOS#}VC=;bXF5p%;H+`2qJm~+sND*gO@x${iV73Di(5%+ribW-h`uDCJ< z;~c~8S2Sf`YosXbZs-O^oIv2?&wfbzOC?1F1)cLIqc9n-amUK{&R-G+=3_rg`XUd| z$EUMY6FMF*1_NVuCybE{R-50Tyi+!>KRpa;?GMV3Z**O)SN*G2$I(*zIq7&<%*U|J zPrjwU`RH?0TSWx$hR~vNj^z9f8v*Z8kuTCx zfM7gSy#1^>G&|REXmF?#My$lKVDrCrR8zf2IU&VEHB)r** zPb`VY6dj0}f;T_-*ap1=f&!j>^xP}Sc^{WlMiV&>2+Lg}6%mTxd)E@N)?ZKIzjSo< z+pQEAmK1(6;l%4Gnt$?45Ou)&l%ncTQ3R41HV^|u%Y>I5TO!m`Vq+8CTsEKWAdJWT z;XZF`Ces>H$jrAXpoK3nI4!;eO?_j1F)X=%@NUm_Kv<`UST1#OmaVU}ols)+c%7&t z;m4V?015W77X0oFgW4%6z20Y5K2WqK^34#(wsbqN7q^Aux^sh!*#Xz~T}z#H^=pWG zURt<_AD6vD#2ZCmW#91YG(iy0wJz)J%m*8io7L!jvj@E4HDTgq`9FaPIFD%9e_e%M z$m$oDXT8b_x?4PV_jvHF8u(-T1jL!g^=_pW2^O`b)*+i`z15skl1uBFfv{sTwrClP z`rXpZF|XiV!*m?Mdz0=7{p~%t0dbeP8P>27e96{}?cN`s&{Mj20%4BCmJeIZlm`GF zW#aI@$b5IoH*t%|UAu-tEZti=iC~e@rNw4qHKaO{yx*b4nC~w1p7m4ls{l-%Jv0Cl zrKYCgE0Hn~zqHVkBrc!S&r5yqHv(k>vig=9PpX*!R^CVz9%C>XGBkK{k{J+;D^azz w%|e{H)gJht*WYyC|BvhN|Nc&Tf5b?>oGhOy^L>tfiw{tHto^9;q1CJZ0{n5iPyhe` literal 12745 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 : array|FormElement[]render($indent = 0 : int)addElement(FormElement $element)FormElementrender($indent = 0 : int)InputElementrender($indent = 0 : int)TextElementrender($indent = 0 : int) \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + render(indent) + + + + + + + + + + + + + TextElement + + + TextElement + + + + + + + + + + + + + + + + + + + render(indent) + + + + + + + + + + + + + FormElement + + + FormElement + + + + + + + + + + + + + + + + + + + + + + + + + + + + + render(indent) + + + + + + + + + + + + + InputElement + + + InputElement + + + + + + + + + + + + + + + + + + + elements + + + + + + + + + + + + + render(indent) + + + + + + + + + + addElement(element) + + + + + + + + + + + + + Form + + + Form + + + + + + + + + + + + + diff --git a/Structural/DataMapper/uml/DataMapper.uml b/Structural/DataMapper/uml/DataMapper.uml new file mode 100644 index 0000000..697e1f9 --- /dev/null +++ b/Structural/DataMapper/uml/DataMapper.uml @@ -0,0 +1,23 @@ + + + PHP + \DesignPatterns\Structural\DataMapper\User + + \DesignPatterns\Structural\DataMapper\User + \DesignPatterns\Structural\DataMapper\UserMapper + + + + + + \DesignPatterns\Structural\DataMapper\User + + + Fields + Constants + Constructors + Methods + + private + + diff --git a/Structural/DataMapper/uml/uml.png b/Structural/DataMapper/uml/uml.png index fabd1a82b9c63a4c7b166b8fc6ff0359dc8d3685..05b5812b79e38f7f5aa708300b2b72db40f0a544 100644 GIT binary patch literal 10553 zcma)?by!s2+V^b`6bYr38o&TX2I-O>8bKNclmVn=kS;+&8itY<5$P^z5o8!r>7ii; zkP;YL>fM9>&ULQqeV*r>Kjxpk?pb@q9pCj?J48cG;W`OD$+>gqt}8-iHP4+pF9ZDg zh%W$7Tum5&Z*rjvsB z!!MzuyDMx0+(^w|%-ckfODAdaD8l5)WjR<;pb@G|F(DniXy;2(a8`s0f?J9_=`CYy zLmcy471>Bd*xa3nm5k-t9t769|cxUmqOH%LHP#`cObWK71&dK7b`(p3Drz?{_D5+eTgo~9}I)pLS z$Sf@0CS}*;bfHKTyFTTOyNhAJtWz{@%2@vLxMgWojr44O7KX*;QC}Stxq<)jD}=nnIbU474>hHC4&o?+A0aH*vc}`S886 zG167E!l*ZU5qfl5W57n=Ps8QkcXo0%SI|fv@7OHT)^=L#jqiS0DHU1OA7hGImbf>p z0h7pJ#!CXb7SHWs+_cl4XlCgv$zw27=iQg*x?OqyUg=6>Nw~~?evWz_T^$1f<;oY{ z_d2%*A`C3n!s+<1&xAvn@gl(gv$?CA1@P+44Zgo!%|2i=j`s4aZ?{u{#kD|}(}jnT^tTG5?NJz%6g7mDPejJ8k!I`W$Y=gWI`~DnJih!EuR+L>K&g!-GI@EyzwP z9iK&9LV`hOce=PCBHe8+gv9^uTj1~WJY{*{%C%14+jZ`z`@TnO^L78fi0- zJhoD@uHp3Y%QwI42^XC`CI!S__?%f~G}Za6n%sz-7Ast_M2!hN;=wfA?a(-^@j|k{ zSmq>un&2qtpj)a-fBDq`u9Mfl5mcWTzx=IEhNAIy_3(R-_{Ts#`Y~cT5_vp+URyOH z%pvtxC45S_e%LPcs5>$ZzxS<0s>ZQA4L9bI$vdoVe>E^!dCY%PHTyAWRL45+*+Sv2 zsaS>pom9Crp24R5BwJTot96c{#8nUCkO9N$WlABEy|J{p^mQ?Bl}ga+f`dj5A0A1S zYi;#%2Qs_&I>79`_J5?8F&GCW(^F5n6&d%$T*yebRguR3@bd#bte?#hEOoJ8i<5@< z<8ChA`Q>o5tGUt|mCip{nZJP5H5_ET_j2}SYvmZuZR9VWA^b8iLoZ*4Jq4yRpRW@yTp#O5dGU?A2ld z2QUk>oF2LX6)CSTjYa|nICiMh;WSElk0rVi1~X|-6%ue9IfJLg-rSSQE^as^AC?z#4W^Xb{;KZNUB}&vmSeqipj|5XsaL+37GrD zDG+hgjO)-a_5GR#|!Zk@Ms1_+_DvTLj&y%$UJ)KacPHuTLViKc1*TdGg6sVoUveo!bXvEZJ?n`F+E%`TC3n&g+zEsbgt^-ytQs8HJ z3hv)AN$hO@uIU81$%hNOdl^^Z4`+(;I{hXSHSKHo2%jon0`l4HCrt?Wc?uJHQPT6% zY$aJueH_nUG8PW{UAM`2yE<1}qx)wGd))g;Qx3<(6uN;V*X@T-)_=IoR=?NMzNc7i z1gp@AnoM~3;Y04pN@~y5G}~)7cKo6y&*Z%+cD$gw6zFNDl?>Y2yLAZMm-br^K#qLd z4eTtxci&w^_oD2%X?}SZc89Tfc@RMxfl13tejt58at%v;f;EZNE#!}G7FO6*CWFUp5 zG{Y>qi)a(?0X}5>GdtNezrz4{*E~O`c%E|XFH^O56Gyh1Hz+<~!=NdvqDb)C)aK9b zkPzj?V#d|U&(CW?_D%b#>@1h%cYnQN)6daWwJdP8s~>qIf*32?oK2;(!iK$E^7*{kp>X@INa{B)cjFy9`|5yu&Gt{7q=`0^3i%l_a+XN=mcu%P zFs`7HkwGudkB7memK;+)15W^b2`vLP+GI(k_d3~DDJ<@`bxnEmr$1ea{~6@-n+m*B zgj~j3E{QJ-*7&^NZF_LCD&pu{6Id85Dn4DE`pw7PzR_GT|8~#Sfu(Ep#?L-^QMkLT zjU=%YrJNut_ky=_IC;{m{*>ZE?lv8drz;IQiSow388 zgJF`XzTR_R8P0U^9UDws%ZRc^cqHsvijx<=U58y{VrX5T;m1|u%+2>H!Z06WsV9x5 zI81N-VMe3x%XL?xJ)gp45jPR&5Eaws z=5D|b?!JDBw<0kA2sX&8Ma|Fk{~j z8sNzC;>283kQl&bgE$aD8R?ieoiB09z`NIGb-rpwIYRC~L^e9&_*B+b`w9k`T%e%oY5NuW(!Hk_mh0+;fY@mP0XpFKlCvq@~FgJb6*1w-!i9 zfc5(K75?V{MyQUxM}LZiD{>Pki>H=0)DcmM-jTWqpCa3-Lo4wYv!hpUp(QpqJCPx} z749sRbt7zM{j8YPT+zekVaTvS1jP zN^Vjc>GN$Oj4K%(?oWCVL(FNZO*i>Ko-*Y?#qHA6dujfotxGdy_@)gJ{i|9bD)a7# zT(4QK{xxvyx+6%+y~j14eK55u8z_z>)BK??Pdf+cRem& z2E;;HJ_QRj2#_vxz?t>m3Yg^y_f4RAUKC9zzo!-aVf`o@Yp1XKb_zHxr1u>5R!8M| zjok$+zIghB7$S>|(rqJ~$VuYc|Lm8=Z1lc~quxSYj# zz4}{k`o^y(*3~twT*C5x&$l5PUfFr8iSEUT4kD;#%zK%RWWK1kR`MvhoW(J+wT zyerQHwj8PFGH@5B-~3E>MXz_o%}xhdwjeF{6PsNfdexxZYJMI+NwI!ErKH6VK3?^M zgRMDsH83ji_h+b;X@%wdyh{1=!uUc}mj;1$bjKnHkPF$d(LYN>cAWVf=FOFB+L&H{ zJE~hYMlJGKE@Jrc2i@d1yc_T}CY^`yIHC&viZ!fxWpILtv{@vLKTf5Dpj}vW_*wsG z78yXCone5pWyEzi2YvX1*^?#tQ(!fZgys+{0LSbAGTn11x+{({d2!=d5 zAmRGbbHCW5Z94$5^4UBp<+5(mJ2&Cz)B#e`nY&leL1KTLtA+zsY>EC6_=7_RAr179 zT|PsC3kgXSQF*wGo(<$x3&I5erb<>V@d_NU_KW#?;!nOHT%U>62f>{!-Uds+-0x3u zW*xmNO0r`DFSr4*h-@^F@&jZ~p|$KEZF=TC1R(N9!zKBW1_I3oY7m0|oZ9yIZ*4-r zPv-=wpHM`vQZbdh?m`-e$;l_j>y6NE)}wM~6bZri#XAIFnXj3^TZSOM1wl{ky9pO| zD35nOQ2SI-A0K-op2qcMz-|%V}+~o^-Fmw~@veg3UL^%aQ1TUNA zfL!#0;zvG0UGOc>Q^P|e38vfa8n^dE>NGFU>A=RQz*~m7#TFw|RarN5{Nd@wS**!) zbD2?zd&h>r60s(qEm79|Bd(Fgl=W|n;HO3p?gBDB_uOCg{#OS6leoP1s7VO!kp?H| z+*3?);5^n`a5MSj==-RDgpSW0ii3DUT$zuz+0gG@*fivpl1$)+f~Y%EOB?Cm_s4CNOCq;Sc7eYGZI9$^lb@YB24}eCOLo6WZ%l zA&J%lqCFyXoNO7$Rllf2GRKZk*I(hyu6r?ZK=gUXH%)|fkeZaxhdrgkuPdQ4`uay3J=RNi{jgOzf5sZ0kcwA>al z`!?PE!vKpy^OYJW=k}7=4GCsp!~X*UDhM0#`8L(ndi3}?#bCM5bB{@9M&57Pk{w^g zlUxD{x;p;if{&G}IVKVh1+>>{cOx93@oEU|_`2G&J(k z?7MyHg4Rh@d=}l|!5(oj=@sR!cPS?zmXYZLqob}o2>WS7k#pLU@$5xVWd15`__ej^ zxm2tR4{PvwG={adpL*Pc;ULFkO7gg#_s6FCiKq5B88+l>^ZQbLriDI!kjCZ^h~wZ- zhX08-LQyrWj!)yz?V%*f9>azD@{!wRt+VO3va`1qdIs_%7C@29LcdbA(pQaS$Q29XWC8K07Gz?&KypPs#@iP)_LzI(?eC9lChUnL8eGUMng6uAgTh z59Ss-cfxRM$B)Bt%2^F4qB1L7iIs&e*oM7F7~Lm_dwAv+Lf;meW_o`}X6&!E>Ne3< zoShCz88u-rp4&73E2+Gib%noZ0b0Pr-@($aqpap0haP*;8|8asmN$?di#L)jCIlj) zR@ru$)UFR}L2XdaEbJPb+^`@YzW+jB+J;%@HHF zf^cl284Y|BKBtS`*k%%m-#y9%<}lK_RvvcawiM!jW}Kx=RptMJoR%bskDM?~nHx=Y z`q@V#(h!jPv02f7$vG9TcmmpUF>2>1=F_^uUN|Y*(au22^LXdBb>z*@LZvN;_i82M z8~}FPjl-#%7)$P!5TP9I4DVE!*)h;3u1;6~4y)OvP12mH&{7?+ie2&e>KGRFa<9Cf zHa360qfk>h>277FsgMrGsE&x!aOki71&uzEtSi|^O}{i`ohZ&bLwN*{%@Xx4tJ7q; z*49Q|*jG91TfLYndo0e zJ}`^F?d=es%?f|%jtH>eOlXHfy2C`6w(9jThlZ(V=mu|(2(!Q|=seGFN~DEPXmSM4 zTOuL!H6cMGntHBV*2Ov4>u5O@{D0z~DF(V($B$we?Ve0_2_bE*&~(x=2;Nw+iRt~d z?BQT0ahqH#?H*J~b*`}H%-7kVdo}3$W)Rxpv2kRzY3jJ1T4PbTQu%fx zLqb@<$KV98=2iGdgZAnoSEzaFJl-$DUe266c=N&Yjl%T!H2Xh(Zf02HwTIvG_1&9j zQ&^X5;=PXyu=R1pzgwM?0bW7`Vj3Si8PO%;ERGU8*-t*JrjMU^x77(Nf(GrAM3!4v zBXV=3ZR2S{GI;o~^bptYU;AI$h!UAjkMgtNi8pgi;L8>z%LW7P2b|+2zmUzyT~a@- zw0t{Z4MQC|>l&KU*whI0Y&)eIFbPGk!vBcYf(oR1p^>}9B<=0QNO9Kx3ad@FB)dQU z>I;7MIq~JjG8sF`rKeevJ&mTdvm<*8F^kt+n=BM^Smur16m_Y}`zpo$th^**K}pN& z`4043h}uNzvU2Q}q9#}>Pqz3H;2o4qE5|f9#C=Zfesnm|HzN1HDTDPWKb(5bzHb!B ziYl@Z5w}y8`Doz()7$v?R}>3HAh)#~dHs%|v_-Q-)dnPGKqJmwu$kfwYrWlj>nCtQ z0mq*ph5DZfvLZ15b{60gX33}UzX4~V8CnDMRpb!&IgvUq;E+=po60P_fWkRk^_?c}j4Lv_Z;s^qm;5J!s#J#9mb+3E%k*pNR3UMTaXyTvzYCT!%(oL_hIZ z9DdRM7_U3M9S%3wV<_|Zx$qWVzh`P(*u{Je<)(&GjuxOpavqn##u~9dlBlQ>dyR!h z>m9!#6eqkkg_WgA!dEAkp%$sv(6J|aD>l|m;{C_1fqYaB%}Zx@Z+gh7svpeii^A1o zYp*=#%-4+>)bqEMUNuV`ha~>iK`#@%kkEb1|6A)^_2`vkl?!WkCO3I1=Z%(KBg}40 z^efC@_(AH<7SNSX&5UcuvqwuIVV2xymvW3YT{Bc*6ZDA$rc1Z2K|KhU=UWJ_wEw;P zeM%t*b~JmmLPax0t|%?QzNOdo=~@%4-|W@)^U+jnL5S+EFl-?1q%cev))9N_<`AiT z`dUN%DdrGBU#>6LM;iN@_F~n}BDFhT{u27%YYznN)y=EDZpT=)%sgB zI(n*mMbxU_ttL$#)Gd#PcK+)<#|ptHz-E?j#+othVf`cbdCbJYpLSspK9Dct0fEm% zr>>gyzX0(`NJd-2a*5VZFUdPS!K zh(>&K6XK&SHgCJQR3i8Y9F0h)rZyzQbb5iIJjBRGpp{zkqfFlNb<;v#7n}+26mb~4Jj+`yG~?tdAd}cK)?|e#y3HW!st8u zZg~at3VqEk5^7eiUUp{PdnoVQ&nGDF`lXt&t=q~yujVODyjrRQtkY}4F-)W>5J^#VzFIfaIhfV>0#A=8?Z@(j7-Pcu{gI57^w5!4d7mf(?xnEPzqxE=5& zqjsV0BZrT@xQkdLv+z3MylYbjdZ3f?B1w&YnIP|pt~$hKxRwPg<6*73y_G|TfQZ^i?FZBTJEIgc~alT*SG-W zfxD1Qhm@3n`JoM8W>=ofc|$-ny|z7Go0}wen{{G%4it-;H@5w8{)Pks;tvP-&mY%j zNs7AluN$ntmFf=!l0r1ah6A>^ql}^?plh|RkCpd~vMhTaYLg^U^OcO0^Jc7cc^xu_T{YTh5Og?4?~2?zcuW2b;tzJM|A2s2#XD576y>48X9F|E@SqP zR_xXdMde6Wt$Ik^Yu6uBxQPbhN}fT;g6!IFIm;C^@L`9D1ndf0f#?eI%c?x0 zsJ~d`__J&r?zh0+RFx?D*MwRyyold^V0`vPa~(Gv!udfp2*-#NyUkQ$RgE6bK$dRM zt^4J8&Bd2qSKKb{@wOVLx;Laa4N=ok|F~PcljT24yX!2@vSh|!!W$mTB8&p5qfj=< zc8IiLlL)=W`taUre9En5!(5QSo_(5&awP1HkM){z%Y33emwE%2dhJlAL|-urhKWz+ z(=s;RB4rih6?Lz9WS$Ue9kxC94&AC8+zlQkGz)X;i?nK`+W;U9%Jcr#O#nkfEr1)A zf3GkgwB6a4@dGM!Teq+ft;;Jl`VVNUa=d zU?KiQq~>|gSXFtg%UWH3IRcH@AJlSM(1CvNg2glPm*gAtBP$%S@`~L&4}1|3I+?e* z0|om^~jX>MBd8z^iR* zQ;j9p%jZL`M(rLwQgms!-=cRignZX*nt8$>pdk?vJ5po06)gx>VLbmw46(k5hu7j(coV3q!t!p=+~2CW|?FxFcO37cN5KHk|?om za-2FKrF4>BJFrs%v0ygyKjsIu58>Cj?{Q=ANV{X|UAjl=C;U@i)1cH_$MOU=-%QX4XEY#C7y7R)n_Q|`5UN3YFi91+y%5WmS^2%ilK=YTV| z*ahI<;k2(uc+_BMIajhY=mdEpBcV1ciD=`d%4#0o8Lo_+M8PZL*7K2<1H>BzY8>%n zRV$z;+Kpdm+msgdbBCie&CwZcLKqiq20{Bmm|oUM-Yz|PrzCPGr}MXrv03ST!N#}| zhhul`A%hfsee9Y#m=*fzpY;y;4NIJslV ZkQpzRny^!K;FHL6igIeQ#nPt!{|~^_s6qe$ literal 14730 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 diff --git a/Structural/DataMapper/uml/uml.svg b/Structural/DataMapper/uml/uml.svg index e40dd5b..dcc452b 100644 --- a/Structural/DataMapper/uml/uml.svg +++ b/Structural/DataMapper/uml/uml.svg @@ -1 +1,413 @@ -User$userId : int$username : string$email : string__construct($id = null : int, $username = null : string, $email = null : string)getUserId()setUserID($userId : int)getUsername()setUsername($username : string)getEmail()setEmail($email : string)UserMapper$adapter : DBAL__construct(DBAL $dbLayer)save(User $user)findById($id : int)findAll()mapObject(array $row) \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + userId + + + + + + + + + + username + + + + + + + + + + email + + + + + + + + + + + + + __construct(id, username, email) + + + + + + + + + + + + + getUserId() + + + + + + + + + + setUserID(userId) + + + + + + + + + + getUsername() + + + + + + + + + + setUsername(username) + + + + + + + + + + getEmail() + + + + + + + + + + setEmail(email) + + + + + + + + + + + + + User + + + User + + + + + + + + + + + + + + + + + + + adapter + + + + + + + + + + + + + __construct(dbLayer) + + + + + + + + + + + + + save(user) + + + + + + + + + + findById(id) + + + + + + + + + + findAll() + + + + + + + + + + mapObject(row) + + + + + + + + + + + + + UserMapper + + + UserMapper + + + diff --git a/Structural/DataMapper/uml/uml.txt b/Structural/DataMapper/uml/uml.txt deleted file mode 100644 index 215a9da..0000000 --- a/Structural/DataMapper/uml/uml.txt +++ /dev/null @@ -1,24 +0,0 @@ -@startuml -class User { - #$userId : int - #$username : string - #$email : string - +__construct($id = null : int, $username = null : string, $email = null : string) - +getUserId() - +setUserID($userId : int) - +getUsername() - +setUsername($username : string) - +getEmail() - +setEmail($email : string) -} - -class UserMapper { - #$adapter : DBAL - +__construct(DBAL $dbLayer) - +save(User $user) - +findById($id : int) - +findAll() - #mapObject(array $row) -} - -@enduml \ No newline at end of file diff --git a/Structural/Decorator/uml/Decorator.uml b/Structural/Decorator/uml/Decorator.uml new file mode 100644 index 0000000..0a80f98 --- /dev/null +++ b/Structural/Decorator/uml/Decorator.uml @@ -0,0 +1,51 @@ + + + PHP + \DesignPatterns\Structural\Decorator\RenderInXml + + \DesignPatterns\Structural\Decorator\RenderInJson + \DesignPatterns\Structural\Decorator\RenderInXml + \DesignPatterns\Structural\Decorator\Webservice + \DesignPatterns\Structural\Decorator\Decorator + \DesignPatterns\Structural\Decorator\RendererInterface + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \DesignPatterns\Structural\Decorator\RenderInXml + + + Fields + Constants + Constructors + Methods + + private + + diff --git a/Structural/Decorator/uml/uml.png b/Structural/Decorator/uml/uml.png index e1e83f23f5827e4adce5053f43aa1919224a0d13..1194a629a24d9570569fe7bf72537e6e37d17c9a 100644 GIT binary patch literal 11534 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 z9x&WZrQE!{__sO#l&}B}orNG&WF$kKMb%%j8==G0aA`<185tS9UO_%RendererInterfacerenderData()Decorator$wrapped : RendererInterface__construct(RendererInterface $wrappable)RenderInJsonrenderData()RenderInXmlrenderData()Webservice$data : mixed__construct($data)renderData() \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + renderData() + + + + + + + + + + + + + RenderInJson + + + RenderInJson + + + + + + + + + + + + + + + + + + + + + + + + + + + + + renderData() + + + + + + + + + + + + + RenderInXml + + + RenderInXml + + + + + + + + + + + + + + + + + + + data + + + + + + + + + + + + + __construct(data) + + + + + + + + + + + + + renderData() + + + + + + + + + + + + + Webservice + + + Webservice + + + + + + + + + + + + + + + + + + + wrapped + + + + + + + + + + + + + __construct(wrappable) + + + + + + + + + + + + + Decorator + + + Decorator + + + + + + + + + + + + + + + + + + + renderData() + + + + + + + + + + + + + RendererInterface + + + RendererInterface + + + + + + + + + + + + + + + diff --git a/Structural/Decorator/uml/uml.txt b/Structural/Decorator/uml/uml.txt deleted file mode 100644 index 2561cf7..0000000 --- a/Structural/Decorator/uml/uml.txt +++ /dev/null @@ -1,29 +0,0 @@ -@startuml -interface RendererInterface { - +renderData() -} - -abstract class Decorator { - #$wrapped : RendererInterface - +__construct(RendererInterface $wrappable) -} - -class RenderInJson { - +renderData() -} - -class RenderInXml { - +renderData() -} - -class Webservice { - #$data : mixed - +__construct($data) - +renderData() -} - -Decorator <|.. RenderInJson -Decorator <|.. RenderInXml -RendererInterface <|.. Decorator -RendererInterface <|.. Webservice -@enduml \ No newline at end of file diff --git a/Structural/DependencyInjection/uml/DependencyInjection.uml b/Structural/DependencyInjection/uml/DependencyInjection.uml new file mode 100644 index 0000000..e058b19 --- /dev/null +++ b/Structural/DependencyInjection/uml/DependencyInjection.uml @@ -0,0 +1,38 @@ + + + PHP + \DesignPatterns\Structural\DependencyInjection\AbstractConfig + + \DesignPatterns\Structural\DependencyInjection\Connection + \DesignPatterns\Structural\DependencyInjection\ArrayConfig + \DesignPatterns\Structural\DependencyInjection\Parameters + \DesignPatterns\Structural\DependencyInjection\AbstractConfig + + + + + + + + + + + + + + + + + + + \DesignPatterns\Structural\DependencyInjection\AbstractConfig + + + Fields + Constants + Constructors + Methods + + private + + diff --git a/Structural/DependencyInjection/uml/uml.png b/Structural/DependencyInjection/uml/uml.png index f38b80b78218db6da486af7ac3c4f10c618a1a15..91cdcb005896fb3c71858211a920f6739d6bd7ab 100644 GIT binary patch literal 12816 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 ZZdYCC$f|!e@K28i((e`CLBtF`|1SkbDcb-5 literal 18347 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 diff --git a/Structural/DependencyInjection/uml/uml.svg b/Structural/DependencyInjection/uml/uml.svg index 1014592..2f75b09 100644 --- a/Structural/DependencyInjection/uml/uml.svg +++ b/Structural/DependencyInjection/uml/uml.svg @@ -1 +1,432 @@ -AbstractConfig$storage__construct($storage)ArrayConfigget($key : string|int, $default = null)set($key : string|int, $value : mixed)Connection$configuration : Parameters$host__construct(Parameters $config)connect()getHost()Parametersget($key : string|int)set($key, $value : mixed) \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + configuration + + + + + + + + + + host + + + + + + + + + + + + + __construct(config) + + + + + + + + + + + + + connect() + + + + + + + + + + getHost() + + + + + + + + + + + + + Connection + + + Connection + + + + + + + + + + + + + + + + + + + get(key, default) + + + + + + + + + + set(key, value) + + + + + + + + + + + + + ArrayConfig + + + ArrayConfig + + + + + + + + + + + + + + + + + + + get(key) + + + + + + + + + + set(key, value) + + + + + + + + + + + + + Parameters + + + Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + storage + + + + + + + + + + + + + __construct(storage) + + + + + + + + + + + + + AbstractConfig + + + AbstractConfig + + + + + + + + + + + diff --git a/Structural/DependencyInjection/uml/uml.txt b/Structural/DependencyInjection/uml/uml.txt deleted file mode 100644 index b6765c5..0000000 --- a/Structural/DependencyInjection/uml/uml.txt +++ /dev/null @@ -1,28 +0,0 @@ -@startuml -abstract class AbstractConfig { - #$storage - +__construct($storage) -} - -class ArrayConfig { - +get($key : string|int, $default = null) - +set($key : string|int, $value : mixed) -} - -class Connection { - #$configuration : Parameters - #$host - +__construct(Parameters $config) - +connect() - +getHost() -} - -interface Parameters { - +get($key : string|int) - +set($key, $value : mixed) -} - -AbstractConfig <|.. ArrayConfig -Parameters <|.. ArrayConfig - -@enduml \ No newline at end of file diff --git a/Structural/Facade/uml/Facade.uml b/Structural/Facade/uml/Facade.uml new file mode 100644 index 0000000..d6bdd03 --- /dev/null +++ b/Structural/Facade/uml/Facade.uml @@ -0,0 +1,24 @@ + + + PHP + \DesignPatterns\Structural\Facade\BiosInterface + + \DesignPatterns\Structural\Facade\BiosInterface + \DesignPatterns\Structural\Facade\OsInterface + \DesignPatterns\Structural\Facade\Facade + + + + + + \DesignPatterns\Structural\Facade\BiosInterface + + + Fields + Constants + Constructors + Methods + + private + + diff --git a/Structural/Facade/uml/uml.png b/Structural/Facade/uml/uml.png index 2e68ca6d0b9382d4959ebe388278e0b0f1415213..e13cbdc6f9b960753f42eeefff14e6f636e70d91 100644 GIT binary patch literal 8579 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 A+W-In literal 11877 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 $os)powerDown()Facade$os : OsInterface$bios : BiosInterface__construct(BiosInterface $bios, OsInterface $os)turnOn()turnOff()OsInterfacehalt() \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + execute() + + + + + + + + + + waitForKeyPress() + + + + + + + + + + launch(os) + + + + + + + + + + powerDown() + + + + + + + + + + + + + BiosInterface + + + BiosInterface + + + + + + + + + + + + + + + + + + + halt() + + + + + + + + + + + + + OsInterface + + + OsInterface + + + + + + + + + + + + + + + + + + + os + + + + + + + + + + bios + + + + + + + + + + + + + __construct(bios, os) + + + + + + + + + + + + + turnOn() + + + + + + + + + + turnOff() + + + + + + + + + + + + + Facade + + + Facade + + + diff --git a/Structural/Facade/uml/uml.txt b/Structural/Facade/uml/uml.txt deleted file mode 100644 index e4b0b94..0000000 --- a/Structural/Facade/uml/uml.txt +++ /dev/null @@ -1,20 +0,0 @@ -@startuml -interface BiosInterface { - +execute() - +waitForKeyPress() - +launch(OsInterface $os) - +powerDown() -} - -class Facade { - #$os : OsInterface - #$bios : BiosInterface - +__construct(BiosInterface $bios, OsInterface $os) - +turnOn() - +turnOff() -} - -interface OsInterface { - +halt() -} -@enduml \ No newline at end of file diff --git a/Structural/FluentInterface/uml/FluentInterface.uml b/Structural/FluentInterface/uml/FluentInterface.uml new file mode 100644 index 0000000..8fca787 --- /dev/null +++ b/Structural/FluentInterface/uml/FluentInterface.uml @@ -0,0 +1,22 @@ + + + PHP + \DesignPatterns\Structural\FluentInterface\Sql + + \DesignPatterns\Structural\FluentInterface\Sql + + + + + + \DesignPatterns\Structural\FluentInterface\Sql + + + Fields + Constants + Constructors + Methods + + private + + diff --git a/Structural/FluentInterface/uml/uml.png b/Structural/FluentInterface/uml/uml.png index a1b6b5eca28f2a39b616d3cc38a55add9c9f97e6..e8229a22150baacaed2ed162235723a948f94d7b 100644 GIT binary patch literal 4974 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 GD(GL1Pk9^w literal 6099 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 : array$from : array$where : arrayselect(array $fields = array())from($table : string, $alias : string)where($condition : string)getQuery() \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + fields + + + + + + + + + + from + + + + + + + + + + where + + + + + + + + + + + + + select(fields) + + + + + + + + + + from(table, alias) + + + + + + + + + + where(condition) + + + + + + + + + + getQuery() + + + + + + + + + + + + + Sql + + + Sql + + + diff --git a/Structural/FluentInterface/uml/uml.txt b/Structural/FluentInterface/uml/uml.txt deleted file mode 100644 index 17a76e2..0000000 --- a/Structural/FluentInterface/uml/uml.txt +++ /dev/null @@ -1,13 +0,0 @@ -@startuml - -class Sql { - #$fields : array - #$from : array - #$where : array - +select(array $fields = array()) - +from($table : string, $alias : string) - +where($condition : string) - +getQuery() -} - -@enduml \ No newline at end of file diff --git a/Structural/Proxy/uml/Proxy.uml b/Structural/Proxy/uml/Proxy.uml new file mode 100644 index 0000000..9b407e1 --- /dev/null +++ b/Structural/Proxy/uml/Proxy.uml @@ -0,0 +1,28 @@ + + + PHP + \DesignPatterns\Structural\Proxy\Record + + \DesignPatterns\Structural\Proxy\Record + \DesignPatterns\Structural\Proxy\RecordProxy + + + + + + + + + + + \DesignPatterns\Structural\Proxy\Record + + + Fields + Constants + Constructors + Methods + + private + + diff --git a/Structural/Proxy/uml/uml.png b/Structural/Proxy/uml/uml.png index 2d7b804e049d69658d272f9a9141738daafb4bc2..82f548a364897abf7530463465f00f83d9a66d59 100644 GIT binary patch literal 7509 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 LL!na6Ea<-gyD`Ae literal 10913 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 Md3CuO8S}9J0so;`4*&oF diff --git a/Structural/Proxy/uml/uml.svg b/Structural/Proxy/uml/uml.svg index 939c8e6..1ec1d46 100644 --- a/Structural/Proxy/uml/uml.svg +++ b/Structural/Proxy/uml/uml.svg @@ -1 +1,281 @@ -Record$data : array|null__construct($data = null)__set($name : string, $value : mixed)__get($name : string)RecordProxy$isDirty : bool$isInitialized : bool__construct(data : array)__set($name : string, $value : mixed) \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + data + + + + + + + + + + + + + __construct(data) + + + + + + + + + + + + + __set(name, value) + + + + + + + + + + __get(name) + + + + + + + + + + + + + Record + + + Record + + + + + + + + + + + + + + + + + + + isDirty + + + + + + + + + + isInitialized + + + + + + + + + + + + + __construct(data) + + + + + + + + + + + + + __set(name, value) + + + + + + + + + + + + + RecordProxy + + + RecordProxy + + + + + + + + + diff --git a/Structural/Proxy/uml/uml.txt b/Structural/Proxy/uml/uml.txt deleted file mode 100644 index 22c5272..0000000 --- a/Structural/Proxy/uml/uml.txt +++ /dev/null @@ -1,18 +0,0 @@ -@startuml - -class Record { - #$data : array|null - +__construct($data = null) - +__set($name : string, $value : mixed) - +__get($name : string) -} - -class RecordProxy { - #$isDirty : bool - #$isInitialized : bool - +__construct(data : array) - +__set($name : string, $value : mixed) -} - -Record <|.. RecordProxy -@enduml \ No newline at end of file diff --git a/Structural/Registry/uml/Registry.uml b/Structural/Registry/uml/Registry.uml new file mode 100644 index 0000000..564dbc9 --- /dev/null +++ b/Structural/Registry/uml/Registry.uml @@ -0,0 +1,22 @@ + + + PHP + \DesignPatterns\Structural\Registry\Registry + + \DesignPatterns\Structural\Registry\Registry + + + + + + \DesignPatterns\Structural\Registry\Registry + + + Fields + Constants + Constructors + Methods + + private + + diff --git a/Structural/Registry/uml/uml.png b/Structural/Registry/uml/uml.png index 3697b8ee004d7ab473c781bd965ef833b350402f..9f92dcb0620313775cf8743aafc87ea6a62b326c 100644 GIT binary patch literal 4658 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 F{s)tYF^~WN literal 5252 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 diff --git a/Structural/Registry/uml/uml.svg b/Structural/Registry/uml/uml.svg index fe0991d..7daccac 100644 --- a/Structural/Registry/uml/uml.svg +++ b/Structural/Registry/uml/uml.svg @@ -1 +1,152 @@ -Registrystatic $storedValues : array;static function set($key : string, $value : mixed)static function get($key : string) \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + storedValues + + + + + + + + + + + + + LOGGER + + + + + + + + + + + + + + set(key, value) + + + + + + + + + + + get(key) + + + + + + + + + + + + + Registry + + + Registry + + + diff --git a/Structural/Registry/uml/uml.txt b/Structural/Registry/uml/uml.txt deleted file mode 100644 index 483e60f..0000000 --- a/Structural/Registry/uml/uml.txt +++ /dev/null @@ -1,9 +0,0 @@ -@startuml - -abstract class Registry { - #static $storedValues : array; - +static function set($key : string, $value : mixed) - +static function get($key : string) -} - -@enduml \ No newline at end of file From 3a35fa7ef6175ce880d79fbc4d09476cca9f5154 Mon Sep 17 00:00:00 2001 From: John Webb Date: Thu, 31 Jul 2014 13:35:10 -0500 Subject: [PATCH 18/21] Updated UML diagrams --- Structural/Adapter/uml/uml.png | Bin 13396 -> 13648 bytes Structural/Adapter/uml/uml.svg | 142 +++++----- Structural/Bridge/uml/uml.png | Bin 15981 -> 16163 bytes Structural/Bridge/uml/uml.svg | 288 +++++++++---------- Structural/Composite/uml/uml.png | Bin 8172 -> 7981 bytes Structural/Composite/uml/uml.svg | 140 +++++---- Structural/DataMapper/uml/uml.png | Bin 10553 -> 10473 bytes Structural/DataMapper/uml/uml.svg | 12 +- Structural/Decorator/uml/uml.png | Bin 11534 -> 11342 bytes Structural/Decorator/uml/uml.svg | 313 +++++++++++---------- Structural/DependencyInjection/uml/uml.png | Bin 12816 -> 12709 bytes Structural/DependencyInjection/uml/uml.svg | 239 ++++++++-------- Structural/Facade/uml/uml.png | Bin 8579 -> 8371 bytes Structural/Facade/uml/uml.svg | 295 +++++++++---------- Structural/FluentInterface/uml/uml.png | Bin 4974 -> 4910 bytes Structural/FluentInterface/uml/uml.svg | 12 +- 16 files changed, 695 insertions(+), 746 deletions(-) diff --git a/Structural/Adapter/uml/uml.png b/Structural/Adapter/uml/uml.png index b653077f56c497e8c68baae5957bbb4db5c49f6b..2cf82a19dc52a0222761e29395a738e129fb13ad 100644 GIT binary patch literal 13648 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 literal 13396 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 diff --git a/Structural/Adapter/uml/uml.svg b/Structural/Adapter/uml/uml.svg index 189c56f..4eec346 100644 --- a/Structural/Adapter/uml/uml.svg +++ b/Structural/Adapter/uml/uml.svg @@ -1,4 +1,4 @@ - + @@ -24,25 +24,25 @@ - + - + - + - + - + - + - + @@ -51,22 +51,22 @@ - + - + - + - + - + @@ -114,86 +114,86 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -203,7 +203,7 @@ open() - + @@ -213,11 +213,11 @@ turnPage() - + - - + + @@ -300,16 +300,16 @@ EBookAdapter - + - + - + - + @@ -319,7 +319,7 @@ pressNext() - + @@ -329,11 +329,11 @@ pressStart() - + - - + + @@ -345,16 +345,16 @@ Kindle - + - + - + - + @@ -364,7 +364,7 @@ pressNext() - + @@ -374,11 +374,11 @@ pressStart() - + - - + + @@ -390,16 +390,16 @@ EBookInterface - + - + - + - + @@ -409,7 +409,7 @@ turnPage() - + @@ -419,11 +419,11 @@ open() - + - - + + @@ -435,14 +435,14 @@ PaperBookInterface - + - - - - - + + + + + diff --git a/Structural/Bridge/uml/uml.png b/Structural/Bridge/uml/uml.png index 30f78d1e36dfc437b9811d847a6a323d9c6cc3a0..df6ce3c32fe9a9a284c5122596bfaf1389ee9da9 100644 GIT binary patch literal 16163 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 ZqL8~Tl$_PiR?&bzX>kRyyl1by{}27wzE}VN diff --git a/Structural/Bridge/uml/uml.svg b/Structural/Bridge/uml/uml.svg index 8d27913..189a7dc 100644 --- a/Structural/Bridge/uml/uml.svg +++ b/Structural/Bridge/uml/uml.svg @@ -1,4 +1,4 @@ - + @@ -28,22 +28,22 @@ - + - + - + - + - + - + @@ -52,64 +52,64 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -157,294 +157,294 @@ - - + + - - + + - - + + - - + + - - + + - + work() - - + + - - - + + + - + - + Workshop - + Workshop - - + + - - + + - - + + - - + + - + __construct(workShop1, workShop2) - - + + - - + + - + manufacture() - - + + - - - + + + - + - + Car - + Car - - + + - - + + - - + + - - + + - + work() - - + + - - - + + + - + - + Produce - + Produce - - + + - - + + - - + + - - + + - + __construct(workShop1, workShop2) - - + + - - + + - + manufacture() - - + + - - - + + + - + - + Motorcycle - + Motorcycle - - + + - - + + - - + + - - + + - + work() - - + + - - - + + + - + - + Assemble - + Assemble - + - + - + - + - + workShop1 - + - + workShop2 - + - + - + __construct(workShop1, workShop2) - + - + - + manufacture() - + - + - + - + Vehicle - + Vehicle - + - + - + - + diff --git a/Structural/Composite/uml/uml.png b/Structural/Composite/uml/uml.png index 70162dca7c04fc31ec7c6e762102fabc2b7c7083..5fed73d4e595ddcd095154dc335e3b035a1e3f59 100644 GIT binary patch literal 7981 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 literal 8172 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 diff --git a/Structural/Composite/uml/uml.svg b/Structural/Composite/uml/uml.svg index 1f2196c..c587818 100644 --- a/Structural/Composite/uml/uml.svg +++ b/Structural/Composite/uml/uml.svg @@ -1,4 +1,4 @@ - + @@ -20,22 +20,22 @@ - + - + - + - + - + - + @@ -44,22 +44,22 @@ - + - + - + - + - + - + @@ -102,124 +102,114 @@ - + - - + + - - + + - - + + - - + + - + render(indent) - - + + - - - + + + - + - + TextElement - + TextElement - - + + - - + + - - + + - - + + - + render(indent) - - + + - - - + + + - + - + FormElement - + FormElement - - - - - - - - - + + - - + + - - + + - - + + - - - - + render(indent) - - + + - - - + + + - + - + InputElement - + InputElement diff --git a/Structural/DataMapper/uml/uml.png b/Structural/DataMapper/uml/uml.png index 05b5812b79e38f7f5aa708300b2b72db40f0a544..97cd26a7bdc56c8c30a426b1945a9f393a9b2c45 100644 GIT binary patch literal 10473 zcmb7~2UJsAx2RE3JOZLfk*=Tt>4aveDk2>Oq&Fo2q)V?MASzM}|M$Pa-eZR~_F7qUt~uA7>zfIFs;)qJh4Bgr2??c=;$tlm zl5=vv-Ff*u(DH;sV2gx=>xa_ghtE7mR+ElAZp_gIY9E$d*E!D2=>D>ZYBusJ!OzH>rfm*stI0o+Yc9 z;!SsKQ-+yNUY&I%1+twPEHIS!?zpQm(reOKd7$_o~}j8R_%<|m>zrMTTZaA z?V8oBKUL6a(OBdGuheFhutJ;`QqJb9DmY@+q)Togonu_}A83Bk@)9d+(QVZeU#TFp zOL{0w)a(siFH@1o(J$;6vN#>NaNz>kKu5~DC+cg)quF8nLCFaGa3omcY_r2eXxC|b zYkkmhQZlvlv4SH_TK!r|Q<%wI?qcv0$-%aS`F}cjl`P$?gs<&x97uBfjNdhpjF8{4 zr(Nt4+K(zwnO#agJ?-d^ii%G7?sF**%OlpsAznOM5bLg8!zWJW?H!IaFPK@y!S8W@ zj zxGVDD&=svO3C5aVCX5Xx=%Rm#x!bwOH?9m9rVBB$eYlb8$~#tqHY)Fritb4NHU$im z_oF|&6*GD0yx+F2@P@YC$Ro*DV^TNrsw6+$Vnr(tGF*VJ9CI#I{642QEhB4`FRH7N zASP`PUB$)S1<2KEU%Z2?LmbWqYS%E)g~K-|c??S!Qal%tuU$RY`pBC2EiCNe1*dC= z;1f&u-mtzI)BwI$uy*+I3_hiJ5O$Q3_e!5}4umD7v% zfe6plEd|Hp`5zp>%71WJGVQgMK;m3@%QGzxUArYe+AXf@^THox$e6gf9UUHdgyLMd zxc7+@OSFM{cpi17M4at*+nP}reRu-chratgK0eB~kIrri41Y-I`G!$V5X&ts9qO@~ zYm4jI?95OB(->KpU%CdV%rrn*WKlUj#T9s`R zgQ=1!Js6*KtUko<@*rL!_F78@^Au<7LcZDo(@^0GX?X(3WAL|^2>tOADbyb?Nq+dZ zGim;Drej(v{~UiDNo*K!C(aen3&b9Egd$Uttjj#s41N{%^2sibb0Lp|&XG3Z>qk?n zCA$u%=Epf|uE?IY^8oJCo=;{t%YWKQa{l?|uT`EiPru#`P6f8J?9SIBEhas6)q|Vm zhp+DYf(_7oe5Tdmy)i3`5o=j-nr%i`1if^3ezsJcFtNdVBsbR;+&Y-8$IG%#L-+QU z#Ao>zpB6StwCjqB!8)P}g7s?@QPX^&3!u#V9;LsIzL;>BJAb77p6ys!re+^`mEL>M zz`bwPtzxlmBNXS4yC(yOuWr<^-Yj!doVQXi8t4}o!C1`Fudjd^)9bA`nLtvY?=1|Y zq9)zXCYr;{EvAs}{PzYb+@6>p-nWx}9k25m80F`nl`hrUs9)5(!?)rZ#YT+l$p)+L z$;V?QtD9T1)iRhZSOu=X*c@t}Jw_8OLRb6-B_4IP;FU_j?B!moqIam(FkqAroMSHI zX-pM2r5m|p^{}ONrHf6}%sEOF_P)6K`|K>H(5&6~O;-+NF-S!lBuTkmnNEVTI+^P~ zRA5_WtR8;R^%OHT$CPUm>bk%E7|w`_*xt>E99ENs`xpDzVrWq3P{LBX4>V3N^a*V6 z?aGJsA=wdTj#@@(^#^ipC`J^jK0lEaJB^xuHHa>4Yn4dt4j+mB0gh3(LW64D+3lIH z07Hn{&_yHMoEPhtjo8MA=H8FpWl0--gN2QkKlXOGW8Ri`gRi`2uCpN9mPKY-+4r!Y zT9fK6Al+YAiwDOLE{pYF+9PDf%zwSGD+IcZUA-SI#6W_oDmQddX9}=-cAygr`1k@fS)QymdvQQ;uuSgN~pV<@*!2q>F39d8=K_f351#pOoi&fA$F$ z*<`zP?GEZ33F@36!#_8PATT(5kB=Td$g|xQ2M- zfcbHK`YwtC9v^6F@Sf*r0AKva9f>YU0bKsL>La=kK)_lvhDYJ_54zNVFQ8WmC9Zl& zr%R=N;^kPW4D8j%;q*}ObLV&1-CI~57CuEto3*u=$xs%AnD`r(R@$<+d* zj&ml&#$lMFbEUC)Ir!3rg{yz}ypL_|nWp(Xf31tSv<$4Hq0IT7o5@gBy?7F7(a+?+ zO|3*6VhW`wb|YW-39H4oMW_Lj`eK}`1Uv$AKHtKUfBqBiYhkLFYVib_UDlAVXiY$z zFdR{uSc<1ppusk?S8j;GlUM73gNJX9;0pY!%O9Sc){~rvZg#gPRQv2S*3=-}w^ON- z$C#;Mat?kT)8ED#&lnz%sLGU=?d0e0At!G7ZW2Vvd$>H5g6{3eiooB|L8(KFByujq z{UnD_FZaja_;oFIrLg#^4tcfYfTZ`yCMw0u?eW^jtHtE1y(_dV-$w+_V9Wh1o7yGt z9o+u8qZi&3~zYOF=ScHax=#RR^oi>NKf&Gft^ge+nX7ZlTbizRPuG<~hu?G?5S zl8(MDD?j%L45^ME@oIaasvgUnQuvL$LkMyPnp_{3^y(A{!Ji%X1;TiYT}Z zO!i1%O+3!mEof#JKUZXUE1>$m!NgtV_bJimGHQ?#99dUyi&kqq3HzGvjZWzs4KnMJ z{H`Q7w`aaoa2T&Gx$D6ve2E$JfL#HlRzv=Abg5T6BJ~|*wnop6STN_L0v0Zitk3A;QnjNe7oc6s2E*M+=##Un2DxvR!4_VdR9sZJJ;ZDUxXAXX2!Lq8{)Yf@+=GO7+ zjk?gg{t^yJ+4`J0_NCR>6%JI5?1-?0=fhHG&$B~|R@jU#UcU9+#;PV6$|BtUrCoDk zRB(X~MdlYB58h~Bk9UcW-Ws#G$et^SH(vJr)&@#QF^$)Mgt-k5d&qO>NV?Ok=FlnV zQ}+JOhocU>Pf&$lsi*t)W*JY=uJweej0ew{?eK@IdsH5fSZ0iedlVhT9oe0PM5{}-(!N>P-f1$BZ@9K(4ja`=A znD@cO)_1Nq$EwELVdJK5l6r-tYtL9sd9rc z#nlyr$O!MR3maT>nS+|6({w7agh3>u`ob;K$ere6)_@(w$KO3ZSzA*VI8YC1dg`*_tTVR-?J`cBBs;*zNcjz8(2mhCKyd> z9yRbB47)9z0K3%M+V(-otmcYFr+vwaWij;rFMUuwpeUoV_rC6{gFJHa;>WYi6Kowx zj8(6i{sd#fOM~NvR=tHnf7cpUUs+7sqA>mlc4nG;ptbeRk!sD)cXO7lqYC1E%J)zV zpCQ6(Kk}h5KW3YevHY4SW`7BN8)IAftRF7JKD)-i$mZ&Tj4{)D`mBS=xB6tFdY+AW z=wv)#+-x0w+M_X&9(g86qAPm-IT&<-c+;S9q*3c}QDOAG9q~7OQ}R)Klh0U9K<*%9eXETaHVSPQa+B z5BiF(+`UuF$R6XT%BokJWWQhhWXYiKZtJD8Kz z(mRn;E+CFLrRz3UXO+q)^;fg>rRLw45lF|fto^JxcJ@~ougtbwqq=c$EF3X=1mmjx zF6t8BY(-IGefsDTYu?^8qX1VMEzOps_i-`E+ug2b8PJ^66g>Z0ne3AA<> zebFE7{?U3jj>|US#qIM-g2PNGAmAuJ*)5fS<#l6PR2Nmqc$1F(4h5=8XgH8rAhZ+d zb%k&RGV58k6q8;n*aUcEGfV*ZLity3o$047P{Kk-I-SJCC3*8MYM%GfJE!C@9BbUl z!*IQ(%XwpOJ+mesWtpuS=4fkIZx6fep05YgiIT1WH`Fr=oPCH|M+qYo8uxIqE3^Ia zWgUcgn?cWXkvT>I)m`t47lEW9$ALjmUST5(Cxatgv5+L;@))#sxhJ~c4NJj$9*n`e$KTRA47;n(GakFLKXzZ^Qc41# zzZi!{Hq}cagYABwV(csK9h}o=&;LHKb38WNeXzpl>u2#k2x3~76tf8jlTO*R8_#<( z%zT*@_~L}5f9_nO_w>We#oFvAB)`=~R2lJb|0mL~Ajsu^=O-X6`K^6D+mAD%CFGU9 zZb|nLm#IsRc^WxoxR={PT)N)-cMaod>=Do zj+2rpxW+*T1upL{J2Z@}AWvv|omH+bVFksU|KW&w zR*6N~psAtdHWv(4g(EoYM~csJ<)_7UEb6L5^jk(AY~63OG3C-HI#ftLzq*A%S(;W^ zM_!a2rAm2}%hhOew7dzm*yrbJyX@Fj$c|->rsoa`# z5U_%Cf9I}$GQPjl+La2&FF?+Fxg1AyvNN0ZpDhG*kf++|VOPUzq~)m;`+h&ssb(b_ zY|&RMc=OJy?uHWGuEp)W-as-dd3J3I(aoZiM_aVt$Lw6^^lrNrnpg)kM$SZqUAt@@ z`js7-9OT(ZX4T7~z8`!0wF0q6d(a<#V7pw5&n>Y7+iK^k15%*@D zj%oyKB~XK?L|a_)EAwa`tF-QL!+g2QzSs#RR@4>@@PAgk=OX*vo)WuWlZZ!^iF0i? zBtR)9fsXmVH39{l!O=Sy>PgPPlzgJ$=uPD9we*OZ-b0o(ksnw8-{zzG5Opu4MR&Fx zMzZl2QBB0m|8GSR^ZtLb|Np<{$}9is3Vit2h`@(`M*JU}&w;(j)E)q!ymj_?kx4&pX^DX#` z>cu)1Q=@l-H)gqYu%zvCJZ98|@@d?)FTFcpQIg)cF zE;*)DNc*04y#J8_AMAi?!j0r5Tq*njXjN98SySWUW|2NSx0D>PObDUeZdO}$=gk=J zb8Kx7NKT#^(XaIC_Zv=6=kazw>HYoRhs6owWLJ6*Gp4PqxXfIlKaxG2Wi+gQ(KZ&H-Cwe{Y7GMs#^hfwb+x#Hqe# zZ;pYt3LGGOL&MT4#oca(Zb1_tN4{6)3JlaZqFh2pp_*R5t#`I$c zYN%^0W!1sF`hyVNXKIg4G*a%Bri;S<#2d#+VRb|Gq^j&UsPf^b3&=C(-!|K$Hg4;! zmMQcFDZkgJn!@j`@R9F?B{W^5xi6E)ValOEWi2EjdT5~aW%vB3R=46~!=kFNzy@|_ z*1R1NOd5ihJL0!nwq=RA2VtmA4)z_{s&*TH{C1Z>iJxpB9|7u#HTfpjV4|dhSb3?xeDva6!puJBfNRex%7tM|63EzjqY=e|8krzju_* z&wsWUXBK&{--hCKu};Oa^#vF>L2RMVgEZ7o{|ln5oc6~B2pw$fX0Bf?lG*p#YtH`} zf!GSU#pJxT9H3hkO3xw)Apx;XRBuMii&G+;w+Z=&yo#v+t6K5l%l}RlRL_aJJK6&d z$P|I&l1~?s;~5%{2hG7Cjbn>kQ++QCVkT9?TjBKNTSpv6uB3QBf^cejk^%I$p)<%F z&Te|wRwl-L_|M)We+t+4HLqMTufS*_MCBy^nY~|8e>a$_5W$N|lt- zA^=`>bB<|A!JE(>`1aF0i>B+JPJJXeg!tr1`-Qx+e1%+kO3{c6`*)AYQepHxZ;tYMD3M_j^MW#Gn4J*>ZO3SyFJZ3S7Vt0mPrJef17p0p2fHv(JzES7l0guXywF= zlB^#ee?XqMwqDM*2H!ADc~!ICoDOICGr~<&gu}%4_;-QRlaswsdKlfF`t;?he!|nMdljrl+#<_Pn>^zM~ub0t||< z;(ONrdOdt6+_dHxKd;9US&=5UdcIf0M;@EK+bTQk?G|+W$-d_1{ce?FK1rKaZjRjD ztL`WlC#TYaH#bm1Ud#f^|1U%~tSH)?fFm$GtZTUW04({##q7QSeeu7QAJqvKLnE2PHpKf-xVb(og7O(h$VwgPDhj_(GmaLD z=6wjI2Mn;FI%kq?m4T)5mNBFfae}r$JMnCOwUFE2{T7G=W5q;(az;zTPrf1yU+#*NW{FgN}kKm{r3^B`cK4FMUioRO?jLRkwu>P>f5(*>$q!D5)|u{Cd*~ z#ZeQz!>K0cKSN##dcPV(^mj!&WOGYyBD3xl%&d&W5*QZ|Eed8G1p#wbw9YN8&pI)y zD0gubMC13!#X35ZtZT==ju*Q@$PsaXDG(N3R8u)s>uscx7(Rconh-# z^Xf>``_PAsKyhfwvxwJkdX{HplGEpaR%ntFy4heh5EC!%>+@=F1|@LzYOTF{%kfXK z;breTUcaie!LF{i-^v>G=*5Qf3GsIhtxSw(E+*%E{+1}d?|W1Q@07j&JDWnF3meh(u-e~$s;u>UIDpfD$i`vR2PCLK z#JJll08lxzSo|`%9*m1+{_(ilF4vyxht3ti3?C}vUD{d_+J;O8dB}i(A+3zpPThjt zDQX(XB0sU>8fH|sOOp5?@#M8WtGROe1mL1Rk z<~5|@ zY0kXq7q&xU2;IyD2ar+ELDMuJu=mh^!m-}j43@WXHC0G;u}iWG;<%0(l34aa--UH1 zb^vG-oUXMF>|Ip=4(mm@dL=@aX=LT{>bkRjsA%gZ^Cda{nJqS-;xBb}HegYJ1GtX? zK((-K*C|i?xRy^hN93l5@v%fA0k=^7K z62OE2l>i$Nx@XRmVjy~d;)@0Y5TwOp9X)|`!X$y;Vz|(DJI2deWcjNgWD4Z-VJ1D# zhFM~-sVpr$30I5^9%I{cdyiB6{K+{yu+oJl7*bw4!P#JFp~_D}JSc-H{Y#$lnTWvy zoRqD%Rz_%A=w)Zr>|@`V^T469j|>r*Wyg7Ni^e+3u77RsiwJuFE=YLIK;?xgT^5mPx0k##;O3>o%=Nw`|`nn@=vBuXRrUUEs z2QmyOq2XH(Af_exrKL^eC?NxuF@R1Gm-oL1=zk(I5S1MvlW-#AdhXn%20$)B2tc{i zxv;igCh+^rGI6}a(RAzlt1V0Co3;_1LiN?h#R{ssfw&v31nOr<$~YGfr{eOG?sj~^ zvi)Kl!I9T0I!>ip2vP&m;KizR0oCicSyAdNe;Gc-X8mtcFTC2mAhIs%pcr}#-o3>g zh{ZkBg}CoE<+LmXWZRwou6LaMagcQhobJs=PA2JIpRLR8<9HfnjiZ8I>3 zx2s5^sJ@(N2`Z4gwZI^(tlyaLcnQ00c!q*rv0Hvf?~YBhLUAU}SS0={LF`?*tt z)r93IJ`Mz|eF$098;-~ZM+WF~&OB1omhC1$RJWCi9X9nd&>c+5$r+H3GPHbCcIbGW z&lCyXV<}FitH;Z=?J%R$0Po|B_q!FT_o%Hu(w*$7_n5Lb2tqnR8X#<|;DMr}BV*jS zYMySBPNppXb@8&2M!5T`1G)kOEFcroXxr(&Ouj>K?9bqv0OpGz_Oks5Mek@R=^v|h z)C&7eM}<%-wdb|FSdVgQ*?g>?l`??ea&ymJrws=ci(t z=5^0~7qWGa5gOJ#wS0TX_bfiv2cuMxE-(A~v};7*VoZ%I^q`@2^B%@KyVGhANC0`{ zK=Cu8O+v$k%hI6ZDt=%mbPh1ih5Ta9A5iNIY1$NC2eraHe-0WF(IS1cs7 zt~I&})L4b$VrT`+ZmBsa>AJYM)R((i%)0c)M17UwPfIGrHM#fyl&7SmJn+t25_YnU zYwJe4!ANQnc$=GZ9BDfFjf%aC$Be7I)tr>FigFNhaR!C0uvAy|w=1HVU$sioElv)1 z&_ac2+lxAeh+$jH${N3orT7u6T$^T~b<7I)& z)BJDWQAi7*=EN6Dr{_5IqaedQ*shhoCvR`iBwnxh`67C@scv3CpG(1g`4-Zf%-TuB zK%%*7)`iDHuAI4#LDE7KCwl{s-;?XdvAUmT4h+>%*zWOkWpLN?Xy1eUrDl?oBK zgjFmhC@;P-M1FP@`o9bLBS~mso{mP7xkA;VnPX$KMUYtQ1ndUM>Dp=xVOw|Czr3? z@&qv{FO)AKHS!Jb_Ugf5(R+s<@y$7V8i-fet6++yn#-1L&a9{%$ZM$^(2Y+AKU4#E z=0BTT|CYDq{`iN&zaSA)_N3>;yyQ))WbDN{P&LvYwlI~ry648+cPh>Hjd4suT z0&x6e3COePm-C&3h^#ibZ&~m#kfaRHK_)J6DTQT0`2y)aqX0rn2IIUs@~!}L;W?Tu rQg~E3Q`Tr^;Of7{k{{$w*%TAxC>5`w%YdISk|@cmKhAsf{PlkU6fX&n literal 10553 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 ZkQpzRny^!K;FHL6igIeQ#nPt!{|~^_s6qe$ diff --git a/Structural/DataMapper/uml/uml.svg b/Structural/DataMapper/uml/uml.svg index dcc452b..d65a9c9 100644 --- a/Structural/DataMapper/uml/uml.svg +++ b/Structural/DataMapper/uml/uml.svg @@ -177,17 +177,7 @@ - - - - - - - - - - - + diff --git a/Structural/Decorator/uml/uml.png b/Structural/Decorator/uml/uml.png index 1194a629a24d9570569fe7bf72537e6e37d17c9a..dc4fae373b40036fbe2a1ea3efb55ccc69ed8183 100644 GIT binary patch literal 11342 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 TOz8x^6GnkbDN2@!8wLI!G=&$o literal 11534 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 + @@ -24,22 +24,22 @@ - + - + - + - + - + - + @@ -48,19 +48,19 @@ - + - + - + - + - + @@ -87,276 +87,287 @@ - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - + + - - + + - - + + - + renderData() - - + + - - - + + + - + - + RenderInJson - + RenderInJson - - - - - - - - - + + - - + + - - + + - - + + - - - - + renderData() - - + + - - - + + + - + - + RenderInXml - + RenderInXml - + - + - + - + - + data - + - + - - - - - - __construct(data) + + + + + + __construct(data) - + - + - + renderData() - - + + - - - + + + - - + + - - Webservice + + Webservice - - Webservice + + Webservice - - + + - - + + - - + + - + - - - - - - wrapped + + + + + + wrapped - + - + - - - - - - __construct(wrappable) + + + + + + __construct(wrappable) - - + + - - - + + + - - + + - - Decorator + + Decorator - - Decorator + + Decorator - - + + - - + + - - + + - - + + - + renderData() - - + + - - - + + + - - + + - - RendererInterface + + RendererInterface - - RendererInterface + + RendererInterface - + - + diff --git a/Structural/DependencyInjection/uml/uml.png b/Structural/DependencyInjection/uml/uml.png index 91cdcb005896fb3c71858211a920f6739d6bd7ab..67e6ca16a3e83f345366009fa3fd92289f879f46 100644 GIT binary patch literal 12709 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 D`FXOY literal 12816 zcmb7rby!s0+peO7N{C1cNH<6~2q+!WHFS43f=CGnNH>Vm1B3L?Al*3(-JQ}5c{aSh z-}k$&bIy0J^T%9!_MWxYUTf{O?&p5)dr#;G1xbvjL{A?)cz_`-^-lT0gNOXUCkhP- zxFSv)-v8hM8(jLGsH(@*ZaPBarN+hWQIk(o=Fzq3nvd_fkHWj(G?$ShJMwR_mGHEv z2;x8DQbbGfytd0Pts{prGMLKsG0`M9G$hFL#}76BJ$(Mecz1Sp5N*c& z_wah*>D?J{@KlG}GJn5KsESnBoEJ+apWtf7g(7JzJbeg!K;(Zv{y^;;2Xm;D4mu(# zZL{oiYZUo>k2!R2qLh-71LqJ`NuM{=nx)Tu%^2itaAP>I99DIhg&@$t=o9Jl1P!YT zbCNBmU>spNlWJ7NWA%4JApwXGz9`12o)Dl4{P$IBS|?12dAocmstAz@_r08_z144> zqZDA7vC8yO(NXtbb4^4Lz?m)+ni>t@-BlSP7(0j^T;;*KM*{lRIekn?sKAYOVc*6x z52sabD=#kWaprW>9Vsgf_uKpxNh6v>s*Tt7o{8gF7*;1mIrdi=b9rxHh*h61bOx|wlO~pTPuI7sZTR9q?@R;8!&UoLZ{@E-1N=(mZ{}LNQNhZSYcXm*q zbJSn1&x0w?mYmJ%9+thQ?esFgR&$BRy>Ufh+po5V28QbPcF=97y57##T z8?Kz<{18vKW9&!bkx@iH#zzTb0oiGe#=!P@>R4R4d9&Qeuf)@9Ce+>CCtd>+8N`)4 zqng0%!(D<_6IMSX6*Dx)gLG+HnnmF%)Vz(ovU)ETiD+x#kFCEsh7 zx*QxaRKZ+wkb@j_z^+Y#i%UpINJ643z`nGS6gsf|Mhk@?{=}CD=nQ8Nm;9dK@tHAg zlSuE_9~qUyspB78F}jjdZE{W)Uj5qKl@)LUi_yT4qhkHybvdD&f&xp@a)+#CAuqK3 z`>x##j@d8YzD&4r`?2Pw2YT;hmg+X@;y$}zn4+6!&-_MyF3q0*ET`yu)wIb@S4kG> z_PF+i5)XIx6a6|L92GOm{cJ?IM_DyhPIkY+jUIQy75jnzJ0N=^Ar4ll%eb)Rkhi_%*#;!yYxM_$3v$S-U3kXykISR}B zkWqQ-B@?*Yok5!AzPm$W{K&K@gIkj#NX>5ZeTxda(YfuUp0^~nTkb{a-HO?<&%L#u z5;)j~tmE}1h~VSbI2M-o@U}UmUpa}YUe|b!D31w}NEmC7pG=^c?>tYb>TD+De>VQ^ z-Mf_v;wMW>F{C&=+Jr4Sm3oTuGV}2}U@eDSb%or03w3g8k0u!s9%Wfq*Hqq*t}ji8 zuB5$lkR#F>S;$*XO|~TY%KcbKyecALB4u3Tpu7U`J2w|`9Y?2Y0)2)Q5QXzpyXXer z5gUa5>Gq9FGcOM_?&6eZu400;ol&$&u(ea!&@#HTKoe3F{U0Qw=yhR(9mkMZqu9q9j#N|J7C{Ko@%!6_Mj& zBT75S;hM8*@}gq4=u6RyMLH4$8{0~(>P&Ib_$~ljvAE+Wmbalb^aY3DN)mG~)8s&~ zCYAK3wi&gK$h0o01p3V;b>{h{;;{=OY*@pSswX`>+B1RlaVQ@~wszDr`m(7C-&Iws zJH=&Z*BTn;D@9LCOqkqquRE$G6boIic1en0r)AGDM@*k)nputAr${&9dk*#bA2a9C zAY0P4ue&3{OLZ0=&nnj~suLP_C@7sRq{Sl!cp8V2MsjmG`y)7emEcFn1mQMGUX zQqL|IF-Yi_?|9=nP8;FTf}ysxV>$B63*Re7H>ZMX2v58c z6rX80?uvh;!lRnWSJ}{+s%09{P{H^iq8l+n{k4cuD`nq{5%OD!!FAlr1~rSeuMOJNP4PGd|!Ova-OQEtGMy85`(rS$&896EMbdE!OSwllZ z9j#7x-0oAEs261Vv~yCN6-DxY?14eRmg28b3kQ9u`TwsN2 z$Mmz=T5(g{f`VznmWw#7oRq~Meg~e&%E_VI#$Y*r=fuTk%=Yn3zQE*mXxPwctpZnN;=e)>%Co`mDpDfyPXIi`> z{FTZ3{9O~iV+@%HDTK>r>#5AgS3B|4`6BsE8c!sydwP_~rl%Q&o=(3<4U3G7JiF_- zH<#)u*^JYc8+?Cn)OF`Zku;i4G&QcK#$HfZDx!bFMq%z1-r8m>u;h6K)NAXC5I+Zm z^mmC7rwbd`;#4w2G^QgE-lV#IPY{V}OmbdvDzs{K1wU0`ZqnyM0oFaZ9SO?mTd?E5 zknla7G~bj>HnUMA>+OVgOjVDijme1Hj*_M72=Ch5K+89=`r}LNa{4syNy$I#rxs<6 zY)uei!AO=8AWv5$rC84^j~p#FEp&xiq^uZ;Z7iU7em zC}H%WBU=u`{DX5(&;VivBEM~Q)ivuWXwVTB)cfdOm~gyUx&=q!QK6aQu5h@9<{?-= z+OF$VS&xhk8{UL&H=nNCD~|Uy3^)8SpIttal#2V_FA&RB@vNU%4B9AAc1GNqMHUqy zG%+opsuC)E!~;UD!oRik+P)GHkGd6P!Z96Tar#hDC7iABVlW-Hf^Y5ChioC zO$YZ!%@KmmN1u-#2yxX_S&0ZucXI>F&SJbrqg`43y-~U?Yz9+9fTGLcq{UCs{RKR> zUp|wJ;KuQ=%Wr_dm(SVA?iU9SrTEr|3GESw#r6(afsNRay~R47HN~%=>&>TE~t!VBdtADBNURz6GOpoIJOG|aNt;&c1gG5^S>i} zbK${-JXUZwTgIDX)$$~1Ofpgio$ehO{X`=s$WE7_mEw{2?JmM6?~BswAAKLkB&>-H zN41B_ICv{Kmko90ati%O}073+XQ*)$w^{o=K(j)Td%Ei)=|mZsk&YixU7Kc zXygZ%2}ATZ+n;{PMNvSOUT9Rlrc?<`i{LJ#rE_d>u6MbK5>k%0ET2oU_+~mMtY@`9 zbrO`jdt77hF)>#O9_kYGj)RQpB(Dg3wl{GO(9w9C){{s%Z(5hcsFI%N3=XG}5;?7;3;!Z(MC1L;m{ve;%9+AuO|EwXyHNS% z%ithh;cR1SUPmEq_S;K^f}XIlIeul@-g>Sq-)M@ZEeB6!%0N~wp2`M0BUStEQc;Cd zSX#RA_Mnr^Z!PU8Bv2v&Mdt2y)A;Dc6a-(pN2Yvql+}HYeRoDZCH;D1Vk5$TK)!~r zNr9B2|71sXTte0;S}l5lTD|5}ppOL-<48&Jbo?`3FyqPizQ^tDl-_Cj;@O!sS;M5@ ztvWcr>_=ZUCS1z7YcasF_z~y~9h1d#ks)YY8Wi-Zn<(j`w#SRCW$M!3nQ%wnJ-BK1 z_E29^|E9O`<{E>GvtW*puzqH;o=x&7bJ=)*$8J9ECj$27rWb6iU&&Lj!0?(VG5Ve5 zg-L3p{T1)V8`N^^oL?JG53(KYyV_PF8D*6`?XTpC zNeyWK#alU5C%a=3qJ_ZoMq{Y9JWpYZDL<8R^Bw#p{H9&$z&qZfXaJi;VoSF1zMM@vHV4KG#~=0bKOR=#Ve##W~! zzzvCdkvs@RDp2+r3>rgPI(r0e^@+R_W(I74z>rl0e<0*ZH zfofl04SItND=*X0;F^S5zowak-t&bL)U%koz`>{5I7ds;VJ1ZzT3OTmvP+Sx=Jbo7 z#FC5sfcJ%Kbw|0~p8n;W!>Nfoi|JB#%Yq-8Qf!P@P1a$FfR*n|<;kV4&VGZYb7^A? z`>>&hKPGeunIFie{TUsQA6~-3V{KmD;fYxxhS%zK{#XW$d(dUD_P*^4$PJD}K zcu=ekIU##qG@c0i6%!L-0uoTY*WxB|;(f|U%Q5;>ckS9t->Df|dh_--?6Ndvh9JM2 z7+Sj=k!iZ@)%X!UINF)n=-cAowWzF7E?L*-=MdkRMaU2JdZQl8sgQ_|#8q&dd`?qL zeH_SylyunOnR@;tjMsqCFVk%jI!C;tRqwP$?`~)2;O;5k4?0$YjJKaBi<$1 zSzl)yZd8E369mE`q1chM5n%fhLy&13ZpA7U$pwnf<2RrXe2zU(;u!JgT@lSRuda?D zS$=m5qks&L^W!%H(5di8Rfifpi4of~jkAiZnKb?NZIm*h)slMA)Kc?JBh@=BIvp=s z9lN+B;+`LODztGIl(TDpdywJ6XDp)nEtT>&0v|H>1!h8=Co41;qw|RC{e<6Om2wHG ze60VL&#PbYC1nW_+wS5G;T*Km_^4hzM@RII;!PR}uV=}&bleh|jY;ZU&}n5~V&_p* zG2=2zeQfr4O#$j^w~7(1Yd`W&*^xtD`S7#cH*vb-r{gE^l;}s^x;YXHKc|5T55p}Z zKYXn9paSArQLWFf_An|+e)Y~of>)HC3%=O){#N4?DiWjsZM0jJMU28ymM7oJ+eGKq z|H@W?ZJu!V+E_k*gRRkPDMb-b@M zdiht@_k22d`wsdo61I}9PL$u>dQj(cS;shUs)j4Fv+2XmRqAmFm5YuTxMUDK)I zG(frud8OECb+{qUP?jop^#dNu_WXLWfTppxkYR7%&eO+YKDK}|d{k08?z?=?tHL6O zWme8UGjl~ETjwi=*9o*4Rz^q6MqHwHUTq>=wr1w7vygP>kIYyX+Iud0g11JGOn=xO zAdv*(Z+yDjq<{`KMNGj~dhksI4T=P(R?TL{M6&D+`@D?h=mdS+7(eKMf%Lw;6A#N| zgtqbgkyt?`syJd0%N4}I7z^JXAEA}{ZtiJpQ9B)-DOOo{I6*Fp9W19In%y16t&p%ZD0QkY|A87-nt!U$WzW-$<+(7YPF8 zKnI!x1kHt~hHgMVAb+9rpT`9h`S%7-L5}7G(EB>gxW9MqaQCk4eTVMw_ix|-=@5u~ zhS2T%*i^uVa2fcbv@*;n~%f&IS1WGVjX*E8MA%i$EH2sC=C7RC*A>WY+RSC((EmYG z)KUvxS)w?r$LoDoT4;gK_YyKs$C#ASm}MWcOmoSdoo5bh9jQ((pj_^#;?rW_tI-=I zoOb?sKI%B%{kZfY{8I~;t|4daen zZn;Pp?_X3L<4#}biTPFVGcd5Tv-9)Ux|x{hq^Q6o)?Jg(>{^n0a$6Jb2bxP?jQP9VgaU`w$7uyRvZ)0*4Y9Ee4aToJBVdWgUp9kP zeWN@FR%pCsRf5ocQS})r4Zo)D(9>^nCj+!HHa3=?gPNL}g=GLl+xY|;;ngOdbT7e0 za@Y?jkfmqrl&abfn4ro9NTWkh&>;m+tydc}uAKbox#?l&2ysW1!UV8iVuFk`{pK5@ zx~I!aR+7BNl25SJM~oMw<#Xv3Qp|4RzPtvH0ebNYu|jC6SC1luY}qBgn_5UhK|k@E zf%lgSrN~hYNu`<@H%cDu&O(w&B5O#`*!xZlcm*N4ZOR`9-;%82q>^Zv_p!1j3IeO& z6dB}S@R#H+U%7OBvyZdonBTX)LrR-dh3n6>Da+;}AxzLCWI#;fBF*qb%+`bsu1o*izxw&B zR=OV6#xA|`=XaZFsg&5~1iZY~)K>LpcvYTB998(Zt_Kx=cBr4IWOB*JQpvjmGLuV9 zuht<#D|-1WkPOi>TUw?we(%+p-LS9~WRsIR;`3=)>@Ty@;G71UlQ% zX((UscP-ACjdQi#|+u8y{LSl*eVrjw2t3$K`X@}2yURl#$WDr24K1~wcp~CX6=KE^j z>Gr0*Mm8Qmkhv7`eD~wAt+LsBxI;Z^kxb|O$;rF^V<7{?tW*;p6BDVK_1%JtD7Po% zLv}?q-%|8b^4qk>z;CkRz1Eub504{UC;UmzIbbX?x>G(VEQ`a`KjHXB=YHmxm{u_E zHjlLdx&3`B{z3KkSV8m`=IH+7VEEqx?IISRJ~3WA`TgbrWP=v1^#QaeTY9j5Y}8kg zhu7U8$;IAd5CKu|Xg@obqGz-_#%=<|79K#Y5cs|iW$}hMhB+6>Q@2lfnA3W<{p(94W!?}k&cz5 z482Xwsl<-}_AGfJ9UF}>aB(=;3d*wwDc`Y>G`UnYM?-7r)*yUh*4^)lGTxslT?*Nh)~rrN04VjF_kTASrw z5^qGq_Au>a9~{hU!?@Pd`t0H-g{-0dBD^T9jis~)7q!-ul%vzo=@Vn8qcS88 znHgPUYZoGx=!jW1sTt^O2@?AC2^G>D51;ivrCpZ`$IoRsbw6;>ORCKxj-v(${oA^y z5TqZDgwk=jid6+(CGq7PL%Z12sk)3o(+ZeU&)-%m)DJ9K-M)IP-oI^?BVwkpu$Ah| zUk%DW!<@I1x*Ft_MO zHGG=r;VR&Uy0)dLARyJUdL>qg<)i;F2czvnu4C7d;jmBj5V&>HjPg$!t~+Jm_0*P zliP&@U)Vg*m(I)0_`>&({>b@Yy+@-WzHI<~?v}^^p z*w7DW-B-bRDWAaAqz8)fsgsiq)z<4E{oa7a1c7vc!KR6~$sWJ)2GJjB9ODEUKDc8} zpkc-5!4DnYi-;1S+_AN0-0R1N1P?UyZ@&d-$^%zW-ieT_;{g2V;oXFvp1qskW0nar=LSZYFZ{_z|xSs3PJ%osU0lOP< zg_dL>s6NE@r&c5k;Sg1Rkn3?DiZ^GxdGC9p%;X zW@ja-ib>?B+rE1p`1QeELp(-YPwW#|vF*EK{Zq1C)V8P{nO|lljZxOqVG?1ZJxu;& z{d{RFNK>BOqS`~~L+q+m>?cHyQLAH-)XM)fI5?k8IiDx`n;4Yjt@8)R!9)vKVL+QxE7NQ7s7l$zd`>O zAMY5a?}*|X0*9d2XaGqDRNH?KcYZx^_J6hQ|0nle6i^cGy!^YvU3>rkt^dbM0e@c+ zc?}B58C6dyW1+juX7)Z z?wpRGZJwT|x%R|$R%~`QI>DVxAI0ZaOy+}+UD%=@K9jp|74j>=SffMad~wY7_hIQl z?0!$RyF_~%d#T(DzKZ%DY1!ia^cCpvR(^h0SJ%eI##D5)?VU4TiY7n3VzTd*<;xG^ zXEMNm)&^Ur{MI(NQ2Y9g&? z;utkn9LkaGea8!bsqbxfv*ITi#VSW+ioE2>v8uUnFO`y!jshYWHI>x1v~&U4Dqz{F z0xqvzT{LkqCC{VI2%CtUv@bFw=35NvYgF(kM`PIVa2$5>s2#g2K5e2)YTwCFy*yWl z^%QzAx4Z|hepXgQ7?bDsn7BCAq+3Depxu<~DF|z) zdv(&6%6yW?oMR95k_SkV%3S6PdPUz=DFeY7WTaCpSY&7=IyaHSP8Spo~g zR?NDT44bUfP!*Al)9>-hl=H8TO|iXEM`)<1TCN7~b_5NBjqc)+JcmBX`O5HOQy=&~ zYyeA1tDL3|W}w@)1*VTxFP1nWdHvDU1Nv6sS+sbargk%oCS(LVLD@&tSYS0!)(Nc_ z2G)Q_{z>g<5mh(oepJfYH-A5f&ndQh8nFnSlEv= zD3murJTopgO%1Fbdc#!Q7aA26_2mm14ii7Ww)UX&ppay0X=$mA3e!@bzk#pC-7fl{ zSf$|KjYwoZ&+hbe3v*yB^XA9R$UG5?FU;Yhy!H`3JqIR=bL`y%j0kG+F~4gN{x3MN zy-C`??>r~^n!w!xCPMxT4tOnp@#Fj!?Hd*{Xjtfh&?!6(M;C%&H zjIf~k_0)n{Pa9gmC$Qfl|F3JrbS#&%y$kD=*4gsM111=|zh48tH!bl0YB;wa z)mfh>^txI%Os0!Z9f^UUDtyLsjUlQg>&sQucALd~8+sUiWbh{9pVj;fiYKQowj=G7{SQG4Nx zChcQTL&)~n+e!EG{%3*U_qf!P@JLQ+z)4tHkkAqh&To)E``*6EI4kp#4jJMfv5kt# z(|4O?zbGLxYAp^UuC%VJ!u9hi)as)O!NQ6!HgUtvl~DjqKBdz(64hL*Q7lT!U*=r2Q%aZdd8xHx3G_E7LWs+P?Bcsar z($UrT3B#-j;~ewTKdKIu9EnrCrK)!65s8q|f#gqY3tOzv#wPvCjs7)6wKiaIm^QjX zB~rvO$-Y{XEYzAi3_UE}YpLwvhx0xA^$W#qk?{dQyG1%(%QU=iL9m}Z?qLj!eNf+D z%0Qjb>-W8xy6IZztf7oe4wWs6ninbi?+;G$9~MRLRDue$OO#;vtpIVkV1}d=WwT#+Gfgxo$`s`dVd!WB-~J|imT0iH#&6fV zbuxCgCN2~k<)KFXTh#x4%MOk5`5hetX5vniLi>$&e1gUI1@;(_qCDh~N>hNlKZknp ztK*P127Lm16ZJkTO-Tr0d=0Q|7-}gng2$lQQB8osWD`A*K3&re{L@jug{fkaL7>q+ zlo6$b3D7@Q`!*}($8XDUsJi=XbM$Vu=WtH;iMkQ;d|9mBh@)Ig0V zjC4Prl?)4j*4oTfK_-SCs40KfNP^@QHuwn=#Q*a@5+1-kB9I@#zjszXx+fDp)uMOG z;bX(c_mcp}$39TV^$?53eVE5J@EIYa{bJB~Qj6;UMf zySP9`r3jJL?H^H&;1KwMvrI3V`OfCeBEw&4WL@gOivpJZ0C>^ZpJf<7MIkId`M_|4#vyu*W;|hdBn~|V;G*iasu_zArIIabQ)_7( zyCFjuZHk=hQb@^&bp*|8C*WEcnUbNzmwGYOU52@)bwVJ*A0ric_cq3RW0fD&5~S-p z%)#vzUzf_pPgKgv3ApE>%Gb&dfQ=K>(bL@p6&X4;xtLhm#3}rtyYki!6R&k?tTv{u zZA6FtbZ?sua4v=?{&6nMcpB!uL$6!WUbaG|_tERTWQZyW^{xoj>tTTct*|{VA(>79HXrughUW!R!#np&$M(lwqj)Q9}fk+jKVr{{d zdbS{T9>jHb>P1_T(#zH}hEyOe6Z(oDmzp#IuS>KDC=E=< zJ?K90M8p0Ix)+K?G^@8HiK_zok1_~RAT6Qb+cqmFR)_~B>Rm#t7X~xAo#m-gHhsqy z0_@C!B?j-^$o@>DbS6A>Bd&*VgAN#DX-d)lPuV%H>L>M7>8d$4vKB?^;eSjZ*~+Yb z_ISfo_j&9p0J})6YCR5WeUL-^alUK3hX#(h5pRoV7Ko0aUX<#wCc0Lve@0^95E&3- zF+4wwodFq8NQeTVUexNbE0C!4W?5x4n4_8w`u5}3LECzZNCZG^uy$D9%F&dEd2I&e zTP@_E$!1g2+H*-8e-5Xk0Fr%-(|^+1)Ntjyq&DD){2gGl0ZZ-@eKVb05C#N^Z6~q= z$-DUhTx=j!wP3mrQb-WH&dMnxH8nL;Vjdc*9NtmQH%a!)E{?dPgj&|UJv~0IkP(j3 z#PXP_88wc_2xJIVim?_24NF#bMI5)REWESru%ss5eyW0o#s9@YXtyc@8(;iLoQj^_ zK+|J<;#;35`-(X~kp0v>t7yzebDw%+y1XoGDl3a=q*rx}kd^wumnnj}I7HmrJIOah zyBeO+SvU5+iwOTA!|Fiu>Un8!{|rp4B_>((LSt5$3!i+6yj8#5hK52!9uz9#7X z`?xMvIukx?xT%J!&G^cSa!S|-;Un|rY*Ul9Rs1jUdFEzH{imHp= z&sEBKSy~EaX32eba5T8SvO4P0Hc}wA!g+|lJyY*luE_^(%V=HeU;Fv4v!h^%$T;~x z^Pp|z77HuZBne-L6*mB)ddC#u~zQW&2epjzfb>!>Egc(C;e z@3vy6^Udcg68LWlW}VeAIAo{i8)UUC5Ztzt1|sU&23`^lZ$5vw#;W%~mQlm?b+e}J zDMS}|;3^b+T=IZ5UCENwD%KUp=BU29x(Yn5B8AN>EK%Pu#yay}yW}wZZ=7Y_ znGySKE2_SyvN8$GuX*fd=>BQYfXB=-GRL!TE`2d#b#+A?zdAvhHK8dNcMoe)A($JX zuyi-xykXJF6TxM?&qyZ)H1iDf)UK_;?CVFszQ2%jsZ1_B)fe1Z75`T>`5(0tX31MJ ZZdYCC$f|!e@K28i((e`CLBtF`|1SkbDcb-5 diff --git a/Structural/DependencyInjection/uml/uml.svg b/Structural/DependencyInjection/uml/uml.svg index 2f75b09..78d603d 100644 --- a/Structural/DependencyInjection/uml/uml.svg +++ b/Structural/DependencyInjection/uml/uml.svg @@ -1,4 +1,4 @@ - + @@ -20,13 +20,13 @@ - + - + - + @@ -86,70 +86,70 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -176,254 +176,247 @@ - + - + + + + - - + + - + - + - + - + - + configuration - + - + host - + - + - + __construct(config) - + - + - + connect() - + - + getHost() - + - + - + - + Connection - + Connection - - + + - - + + - - + + - - + + - + get(key, default) - - + + - + set(key, value) - - + + - - - + + + - + - + ArrayConfig - + ArrayConfig - - + + - - + + - - + + - - + + - + get(key) - - + + - + set(key, value) - - + + - - - + + + - + - + Parameters - + Parameters - - - - - - - - - - - + - + - + - + - + storage - + - + - - - - - - __construct(storage) + + + + + + __construct(storage) - - + + - - - + + + - - + + - - AbstractConfig + + AbstractConfig - - AbstractConfig + + AbstractConfig - + - + diff --git a/Structural/Facade/uml/uml.png b/Structural/Facade/uml/uml.png index e13cbdc6f9b960753f42eeefff14e6f636e70d91..da5097a0b68fbafa013429026a8db23d22bb6c84 100644 GIT binary patch literal 8371 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 Y1hjIyLta7nGr}b$IaS$WY2$$Z0lF;R)Bpeg literal 8579 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 A+W-In diff --git a/Structural/Facade/uml/uml.svg b/Structural/Facade/uml/uml.svg index 8f7dd83..2e7b400 100644 --- a/Structural/Facade/uml/uml.svg +++ b/Structural/Facade/uml/uml.svg @@ -1,4 +1,4 @@ - + @@ -16,25 +16,25 @@ - + - + - + - + - + - + - + @@ -43,307 +43,282 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + - + - + - + - + - + - - - - + - + - - - - - - - - - - - + + - - - - - - - - - + + - - + + - - + + - - + + - - - - + execute() - - + + - + waitForKeyPress() - - + + - + launch(os) - - + + - + powerDown() - - + + - - - + + + - + - + BiosInterface - + BiosInterface - - + + - - + + - - + + - - + + - + halt() - - + + - - - + + + - - + + - - OsInterface + + OsInterface - - OsInterface + + OsInterface - - + + - - + + - - + + - - + + - + os - - + + - - - - - - bios + + + + + + bios - - + + - - + + - - - - - - __construct(bios, os) + + + + + + __construct(bios, os) - - + + - - + + - + + + + + + turnOn() + + + + + - - turnOn() + + turnOff() - - + + - - - - - - turnOff() + + + - - + + - - - + + Facade - - - - - Facade - - - Facade + + Facade diff --git a/Structural/FluentInterface/uml/uml.png b/Structural/FluentInterface/uml/uml.png index e8229a22150baacaed2ed162235723a948f94d7b..e49aa571f359ff9fd4d5214ece823a30e660121a 100644 GIT binary patch literal 4910 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 GD(GL1Pk9^w diff --git a/Structural/FluentInterface/uml/uml.svg b/Structural/FluentInterface/uml/uml.svg index a836466..60a8564 100644 --- a/Structural/FluentInterface/uml/uml.svg +++ b/Structural/FluentInterface/uml/uml.svg @@ -89,17 +89,7 @@ - - - - - - - - - - - + From de431c512682f057ca735ced342a96e877b1f925 Mon Sep 17 00:00:00 2001 From: John Webb Date: Thu, 31 Jul 2014 14:13:53 -0500 Subject: [PATCH 19/21] Added More pattern UMLs --- Behavioral/ChainOfResponsibilities/README.md | 4 + Behavioral/Command/README.md | 4 + Behavioral/Iterator/README.md | 4 + Behavioral/Mediator/README.md | 4 + Behavioral/Memento/README.md | 4 + Behavioral/NullObject/README.md | 4 + Behavioral/Observer/README.md | 6 +- Behavioral/Specification/README.md | 3 + Behavioral/State/README.md | 4 + Behavioral/Strategy/README.md | 4 + Behavioral/TemplateMethod/README.md | 4 + Behavioral/Visitor/README.md | 4 + Creational/AbstractFactory/README.md | 4 + Creational/Builder/README.md | 4 + Creational/FactoryMethod/README.md | 4 + Creational/Multiton/README.md | 4 + Creational/Pool/README.md | 4 + Creational/Prototype/README.md | 4 + Creational/SimpleFactory/README.md | 4 + Creational/Singleton/README.md | 6 +- Creational/StaticFactory/README.md | 4 + More/Delegation/README.md | 13 + More/Delegation/uml/Delegation.uml | 21 + More/Delegation/uml/uml.png | Bin 0 -> 5924 bytes More/Delegation/uml/uml.svg | 196 ++++++ More/Repository/README.md | 4 + More/Repository/uml/Repository.uml | 28 + More/Repository/uml/uml.png | Bin 0 -> 27162 bytes More/Repository/uml/uml.svg | 687 +++++++++++++++++++ More/ServiceLocator/README.md | 4 + More/ServiceLocator/uml/ServiceLocator.uml | 38 + More/ServiceLocator/uml/uml.png | Bin 0 -> 14374 bytes More/ServiceLocator/uml/uml.svg | 432 ++++++++++++ 33 files changed, 1508 insertions(+), 2 deletions(-) create mode 100644 More/Delegation/README.md create mode 100644 More/Delegation/uml/Delegation.uml create mode 100644 More/Delegation/uml/uml.png create mode 100644 More/Delegation/uml/uml.svg create mode 100644 More/Repository/uml/Repository.uml create mode 100644 More/Repository/uml/uml.png create mode 100644 More/Repository/uml/uml.svg create mode 100644 More/ServiceLocator/uml/ServiceLocator.uml create mode 100644 More/ServiceLocator/uml/uml.png create mode 100644 More/ServiceLocator/uml/uml.svg diff --git a/Behavioral/ChainOfResponsibilities/README.md b/Behavioral/ChainOfResponsibilities/README.md index 462f6c1..4d5b1d2 100644 --- a/Behavioral/ChainOfResponsibilities/README.md +++ b/Behavioral/ChainOfResponsibilities/README.md @@ -10,3 +10,7 @@ To build a chain of objects to handle a call. If one object cannot handle a call * a Spam filter * Caching: first object is an instance of e.g. a Memcached Interface, if that "misses" it delegates the call to the database interface * Yii Framework: CFilterChain is a chain of controller action filters. the executing point is passed from one filter to the next along the chain, and only if all filters say "yes", the action can be invoked at last. + +## UML Diagram + +![Alt ChainOfResponsibility UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Behavioral/Command/README.md b/Behavioral/Command/README.md index 748b84f..adf2de3 100644 --- a/Behavioral/Command/README.md +++ b/Behavioral/Command/README.md @@ -15,3 +15,7 @@ Command can also be aggregated to combine more complex commands with minimum cop * A text editor : all events are Command which can be undone, stacked and saved. * Symfony2: SF2 Commands that can be run from the CLI are built with just the Command pattern in mind * big CLI tools use subcommands to distribute various tasks and pack them in "modules", each of these can be implemented with the Command pattern (e.g. vagrant) + +## UML Diagram + +![Alt Command UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Behavioral/Iterator/README.md b/Behavioral/Iterator/README.md index d364490..46e96b8 100644 --- a/Behavioral/Iterator/README.md +++ b/Behavioral/Iterator/README.md @@ -11,3 +11,7 @@ To make an object iterable and to make it appear like a collection of objects. ## Note Standard PHP Library (SPL) defines an interface Iterator which is best suited for this! Often you would want to implement the Countable interface too, to allow `count($object)` on your iterable object + +## UML Diagram + +![Alt Iterator UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Behavioral/Mediator/README.md b/Behavioral/Mediator/README.md index 5376000..818ff4c 100644 --- a/Behavioral/Mediator/README.md +++ b/Behavioral/Mediator/README.md @@ -9,3 +9,7 @@ like a controller (but not in the sense of the MVC). All components (called Colleague) are only coupled to the MediatorInterface and it is a good thing because in OOP, one good friend is better than many. This is the key-feature of this pattern. + +## UML Diagram + +![Alt Mediator UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Behavioral/Memento/README.md b/Behavioral/Memento/README.md index 83ca2c0..4e3294e 100644 --- a/Behavioral/Memento/README.md +++ b/Behavioral/Memento/README.md @@ -16,3 +16,7 @@ When using this pattern, care should be taken if the originator may change other * The seed of a pseudorandom number generator * The state in a finite state machine + +## UML Diagram + +![Alt Momento UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Behavioral/NullObject/README.md b/Behavioral/NullObject/README.md index 1e18d25..68f2bd0 100644 --- a/Behavioral/NullObject/README.md +++ b/Behavioral/NullObject/README.md @@ -18,3 +18,7 @@ a statement like `if (!is_null($obj)) { $obj->callSomething(); }` anymore. * Symfony2: null output in Symfony/Console * null handler in a Chain of Responsibilities pattern * null command in a Command pattern + +## UML Diagram + +![Alt NullObject UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Behavioral/Observer/README.md b/Behavioral/Observer/README.md index c59a584..ccaeaca 100644 --- a/Behavioral/Observer/README.md +++ b/Behavioral/Observer/README.md @@ -11,4 +11,8 @@ To implement a publish/subscribe behaviour to an object, whenever a "Subject" ob ## Note -PHP already defines two interfaces that can help to implement this pattern: SplObserver and SplSubject. \ No newline at end of file +PHP already defines two interfaces that can help to implement this pattern: SplObserver and SplSubject. + +## UML Diagram + +![Alt Observer UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Behavioral/Specification/README.md b/Behavioral/Specification/README.md index 39f0827..1f55b3b 100644 --- a/Behavioral/Specification/README.md +++ b/Behavioral/Specification/README.md @@ -5,3 +5,6 @@ Builds a clear specification of business rules, where objects can be checked against. The composite specification class has one method called `isSatisfiedBy` that returns either true or false depending on whether the given object satisfies the specification. +## UML Diagram + +![Alt Specification UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Behavioral/State/README.md b/Behavioral/State/README.md index 7c4263f..71aff0f 100644 --- a/Behavioral/State/README.md +++ b/Behavioral/State/README.md @@ -3,3 +3,7 @@ ## Purpose Encapsulate varying behavior for the same routine based on an object's state. This can be a cleaner way for an object to change its behavior at runtime without resorting to large monolithic conditional statements. + +## UML Diagram + +![Alt State UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Behavioral/Strategy/README.md b/Behavioral/Strategy/README.md index 88f43dd..9813487 100644 --- a/Behavioral/Strategy/README.md +++ b/Behavioral/Strategy/README.md @@ -14,3 +14,7 @@ To separate strategies and to enable fast switching between them. Also this patt * sorting a list of objects, one strategy by date, the other by id * simplify unit testing: e.g. switching between file and in-memory storage + +## UML Diagram + +![Alt Strategy UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Behavioral/TemplateMethod/README.md b/Behavioral/TemplateMethod/README.md index ce435d2..c01c00c 100644 --- a/Behavioral/TemplateMethod/README.md +++ b/Behavioral/TemplateMethod/README.md @@ -12,3 +12,7 @@ How? With abstraction of course. In other words, this is a skeleton of algorithm, well-suited for framework libraries. The user has just to implement one method and the superclass do the job. It is an easy way to decouple concrete classes and reduce copy-paste, that's why you'll find it everywhere. + +## UML Diagram + +![Alt TemplateMethod UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Behavioral/Visitor/README.md b/Behavioral/Visitor/README.md index 1ad8cc0..3db1d9c 100644 --- a/Behavioral/Visitor/README.md +++ b/Behavioral/Visitor/README.md @@ -6,3 +6,7 @@ The Visitor Pattern lets you outsource operations on objects to other objects. T But classes have to define a contract to allow visitors (the `Role::accept` method in the example). The contract is an abstract class but you can have also a clean interface. In that case, each Visitor has to choose itself which method to invoke on the visitor. + +## UML Diagram + +![Alt Visitor UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Creational/AbstractFactory/README.md b/Creational/AbstractFactory/README.md index aa084fc..34d457d 100644 --- a/Creational/AbstractFactory/README.md +++ b/Creational/AbstractFactory/README.md @@ -4,3 +4,7 @@ To create series of related or dependent objects without specifying their concrete classes. Usually the created classes all implement the same interface. The client of the abstract factory does not care about how these objects are created, he just knows how they go together. + +## UML Diagram + +![Alt AbstractFactory UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Creational/Builder/README.md b/Creational/Builder/README.md index 3a85f51..573816a 100644 --- a/Creational/Builder/README.md +++ b/Creational/Builder/README.md @@ -13,3 +13,7 @@ Note: Builders have often a fluent interface, see the mock builder of PHPUnit fo ## Examples * PHPUnit: Mock Builder + +## UML Diagram + +![Alt Builder UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Creational/FactoryMethod/README.md b/Creational/FactoryMethod/README.md index 10af7fd..ae4cfb6 100644 --- a/Creational/FactoryMethod/README.md +++ b/Creational/FactoryMethod/README.md @@ -9,3 +9,7 @@ For simple case, this abstract class could be just an interface This pattern is a "real" Design Pattern because it achieves the "Dependency Inversion Principle" a.k.a the "D" in S.O.L.I.D principles. It means the FactoryMethod class depends on abstractions, not concrete classes. This is the real trick compared to SimpleFactory or StaticFactory. + +## UML Diagram + +![Alt FactoryMethod UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Creational/Multiton/README.md b/Creational/Multiton/README.md index 938de9c..26c9a38 100644 --- a/Creational/Multiton/README.md +++ b/Creational/Multiton/README.md @@ -10,3 +10,7 @@ To have only a list of named instances that are used, like a singleton but with * 2 DB Connectors, e.g. one for MySQL, the other for SQLite * multiple Loggers (one for debug messages, one for errors) + +## UML Diagram + +![Alt Multiton UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Creational/Pool/README.md b/Creational/Pool/README.md index a39c3b2..7229a5a 100644 --- a/Creational/Pool/README.md +++ b/Creational/Pool/README.md @@ -6,3 +6,7 @@ The **object pool pattern** is a software creational design pattern that uses a Object pooling can offer a significant performance boost in situations where the cost of initializing a class instance is high, the rate of instantiation of a class is high, and the number of instances in use at any one time is low. The pooled object is obtained in predictable time when creation of the new objects (especially over network) may take variable time. However these benefits are mostly true for objects that are expensive with respect to time, such as database connections, socket connections, threads and large graphic objects like fonts or bitmaps. In certain situations, simple object pooling (that hold no external resources, but only occupy memory) may not be efficient and could decrease performance. + +## UML Diagram + +![Alt Pool UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Creational/Prototype/README.md b/Creational/Prototype/README.md index 3a99777..80b54ca 100644 --- a/Creational/Prototype/README.md +++ b/Creational/Prototype/README.md @@ -7,3 +7,7 @@ To avoid the cost of creating objects the standard way (new Foo()) and instead c ## Examples * Large amounts of data (e.g. create 1,000,000 rows in a database at once via a ORM) + +## UML Diagram + +![Alt Prototype UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Creational/SimpleFactory/README.md b/Creational/SimpleFactory/README.md index c165dc5..fedaa9d 100644 --- a/Creational/SimpleFactory/README.md +++ b/Creational/SimpleFactory/README.md @@ -7,3 +7,7 @@ ConcreteFactory is a simple factory pattern. It differs from the static factory because it is NOT static and as you know: static => global => evil! Therefore, you can have multiple factories, differently parametrized, you can subclass it and you can mock-up it. + +## UML Diagram + +![Alt SimpleFactory UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Creational/Singleton/README.md b/Creational/Singleton/README.md index e85703a..5148762 100644 --- a/Creational/Singleton/README.md +++ b/Creational/Singleton/README.md @@ -14,4 +14,8 @@ To have only one instance of this object in the application that will handle all ## Diagram - \ No newline at end of file + + +## UML Diagram + +![Alt Singleton UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Creational/StaticFactory/README.md b/Creational/StaticFactory/README.md index 6c22bc5..f5e2710 100644 --- a/Creational/StaticFactory/README.md +++ b/Creational/StaticFactory/README.md @@ -9,3 +9,7 @@ method to create all types of objects it can create. It is usually named `factor ## Examples * Zend Framework: `Zend_Cache_Backend` or `_Frontend` use a factory method create cache backends or frontends + +## UML Diagram + +![Alt StaticFactory UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/More/Delegation/README.md b/More/Delegation/README.md new file mode 100644 index 0000000..c51128c --- /dev/null +++ b/More/Delegation/README.md @@ -0,0 +1,13 @@ +# Delegation + +## Purpose + +... + +## Examples + +... + +## UML Diagram + +![Alt Delegation UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/More/Delegation/uml/Delegation.uml b/More/Delegation/uml/Delegation.uml new file mode 100644 index 0000000..ffb8e68 --- /dev/null +++ b/More/Delegation/uml/Delegation.uml @@ -0,0 +1,21 @@ + + + PHP + \DesignPatterns\More\Delegation\JuniorDeveloper + + \DesignPatterns\More\Delegation\JuniorDeveloper + \DesignPatterns\More\Delegation\TeamLead + + + + + + + Fields + Constants + Constructors + Methods + + private + + diff --git a/More/Delegation/uml/uml.png b/More/Delegation/uml/uml.png new file mode 100644 index 0000000000000000000000000000000000000000..f673da2f47cfa3b71c36b999a529cdc47c25e29a GIT binary patch literal 5924 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 F{{S + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + writeBadCode() + + + + + + + + + + + + + JuniorDeveloper + + + JuniorDeveloper + + + + + + + + + + + + + + + + + + + slave + + + + + + + + + + + + + __construct(junior) + + + + + + + + + + + + + writeCode() + + + + + + + + + + + + + TeamLead + + + TeamLead + + + diff --git a/More/Repository/README.md b/More/Repository/README.md index 1c2216f..0e2b188 100644 --- a/More/Repository/README.md +++ b/More/Repository/README.md @@ -10,3 +10,7 @@ Repository also supports the objective of achieving a clean separation and one-w * Doctrine 2 ORM: there is Repository that mediates between Entity and DBAL and contains methods to retrieve objects * Laravel Framework + +## UML Diagram + +![Alt Repository UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/More/Repository/uml/Repository.uml b/More/Repository/uml/Repository.uml new file mode 100644 index 0000000..e18cfd7 --- /dev/null +++ b/More/Repository/uml/Repository.uml @@ -0,0 +1,28 @@ + + + PHP + \DesignPatterns\Repository\PostRepository + + \DesignPatterns\Repository\Storage + \DesignPatterns\Repository\MemoryStorage + \DesignPatterns\Repository\Post + \DesignPatterns\Repository\PostRepository + + + + + + + + + + + + Fields + Constants + Constructors + Methods + + private + + diff --git a/More/Repository/uml/uml.png b/More/Repository/uml/uml.png new file mode 100644 index 0000000000000000000000000000000000000000..d22ede8b52c7cdc8d02c6bb26878e0c70b8d54e2 GIT binary patch literal 27162 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 At^fc4 literal 0 HcmV?d00001 diff --git a/More/Repository/uml/uml.svg b/More/Repository/uml/uml.svg new file mode 100644 index 0000000..8b9987c --- /dev/null +++ b/More/Repository/uml/uml.svg @@ -0,0 +1,687 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + persist(data) + + + + + + + + + retrieve(id) + + + + + + + + + delete(id) + + + + + + + + + + + + + Storage + + + Storage + + + + + + + + + + + + + + + + + + + data + + + + + + + + + + lastId + + + + + + + + + + + + __construct() + + + + + + + + + + + + persist(data) + + + + + + + + + retrieve(id) + + + + + + + + + delete(id) + + + + + + + + + + + + + MemoryStorage + + + MemoryStorage + + + + + + + + + + + + + + + + + + + id + + + + + + + + + + title + + + + + + + + + + text + + + + + + + + + + author + + + + + + + + + + created + + + + + + + + + + + + setId(id) + + + + + + + + + getId() + + + + + + + + + setAuthor(author) + + + + + + + + + getAuthor() + + + + + + + + + setCreated(created) + + + + + + + + + getCreated() + + + + + + + + + setText(text) + + + + + + + + + getText() + + + + + + + + + setTitle(title) + + + + + + + + + getTitle() + + + + + + + + + + + + + Post + + + Post + + + + + + + + + + + + + + + + + + + persistence + + + + + + + + + + + + __construct(persistence) + + + + + + + + + + + + getById(id) + + + + + + + + + save(post) + + + + + + + + + delete(post) + + + + + + + + + + + + + PostRepository + + + PostRepository + + + + + + + + + diff --git a/More/ServiceLocator/README.md b/More/ServiceLocator/README.md index 199b8cf..cdee496 100644 --- a/More/ServiceLocator/README.md +++ b/More/ServiceLocator/README.md @@ -14,3 +14,7 @@ Service Locator object on bootstrap. ## Examples * Zend Framework 2 uses Service Locator to create and share services used in the framework(i.e. EventManager, ModuleManager, all custom user services provided by modules, etc...) + +## UML Diagram + +![Alt ServiceLocator UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/More/ServiceLocator/uml/ServiceLocator.uml b/More/ServiceLocator/uml/ServiceLocator.uml new file mode 100644 index 0000000..2bfcfb3 --- /dev/null +++ b/More/ServiceLocator/uml/ServiceLocator.uml @@ -0,0 +1,38 @@ + + + PHP + \DesignPatterns\More\ServiceLocator\DatabaseServiceInterface + + \DesignPatterns\More\ServiceLocator\DatabaseServiceInterface + \DesignPatterns\More\ServiceLocator\LogService + \DesignPatterns\More\ServiceLocator\ServiceLocator + \DesignPatterns\More\ServiceLocator\ServiceLocatorInterface + \DesignPatterns\More\ServiceLocator\LogServiceInterface + \DesignPatterns\More\ServiceLocator\DatabaseService + + + + + + + + + + + + + + + + + + + + Fields + Constants + Constructors + Methods + + private + + diff --git a/More/ServiceLocator/uml/uml.png b/More/ServiceLocator/uml/uml.png new file mode 100644 index 0000000000000000000000000000000000000000..1136eaa23d589e1f6743d8570c30b430b46205a7 GIT binary patch literal 14374 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DatabaseServiceInterface + + + DatabaseServiceInterface + + + + + + + + + + + + + + + + LogService + + + LogService + + + + + + + + + + + + + + + + + + + services + + + + + + + + + + instantiated + + + + + + + + + + shared + + + + + + + + + + + + __construct() + + + + + + + + + + + + add(interface, service, share) + + + + + + + + + has(interface) + + + + + + + + + get(interface) + + + + + + + + + + + + + ServiceLocator + + + ServiceLocator + + + + + + + + + + + + + + + + + + has(interface) + + + + + + + + + get(interface) + + + + + + + + + + + + + ServiceLocatorInterface + + + ServiceLocatorInterface + + + + + + + + + + + + + + + + LogServiceInterface + + + LogServiceInterface + + + + + + + + + + + + + + + + DatabaseService + + + DatabaseService + + + + + + + + + + + + + From 658d6015071443d1849bc0820181b730099130d4 Mon Sep 17 00:00:00 2001 From: John Webb Date: Thu, 31 Jul 2014 14:34:10 -0500 Subject: [PATCH 20/21] Added Creational pattern UMLs --- .../AbstractFactory/uml/AbstractFactory.uml | 38 + Creational/AbstractFactory/uml/uml.png | Bin 0 -> 11811 bytes Creational/AbstractFactory/uml/uml.svg | 379 ++++++++ Creational/Builder/uml/Builder.uml | 54 ++ Creational/Builder/uml/uml.png | Bin 0 -> 23467 bytes Creational/Builder/uml/uml.svg | 832 ++++++++++++++++++ .../FactoryMethod/uml/FactoryMethod.uml | 55 ++ Creational/FactoryMethod/uml/uml.png | Bin 0 -> 16925 bytes Creational/FactoryMethod/uml/uml.svg | 623 +++++++++++++ Creational/Multiton/uml/Multiton.uml | 20 + Creational/Multiton/uml/uml.png | Bin 0 -> 6036 bytes Creational/Multiton/uml/uml.svg | 197 +++++ Creational/Pool/uml/Pool.uml | 22 + Creational/Pool/uml/uml.png | Bin 0 -> 12665 bytes Creational/Pool/uml/uml.svg | 467 ++++++++++ Creational/Prototype/uml/Prototype.uml | 35 + Creational/Prototype/uml/uml.png | Bin 0 -> 8678 bytes Creational/Prototype/uml/uml.svg | 305 +++++++ .../SimpleFactory/uml/SimpleFactory.uml | 36 + Creational/SimpleFactory/uml/uml.png | Bin 0 -> 10280 bytes Creational/SimpleFactory/uml/uml.svg | 286 ++++++ Creational/Singleton/uml/Singleton.uml | 20 + Creational/Singleton/uml/uml.png | Bin 0 -> 4466 bytes Creational/Singleton/uml/uml.svg | 162 ++++ .../StaticFactory/uml/StaticFactory.uml | 36 + Creational/StaticFactory/uml/uml.png | Bin 0 -> 6632 bytes Creational/StaticFactory/uml/uml.svg | 207 +++++ 27 files changed, 3774 insertions(+) create mode 100644 Creational/AbstractFactory/uml/AbstractFactory.uml create mode 100644 Creational/AbstractFactory/uml/uml.png create mode 100644 Creational/AbstractFactory/uml/uml.svg create mode 100644 Creational/Builder/uml/Builder.uml create mode 100644 Creational/Builder/uml/uml.png create mode 100644 Creational/Builder/uml/uml.svg create mode 100644 Creational/FactoryMethod/uml/FactoryMethod.uml create mode 100644 Creational/FactoryMethod/uml/uml.png create mode 100644 Creational/FactoryMethod/uml/uml.svg create mode 100644 Creational/Multiton/uml/Multiton.uml create mode 100644 Creational/Multiton/uml/uml.png create mode 100644 Creational/Multiton/uml/uml.svg create mode 100644 Creational/Pool/uml/Pool.uml create mode 100644 Creational/Pool/uml/uml.png create mode 100644 Creational/Pool/uml/uml.svg create mode 100644 Creational/Prototype/uml/Prototype.uml create mode 100644 Creational/Prototype/uml/uml.png create mode 100644 Creational/Prototype/uml/uml.svg create mode 100644 Creational/SimpleFactory/uml/SimpleFactory.uml create mode 100644 Creational/SimpleFactory/uml/uml.png create mode 100644 Creational/SimpleFactory/uml/uml.svg create mode 100644 Creational/Singleton/uml/Singleton.uml create mode 100644 Creational/Singleton/uml/uml.png create mode 100644 Creational/Singleton/uml/uml.svg create mode 100644 Creational/StaticFactory/uml/StaticFactory.uml create mode 100644 Creational/StaticFactory/uml/uml.png create mode 100644 Creational/StaticFactory/uml/uml.svg diff --git a/Creational/AbstractFactory/uml/AbstractFactory.uml b/Creational/AbstractFactory/uml/AbstractFactory.uml new file mode 100644 index 0000000..a44e64c --- /dev/null +++ b/Creational/AbstractFactory/uml/AbstractFactory.uml @@ -0,0 +1,38 @@ + + + PHP + \DesignPatterns\Creational\AbstractFactory\AbstractFactory + + \DesignPatterns\Creational\AbstractFactory\Html\Text + \DesignPatterns\Creational\AbstractFactory\Html\Picture + \DesignPatterns\Creational\AbstractFactory\HtmlFactory + \DesignPatterns\Creational\AbstractFactory\JsonFactory + \DesignPatterns\Creational\AbstractFactory\AbstractFactory + \DesignPatterns\Creational\AbstractFactory\MediaInterface + + + + + + + + + + + + + + + + + + + + Fields + Constants + Constructors + Methods + + private + + diff --git a/Creational/AbstractFactory/uml/uml.png b/Creational/AbstractFactory/uml/uml.png new file mode 100644 index 0000000000000000000000000000000000000000..6de2767731a57fd874386805a91a94d0a7f35129 GIT binary patch literal 11811 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + createPicture(path, name) + + + + + + + + + createText(content) + + + + + + + + + + + + + HtmlFactory + + + HtmlFactory + + + + + + + + + + + + + + + + + + render() + + + + + + + + + + + + + Picture + + + Picture + + + + + + + + + + + + + + + + + + render() + + + + + + + + + + + + + Text + + + Text + + + + + + + + + + + + + + + + + + createPicture(path, name) + + + + + + + + + createText(content) + + + + + + + + + + + + + JsonFactory + + + JsonFactory + + + + + + + + + + + + + + + + + + createText(content) + + + + + + + + + createPicture(path, name) + + + + + + + + + + + + + AbstractFactory + + + AbstractFactory + + + + + + + + + + + + + + + + + + render() + + + + + + + + + + + + + MediaInterface + + + MediaInterface + + + + + + + + + + + diff --git a/Creational/Builder/uml/Builder.uml b/Creational/Builder/uml/Builder.uml new file mode 100644 index 0000000..1921c7a --- /dev/null +++ b/Creational/Builder/uml/Builder.uml @@ -0,0 +1,54 @@ + + + PHP + \DesignPatterns\Creational\Builder\BikeBuilder + + \DesignPatterns\Creational\Builder\Parts\Door + \DesignPatterns\Creational\Builder\Parts\Engine + \DesignPatterns\Creational\Builder\CarBuilder + \DesignPatterns\Creational\Builder\Parts\Wheel + \DesignPatterns\Creational\Builder\Parts\Bike + \DesignPatterns\Creational\Builder\Parts\Car + \DesignPatterns\Creational\Builder\BikeBuilder + \DesignPatterns\Creational\Builder\BuilderInterface + \DesignPatterns\Creational\Builder\Parts\Vehicle + \DesignPatterns\Creational\Builder\Director + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Fields + Constants + Constructors + Methods + + private + + diff --git a/Creational/Builder/uml/uml.png b/Creational/Builder/uml/uml.png new file mode 100644 index 0000000000000000000000000000000000000000..3a990dd9d6ce60d3543815a254d9e73c1c75627e GIT binary patch literal 23467 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Door + + + Door + + + + + + + + + + + + + + + + + + + + + + Engine + + + Engine + + + + + + + + + + + + + + + + + + + + + + + + + car + + + + + + + + + + + + addDoors() + + + + + + + + + addEngine() + + + + + + + + + addWheel() + + + + + + + + + createVehicle() + + + + + + + + + getVehicle() + + + + + + + + + + + + + CarBuilder + + + CarBuilder + + + + + + + + + + + + + + + + Bike + + + Bike + + + + + + + + + + + + + + + + Wheel + + + Wheel + + + + + + + + + + + + + + + + + + + + + + + + + bike + + + + + + + + + + + + addDoors() + + + + + + + + + addEngine() + + + + + + + + + addWheel() + + + + + + + + + createVehicle() + + + + + + + + + getVehicle() + + + + + + + + + + + + + BikeBuilder + + + BikeBuilder + + + + + + + + + + + + + + + + Car + + + Car + + + + + + + + + + + + + + + + + + + + + + + + + data + + + + + + + + + + + + setPart(key, value) + + + + + + + + + + + + + Vehicle + + + Vehicle + + + + + + + + + + + + + + + + + + + + + + + + createVehicle() + + + + + + + + + addWheel() + + + + + + + + + addEngine() + + + + + + + + + addDoors() + + + + + + + + + getVehicle() + + + + + + + + + + + + + BuilderInterface + + + BuilderInterface + + + + + + + + + + + + + + + + + + + + + + + + build(builder) + + + + + + + + + + + + + Director + + + Director + + + + + + + + + + + + + + + diff --git a/Creational/FactoryMethod/uml/FactoryMethod.uml b/Creational/FactoryMethod/uml/FactoryMethod.uml new file mode 100644 index 0000000..ec4249c --- /dev/null +++ b/Creational/FactoryMethod/uml/FactoryMethod.uml @@ -0,0 +1,55 @@ + + + PHP + \DesignPatterns\Creational\FactoryMethod\Bicycle + + \DesignPatterns\Creational\FactoryMethod\FactoryMethod + \DesignPatterns\Creational\FactoryMethod\Bicycle + \DesignPatterns\Creational\FactoryMethod\GermanFactory + \DesignPatterns\Creational\FactoryMethod\VehicleInterface + \DesignPatterns\Creational\FactoryMethod\ItalianFactory + \DesignPatterns\Creational\FactoryMethod\Ferrari + \DesignPatterns\Creational\FactoryMethod\Porsche + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Fields + Constants + Constructors + Methods + + private + + diff --git a/Creational/FactoryMethod/uml/uml.png b/Creational/FactoryMethod/uml/uml.png new file mode 100644 index 0000000000000000000000000000000000000000..0687038eefb535884c7e163d0c0c372082740e45 GIT binary patch literal 16925 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 ZwRhl<*Dn5P7(L=sDKU9bsPM-x{|B*wE;0ZB literal 0 HcmV?d00001 diff --git a/Creational/FactoryMethod/uml/uml.svg b/Creational/FactoryMethod/uml/uml.svg new file mode 100644 index 0000000..62b8cc6 --- /dev/null +++ b/Creational/FactoryMethod/uml/uml.svg @@ -0,0 +1,623 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CHEAP + + + + + + + + + + FAST + + + + + + + + + + + + createVehicle(type) + + + + + + + + + create(type) + + + + + + + + + + + + + FactoryMethod + + + FactoryMethod + + + + + + + + + + + + + + + + + + + color + + + + + + + + + + + + setColor(rgb) + + + + + + + + + + + + + Bicycle + + + Bicycle + + + + + + + + + + + + + + + + + + createVehicle(type) + + + + + + + + + + + + + GermanFactory + + + GermanFactory + + + + + + + + + + + + + + + + + + + + + setColor(rgb) + + + + + + + + + + + + + VehicleInterface + + + VehicleInterface + + + + + + + + + + + + + + + + + + + + + + + + createVehicle(type) + + + + + + + + + + + + + ItalianFactory + + + ItalianFactory + + + + + + + + + + + + + + + + + + + color + + + + + + + + + + + + setColor(rgb) + + + + + + + + + + + + + Ferrari + + + Ferrari + + + + + + + + + + + + + + + + + + + + + + + + + color + + + + + + + + + + + + setColor(rgb) + + + + + + + + + addTuningAMG() + + + + + + + + + + + + + Porsche + + + Porsche + + + + + + + + + + + + + + + + + diff --git a/Creational/Multiton/uml/Multiton.uml b/Creational/Multiton/uml/Multiton.uml new file mode 100644 index 0000000..7fbe4db --- /dev/null +++ b/Creational/Multiton/uml/Multiton.uml @@ -0,0 +1,20 @@ + + + PHP + \DesignPatterns\Creational\Multiton\Multiton + + \DesignPatterns\Creational\Multiton\Multiton + + + + + + + Fields + Constants + Constructors + Methods + + private + + diff --git a/Creational/Multiton/uml/uml.png b/Creational/Multiton/uml/uml.png new file mode 100644 index 0000000000000000000000000000000000000000..df5f72167ccd4fb35d0efdae42f6dd1227dbb79d GIT binary patch literal 6036 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 literal 0 HcmV?d00001 diff --git a/Creational/Multiton/uml/uml.svg b/Creational/Multiton/uml/uml.svg new file mode 100644 index 0000000..fe459ab --- /dev/null +++ b/Creational/Multiton/uml/uml.svg @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + instances + + + + + + + + + + + + + INSTANCE_1 + + + + + + + + + + INSTANCE_2 + + + + + + + + + + + + __construct() + + + + + + + + + + + + getInstance(instanceName) + + + + + + + + + __clone() + + + + + + + + + __wakeup() + + + + + + + + + + + + + Multiton + + + Multiton + + + diff --git a/Creational/Pool/uml/Pool.uml b/Creational/Pool/uml/Pool.uml new file mode 100644 index 0000000..5a770de --- /dev/null +++ b/Creational/Pool/uml/Pool.uml @@ -0,0 +1,22 @@ + + + PHP + \DesignPatterns\Creational\Pool\Processor + + \DesignPatterns\Creational\Pool\Pool + \DesignPatterns\Creational\Pool\Processor + \DesignPatterns\Creational\Pool\Worker + + + + + + + Fields + Constants + Constructors + Methods + + private + + diff --git a/Creational/Pool/uml/uml.png b/Creational/Pool/uml/uml.png new file mode 100644 index 0000000000000000000000000000000000000000..4bcb05c40b72e2a9692d0c395e5df0c17beaf7c8 GIT binary patch literal 12665 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 literal 0 HcmV?d00001 diff --git a/Creational/Pool/uml/uml.svg b/Creational/Pool/uml/uml.svg new file mode 100644 index 0000000..4ddd1b4 --- /dev/null +++ b/Creational/Pool/uml/uml.svg @@ -0,0 +1,467 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + instances + + + + + + + + + + class + + + + + + + + + + + + __construct(class) + + + + + + + + + + + + get() + + + + + + + + + dispose(instance) + + + + + + + + + + + + + Pool + + + Pool + + + + + + + + + + + + + + + + + + + pool + + + + + + + + + + processing + + + + + + + + + + maxProcesses + + + + + + + + + + waitingQueue + + + + + + + + + + + + __construct(pool) + + + + + + + + + + + + process(image) + + + + + + + + + createWorker(image) + + + + + + + + + processDone(worker) + + + + + + + + + pushToWaitingQueue(image) + + + + + + + + + popFromWaitingQueue() + + + + + + + + + + + + + Processor + + + Processor + + + + + + + + + + + + + + + + + + __construct() + + + + + + + + + + + + run(image, callback) + + + + + + + + + + + + + Worker + + + Worker + + + diff --git a/Creational/Prototype/uml/Prototype.uml b/Creational/Prototype/uml/Prototype.uml new file mode 100644 index 0000000..2712fba --- /dev/null +++ b/Creational/Prototype/uml/Prototype.uml @@ -0,0 +1,35 @@ + + + PHP + \DesignPatterns\Creational\Prototype\BarBookPrototype + + \DesignPatterns\Creational\Prototype\BookPrototype + \DesignPatterns\Creational\Prototype\FooBookPrototype + \DesignPatterns\Creational\Prototype\BarBookPrototype + + + + + + + + + + + + + + + + + + + + Fields + Constants + Constructors + Methods + + private + + diff --git a/Creational/Prototype/uml/uml.png b/Creational/Prototype/uml/uml.png new file mode 100644 index 0000000000000000000000000000000000000000..23a3b919c1a88333330e61316cbdcde2c6af9a7f GIT binary patch literal 8678 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 Rfb$!--n>$fED|^L`+p(35Z3?z literal 0 HcmV?d00001 diff --git a/Creational/Prototype/uml/uml.svg b/Creational/Prototype/uml/uml.svg new file mode 100644 index 0000000..34844a0 --- /dev/null +++ b/Creational/Prototype/uml/uml.svg @@ -0,0 +1,305 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + category + + + + + + + + + + + + __clone() + + + + + + + + + + + + + FooBookPrototype + + + FooBookPrototype + + + + + + + + + + + + + + + + + + + title + + + + + + + + + + category + + + + + + + + + + + + __clone() + + + + + + + + + getTitle() + + + + + + + + + setTitle(title) + + + + + + + + + + + + + BookPrototype + + + BookPrototype + + + + + + + + + + + + + + + + + + + category + + + + + + + + + + + + __clone() + + + + + + + + + + + + + BarBookPrototype + + + BarBookPrototype + + + + + + + + + + + diff --git a/Creational/SimpleFactory/uml/SimpleFactory.uml b/Creational/SimpleFactory/uml/SimpleFactory.uml new file mode 100644 index 0000000..f51ce6c --- /dev/null +++ b/Creational/SimpleFactory/uml/SimpleFactory.uml @@ -0,0 +1,36 @@ + + + PHP + \DesignPatterns\Creational\SimpleFactory\ConcreteFactory + + \DesignPatterns\Creational\SimpleFactory\Scooter + \DesignPatterns\Creational\SimpleFactory\ConcreteFactory + \DesignPatterns\Creational\SimpleFactory\VehicleInterface + \DesignPatterns\Creational\SimpleFactory\Bicycle + + + + + + + + + + + + + + + + + + + + Fields + Constants + Constructors + Methods + + private + + diff --git a/Creational/SimpleFactory/uml/uml.png b/Creational/SimpleFactory/uml/uml.png new file mode 100644 index 0000000000000000000000000000000000000000..d22c00adafaeae97336da8b805b9821c77402f50 GIT binary patch literal 10280 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 F{{YHk>tp}` literal 0 HcmV?d00001 diff --git a/Creational/SimpleFactory/uml/uml.svg b/Creational/SimpleFactory/uml/uml.svg new file mode 100644 index 0000000..7c966c2 --- /dev/null +++ b/Creational/SimpleFactory/uml/uml.svg @@ -0,0 +1,286 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + driveTo(destination) + + + + + + + + + + + + + Scooter + + + Scooter + + + + + + + + + + + + + + + + + + + typeList + + + + + + + + + + + + __construct() + + + + + + + + + + + + createVehicle(type) + + + + + + + + + + + + + ConcreteFactory + + + ConcreteFactory + + + + + + + + + + + + + + + + + + driveTo(destination) + + + + + + + + + + + + + VehicleInterface + + + VehicleInterface + + + + + + + + + + + + + + + + + + driveTo(destination) + + + + + + + + + + + + + Bicycle + + + Bicycle + + + + + + + + + + + diff --git a/Creational/Singleton/uml/Singleton.uml b/Creational/Singleton/uml/Singleton.uml new file mode 100644 index 0000000..c56949e --- /dev/null +++ b/Creational/Singleton/uml/Singleton.uml @@ -0,0 +1,20 @@ + + + PHP + \DesignPatterns\Creational\Singleton\Singleton + + \DesignPatterns\Creational\Singleton\Singleton + + + + + + + Fields + Constants + Constructors + Methods + + private + + diff --git a/Creational/Singleton/uml/uml.png b/Creational/Singleton/uml/uml.png new file mode 100644 index 0000000000000000000000000000000000000000..c9a2f192e3a63626ac51c8403def9347ea6fae89 GIT binary patch literal 4466 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 RIXEo^prc`+4pX%Y{~wpLo%;X) literal 0 HcmV?d00001 diff --git a/Creational/Singleton/uml/uml.svg b/Creational/Singleton/uml/uml.svg new file mode 100644 index 0000000..f8e69cf --- /dev/null +++ b/Creational/Singleton/uml/uml.svg @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + instance + + + + + + + + + + + + __construct() + + + + + + + + + + + + getInstance() + + + + + + + + + __clone() + + + + + + + + + __wakeup() + + + + + + + + + + + + + Singleton + + + Singleton + + + diff --git a/Creational/StaticFactory/uml/StaticFactory.uml b/Creational/StaticFactory/uml/StaticFactory.uml new file mode 100644 index 0000000..4137d4d --- /dev/null +++ b/Creational/StaticFactory/uml/StaticFactory.uml @@ -0,0 +1,36 @@ + + + PHP + \DesignPatterns\Creational\StaticFactory\FormatNumber + + \DesignPatterns\Creational\StaticFactory\FormatNumber + \DesignPatterns\Creational\StaticFactory\StaticFactory + \DesignPatterns\Creational\StaticFactory\FormatString + \DesignPatterns\Creational\StaticFactory\FormatterInterface + + + + + + + + + + + + + + + + + + + + Fields + Constants + Constructors + Methods + + private + + diff --git a/Creational/StaticFactory/uml/uml.png b/Creational/StaticFactory/uml/uml.png new file mode 100644 index 0000000000000000000000000000000000000000..f1b66881166f2e4c033080d07e013064721ced41 GIT binary patch literal 6632 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 NqMWL1sq|~#{{fXYv)%vz literal 0 HcmV?d00001 diff --git a/Creational/StaticFactory/uml/uml.svg b/Creational/StaticFactory/uml/uml.svg new file mode 100644 index 0000000..e57a79b --- /dev/null +++ b/Creational/StaticFactory/uml/uml.svg @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + FormatNumber + + + FormatNumber + + + + + + + + + + + + + + + + + + factory(type) + + + + + + + + + + + + + StaticFactory + + + StaticFactory + + + + + + + + + + + + + + + + FormatString + + + FormatString + + + + + + + + + + + + + + + + FormatterInterface + + + FormatterInterface + + + + + + + + + + + From 1dabe3c6edc2d0ff45aa26b797f32ed2c7d2bd53 Mon Sep 17 00:00:00 2001 From: John Webb Date: Thu, 31 Jul 2014 14:47:55 -0500 Subject: [PATCH 21/21] Added Behavioral pattern UMLs --- .../uml/ChainOfResponsibilities.uml | 36 + .../ChainOfResponsibilities/uml/uml.png | Bin 0 -> 10706 bytes .../ChainOfResponsibilities/uml/uml.svg | 363 +++++++++ Behavioral/Command/uml/Command.uml | 28 + Behavioral/Command/uml/uml.png | Bin 0 -> 10203 bytes Behavioral/Command/uml/uml.svg | 366 +++++++++ Behavioral/Iterator/uml/Iterator.uml | 28 + Behavioral/Iterator/uml/uml.png | Bin 0 -> 15043 bytes Behavioral/Iterator/uml/uml.svg | 638 +++++++++++++++ Behavioral/Mediator/uml/Mediator.uml | 46 ++ Behavioral/Mediator/uml/uml.png | Bin 0 -> 20731 bytes Behavioral/Mediator/uml/uml.svg | 651 +++++++++++++++ Behavioral/Memento/uml/Momento.uml | 22 + Behavioral/Memento/uml/uml.png | Bin 0 -> 8364 bytes Behavioral/Memento/uml/uml.svg | 310 +++++++ Behavioral/NullObject/uml/NullObject.uml | 36 + Behavioral/NullObject/uml/uml.png | Bin 0 -> 8701 bytes Behavioral/NullObject/uml/uml.svg | 304 +++++++ Behavioral/Observer/uml/Observer.uml | 27 + Behavioral/Observer/uml/uml.png | Bin 0 -> 9977 bytes Behavioral/Observer/uml/uml.svg | 310 +++++++ .../Specification/uml/Specification.uml | 55 ++ Behavioral/Specification/uml/uml.png | Bin 0 -> 25534 bytes Behavioral/Specification/uml/uml.svg | 761 ++++++++++++++++++ Behavioral/State/uml/State.uml | 37 + Behavioral/State/uml/uml.png | Bin 0 -> 12470 bytes Behavioral/State/uml/uml.svg | 460 +++++++++++ Behavioral/Strategy/uml/Strategy.uml | 36 + Behavioral/Strategy/uml/uml.png | Bin 0 -> 10852 bytes Behavioral/Strategy/uml/uml.svg | 314 ++++++++ .../TemplateMethod/uml/TemplateMethod.uml | 35 + Behavioral/TemplateMethod/uml/uml.png | Bin 0 -> 8688 bytes Behavioral/TemplateMethod/uml/uml.svg | 256 ++++++ Behavioral/Visitor/uml/Visitor.uml | 41 + Behavioral/Visitor/uml/uml.png | Bin 0 -> 11641 bytes Behavioral/Visitor/uml/uml.svg | 441 ++++++++++ Creational/Singleton/README.md | 4 - 37 files changed, 5601 insertions(+), 4 deletions(-) create mode 100644 Behavioral/ChainOfResponsibilities/uml/ChainOfResponsibilities.uml create mode 100644 Behavioral/ChainOfResponsibilities/uml/uml.png create mode 100644 Behavioral/ChainOfResponsibilities/uml/uml.svg create mode 100644 Behavioral/Command/uml/Command.uml create mode 100644 Behavioral/Command/uml/uml.png create mode 100644 Behavioral/Command/uml/uml.svg create mode 100644 Behavioral/Iterator/uml/Iterator.uml create mode 100644 Behavioral/Iterator/uml/uml.png create mode 100644 Behavioral/Iterator/uml/uml.svg create mode 100644 Behavioral/Mediator/uml/Mediator.uml create mode 100644 Behavioral/Mediator/uml/uml.png create mode 100644 Behavioral/Mediator/uml/uml.svg create mode 100644 Behavioral/Memento/uml/Momento.uml create mode 100644 Behavioral/Memento/uml/uml.png create mode 100644 Behavioral/Memento/uml/uml.svg create mode 100644 Behavioral/NullObject/uml/NullObject.uml create mode 100644 Behavioral/NullObject/uml/uml.png create mode 100644 Behavioral/NullObject/uml/uml.svg create mode 100644 Behavioral/Observer/uml/Observer.uml create mode 100644 Behavioral/Observer/uml/uml.png create mode 100644 Behavioral/Observer/uml/uml.svg create mode 100644 Behavioral/Specification/uml/Specification.uml create mode 100644 Behavioral/Specification/uml/uml.png create mode 100644 Behavioral/Specification/uml/uml.svg create mode 100644 Behavioral/State/uml/State.uml create mode 100644 Behavioral/State/uml/uml.png create mode 100644 Behavioral/State/uml/uml.svg create mode 100644 Behavioral/Strategy/uml/Strategy.uml create mode 100644 Behavioral/Strategy/uml/uml.png create mode 100644 Behavioral/Strategy/uml/uml.svg create mode 100644 Behavioral/TemplateMethod/uml/TemplateMethod.uml create mode 100644 Behavioral/TemplateMethod/uml/uml.png create mode 100644 Behavioral/TemplateMethod/uml/uml.svg create mode 100644 Behavioral/Visitor/uml/Visitor.uml create mode 100644 Behavioral/Visitor/uml/uml.png create mode 100644 Behavioral/Visitor/uml/uml.svg diff --git a/Behavioral/ChainOfResponsibilities/uml/ChainOfResponsibilities.uml b/Behavioral/ChainOfResponsibilities/uml/ChainOfResponsibilities.uml new file mode 100644 index 0000000..3b79650 --- /dev/null +++ b/Behavioral/ChainOfResponsibilities/uml/ChainOfResponsibilities.uml @@ -0,0 +1,36 @@ + + + PHP + \DesignPatterns\Behavioral\ChainOfResponsibilities\Handler + + \DesignPatterns\Behavioral\ChainOfResponsibilities\Handler + \DesignPatterns\Behavioral\ChainOfResponsibilities\Responsible\SlowStorage + \DesignPatterns\Behavioral\ChainOfResponsibilities\Responsible\FastStorage + \DesignPatterns\Behavioral\ChainOfResponsibilities\Request + + + + + + + + + + + + + + + + + + + + Fields + Constants + Constructors + Methods + + private + + diff --git a/Behavioral/ChainOfResponsibilities/uml/uml.png b/Behavioral/ChainOfResponsibilities/uml/uml.png new file mode 100644 index 0000000000000000000000000000000000000000..de55fd27c575022b7c7fc68b91ee14f235e86f60 GIT binary patch literal 10706 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 ujjf>n?OG#{0sP~p + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + successor + + + + + + + + + + + + append(handler) + + + + + + + + + handle(req) + + + + + + + + + processing(req) + + + + + + + + + + + + + Handler + + + Handler + + + + + + + + + + + + + + + + + + + data + + + + + + + + + + + + __construct(data) + + + + + + + + + + + + processing(req) + + + + + + + + + + + + + FastStorage + + + FastStorage + + + + + + + + + + + + + + + + + + + data + + + + + + + + + + + + __construct(data) + + + + + + + + + + + + processing(req) + + + + + + + + + + + + + SlowStorage + + + SlowStorage + + + + + + + + + + + + + + + + Request + + + Request + + + + + + + + + + + diff --git a/Behavioral/Command/uml/Command.uml b/Behavioral/Command/uml/Command.uml new file mode 100644 index 0000000..368d5f0 --- /dev/null +++ b/Behavioral/Command/uml/Command.uml @@ -0,0 +1,28 @@ + + + PHP + \DesignPatterns\Behavioral\Command\HelloCommand + + \DesignPatterns\Behavioral\Command\Invoker + \DesignPatterns\Behavioral\Command\HelloCommand + \DesignPatterns\Behavioral\Command\Receiver + \DesignPatterns\Behavioral\Command\CommandInterface + + + + + + + + + + + + Fields + Constants + Constructors + Methods + + private + + diff --git a/Behavioral/Command/uml/uml.png b/Behavioral/Command/uml/uml.png new file mode 100644 index 0000000000000000000000000000000000000000..d0217502e870d86ce6ecc6e3fdedd105ea2854f3 GIT binary patch literal 10203 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 T#Srjl4^B! + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + command + + + + + + + + + + + + setCommand(cmd) + + + + + + + + + run() + + + + + + + + + + + + + Invoker + + + Invoker + + + + + + + + + + + + + + + + + + + output + + + + + + + + + + + + __construct(console) + + + + + + + + + + + + execute() + + + + + + + + + + + + + HelloCommand + + + HelloCommand + + + + + + + + + + + + + + + + + + execute() + + + + + + + + + + + + + CommandInterface + + + CommandInterface + + + + + + + + + + + + + + + + + + write(str) + + + + + + + + + + + + + Receiver + + + Receiver + + + + + + + + + diff --git a/Behavioral/Iterator/uml/Iterator.uml b/Behavioral/Iterator/uml/Iterator.uml new file mode 100644 index 0000000..752fc1b --- /dev/null +++ b/Behavioral/Iterator/uml/Iterator.uml @@ -0,0 +1,28 @@ + + + PHP + \DesignPatterns\Behavioral\Iterator\Book + + \DesignPatterns\Behavioral\Iterator\BookListReverseIterator + \DesignPatterns\Behavioral\Iterator\BookList + \DesignPatterns\Behavioral\Iterator\BookListIterator + \DesignPatterns\Behavioral\Iterator\Book + + + + + + + + + + + + Fields + Constants + Constructors + Methods + + private + + diff --git a/Behavioral/Iterator/uml/uml.png b/Behavioral/Iterator/uml/uml.png new file mode 100644 index 0000000000000000000000000000000000000000..60226301ac156ba85dbf3376a303dbf6c79901d0 GIT binary patch literal 15043 zcmb_@XE>bS)^|b>UGzk65hHpKozX`y7(GIC(V}+}HA+G-I?;_Dz4K2Ho#;`9=$$A- z^yeP=pYxpazUO(~FYgD}T;tyN-fQo*_A0;MnsBI^A|c)byj!+fX zZt$Dz`@^o7i$rFkFJH^vg%sw@b?(pUr>zV|ae91fIGinZwxSQS@aGjD@+&TCIvbnV zaMjf<$Nr~DmQQ^Vi z)H?SmIS{{GOg@%whJf>M+ClBiSQP$5k1MrXpa@qpJqx|u%&$Xl)}@kw2)*q&&Tug~^D0ddO-)$l^!rw`2tv*bOYzVUKXH3aRD0YHXnI?Ab{7mr|~E!%U7>Jk@2 z*N2-{!Y{5D^JQZnHL=QCeVM4(?>;*E_@0g~om$8DU#8!9J(Yr@QJgZ(X#cM#|{1By}cX1A3d~kVW8Ne&&ZIpvy8JpZ2WL^ zYQWTGnrHek5aK#br=U$t4N@@@dUCiw6oIi`Eysk0y^q?f>7yTId|RxA{i9)%TMhXGIDGbJuLEqa zf0=I%KbyBn&$4e}k?_kp;>agvNQk7K97y{8nEw~53u!v)m)cK8HQCKN2}&HEu;v!nP}VFZtaq#Bv6-xcbal4 z#!iPD(Q{mi%AcKg<=4cCQSmtFi4_Id*$u?ue@o4Z$@QrvffTS@~$>Lc?b*%>ZIhh_B{YaP1@38A5(I+!3WEi+3Y z6bYvhXtg%$3o*}6f-kKfMzFS@dCp)9hZ?!FGC%d z%5dp0ydj@vzp>W}2{vd(EjSN@7 zNMfQqM&&bU-5;ag{M)Egn(el-eqSbDJ0DC=W}NM~g|TV?!gMjs3vAcUI2cx2Yskt5 z<#x{(6@ipLw)t~7zw`1mGc!|F9XKJcI{s$LCnC3d?&juppyAE6s$3G8GBxHZlIj(& zXK!EX%_LBers|%o>q?uN7o(?an43vj=&p#&EW*KsD=^GBKXMxCy!KuXDrWabov;VE zsIt-=Xpq)LsXZ~(E7Z@;1UI!a8;;|LK!V!bj!LFbNBz6HSD(*EJ{>>5Sjy1#uiGk& zjQ#QEC7bofK)fBINIPvFauDj@-M9r`sCFoDM=ogpxZA?^&%K|OWI{e+{uy5L@5A%3 z|J{urnf|-ifA>Tn7+eq6B9+s|0ih!k5RIfm+{4~PAr?nU!4R3s5 zh<1d_`Sad^Md*@F(}C0xv@O>khVnh0U-o3tNJY+HbUJ;s>+TvV@aX3D7q|n2gu94k z@12~J^7GM#^hqgk_d_c(BIWGuSc2W0iKFArrG2ZBhcmH@Uc*IjoQH8ZjkcSs+G7_V zzzA4otZ@@(hP9J4Tav8@m+iTo^HvRUm*YhjpOzIpa{uRG>wK&G_X~8iIB~WLc+M8l z315_9J6C*w4dOy9BX?aNa5Vi@nER^V11Bn+s~cPoSKN1*DZ5QQV((=NuJ{axXA#pVdk2k5pv% z7{4I5Y3BRAP8&jBJjI;3*nGTZHDP>R$EQtmp3riAL9e)IWi@d=Q0RNzdcLwpMn*QZ z3LAO+(ZFH$5@#vJa>77@tsGP=Heyr)*l3Db=rEf04A(3T&bnRS1 z-CBmNi-{vg^I!h}kn#o(M2J|P*_Es$>rB({nK&v*I$o94b4NTq zXne%x1Kh(>nD6_074hK1=;;`SzQQlEV#Rq)#2G9; znezFFq$sFk!3oexd8j1%;DNc}RSLrzEz_^iJJ75mDooI5*m)nMpX>U+#kdc48v7j3!uD!E)&HOLj*(9;TB7KRpXVDJ?rX!h&;mtGY<1$Wm zL&)9j_D)NP_gLSlbpD4sp0$uyRM7nv_mj$1^$dN~j^W7*pEXHz!ofI&w^{he@7HdM zm)aOj^RU&u(zx7DN&S$$q+|wO%LmB_MU7C%+|J;GtI9?W{m?e-k*eLe@L;o-k#JKB z0rpLaGrkw4vC~+vN~7}y38Zd@A!=s@IXTzbmE~B2tW@Fuoz9z>0o+A4gu7KsuIatJ zU%J{PP~59&#l4NI->}K+*6RHkVUH`L8Mau$(?{XNdp)(5PF;gdA&(9c=P7Q(zfaSF zHNqmS<-1~C!hHNQ^!7IjEf}O4F4oA5M#FR<%u>`CpiWNQ9U?dvj3he`?x#$mO^09v zvP&SWNwM`l$9<5g7N^)H&&2i-g}1x9GPK5`+JQ&e2VgyoL#ixs~<$4>xqv&i;(y(k)20D2g>S13=zTU zt;ljHZo$Fjbk0#{Ub3B5a-I$d>XtNn5ipyV$zSU=P%#^ug?QFrYE%O_WDXaKdp!NJ z1K~j&FokJx4wk=Pl!6HYWcl_pNioL0ZJ|7+@olgIiK&6XQ#M>Cg_h}wiwBX@(tstb zPBQ`T5tu6zy5H$N4ubSk%+K*yJ?yR}?V58jkercg`9f099=UFbkWdv$*D$bFhZ z-9nj3`d3Z3Ml_(mL_i3HT^1>e0xGORzo^h<4PZ6U+n~FM{_|<%PI}@ug|d#W za!Em^M*jWvtsL3dZsO24kbMZaNp=MnZr0@Cf4OXS?P>q&7%A+~5}*&n%>6B`E_153 z`xu~Vu{$v5mg5Sf*wyh-$F`V2-JH)TlXARKY*w~E(`f0zN&%^tCl(Ly$h~29P8?wT zkb9y8hP(z#_`u2XuubW`L(SRYQ&jl=R2}#1Sq~ff@_rw+*@`Zw+njed? zLwO?5uyyHhU@v^XVoKP!B`^Kc{Q&F36v6yK1_?X+ZtkAfD;0c(E3MU&E=`{Y%jpL@ zA{rL&qs*Uv>@ks?HV2o&%43ZuFRZ^s#Pqk`dk42wwHu;+DpEP^eZq?npD_%X2%ID7}oYT<#;%j5PFtC@_oxyt5Vs=+!Fd=4~-z|_9Y%3G1z z9{zB=QV{-}K@JwYSY6z8>%Fd=K=e9=fsnuVg;Q7P`Zc}OqGam$ePL~-#M%3FBLb3U zqHGl773^d(&WsC0js+H*!McJ6_>XL~?=7(wo~1-UlYMBF%T40>1br*jdj$MmnbIT* z{yEdc1)dx>kh)s~0XDV$t6k6K4*?U%Ww<3)hk?ez6FJT&zun8yp*>u!Eduf!aADYm3jJ3* zR%kd_+1dk3CXb!0RFh8V*A>nh9$jkQg^_-$ud9J=b>>0m@W;JD^??^pefAeLT0q86 z&t-gPE12$=(bDZBW)(sl*1xl4^co+US;GzAo0T_UI`J^VVsWsaYkiOm>K=?8)hZ-G zeBZ?jfqc+{AA6-_ONV4cu&i7Jogl^ioR2TYI$3ap%U`h3Fo^HJGn3`--)@^PcTS}+ zKyvE{&!T*~2AbOZ?Y#dQbBnGeg=;)6cc>q)`#ex+{;K)JBr!k)ht#{?r)`0!E!Gh8 zOMl^wCjEERRO^VJS!j-FaCBW~3(;DU)kY(eId0d!>VpG(pWNqN!_1C8^I?X{&rET+_TVKiqahC5|}l zmL;#rwG2z5V)fXSrB=;38Z>U{1i+RZS2osqaHqHyWG$`W!NFwOM{|V z$`5g;GHD`v7&2@2^Zl7f84_9Ry82eaI7;$0s{5)udi(m~CuaGzNi?goBUn1mlPwE~ zS|NDg>gq}!-0ULEKRGWJlfz227z`IG^5!M{C6Iqh;Q$zgnmQJfH|Q?kMF`1F@Vf(h zgNFe+H0GI~^Rls9hWK7=YLR7gl0~;lin4}ZnA}B>?@Ivi21o@#JJWKw#m;cvWvf-S z*Xp!&*~dH;6K(uS^kLKQ0TO5y5ME=qYNB`M_Uj7RE$5RPP;;q&a$~lm%alQS?oX2M z+sF(I;#D-UcesaQW~#p*ghD(N*CyG&SD7oFn0t*EMXip{<$`FIJoqU!nBIUo4tX3)kf?A{sE8D+s&iM)vFn}( z&pP1DfnX<-zhesWMeSqZEprRwp=2o(P93xKpRoj#x}NeKTYi}#k%T=2G^Z4_{2sR#`_;6Pfuu=;~zWpZIERT zQ=YxAZ?3LZN??t5PsCk9bWBzXKC&V(;!MiXT{`&CX6qO|mqiMH^d30Wuz&G3&!VFw z4o7gpyJ%^$%RhL*95^x34cc6`jI9Xo?BG?czf1eEGY?AB7Aog629gYSWw3+Crat+Ei8!PUhG2nSR*NZ)dHBd4+G*(^ zko}&{6E-6G>z^~TS0`7DG9LX$5~&b1w?z{N8z!~uEd zKfQ58@L};+=d{oYQB>5AY|S^2M>}fCq`F`G#2$VtU0t#(SbeP%T~$-WHOLd#;__R? zFF!XVK?3G2D%vV4dVy>httxL`=a^!<&uW<9P>-r#u49&`>yE{;liKI9KFIu7^d?0hA;TGCWm`*b{>wsd@tq)RSx?bn0iHqh!y z*N)-U+4`5gK}o6ek^6s&@}a7gr!T21^{}ELODkO@Ge)@z$<|pb#1z9zGj+bG?^mfq z;`_*{HOrwE#+wwk3%fRc;-v4q5y1*%j7>C3JjdfBvU=6fB5x(=FayJM!l3x)wa8(d zGWw}&)W^$D48A{64BH?7rDQckFal~jkNrn73naUXI%-X_K-yyP04gIL()%8`=rA{Q z4kLpQPb4Sfq!}LhYOMLJN!9|F0-YKe{6;&FgJ4KuNAIfqbC?>GqmvpnB{4nQta|q;)*_h!zEmzfr{3^9n5+xqYRbE6v;>(&w1DI`^Z`04L%=|4L7daxA z99&}OVRD+p6;pGc(~vkl7B{k#EzDczo-aL|6UI!FBbk_aw0qcbHy#7_IOHDZj95&K zZi$@)9|fD(YJ{@lUr%8|&~VGBvmejDXji3$0ZVB{sFiH%iKY~43*t&f_fmj{qclEo z!kPzV@v%T0A+$M?D(L4>BQ@xP$Xz%;Ec51dHM)89mn6_kq z94s(q>KuO}#3ST`y~FRoP76s)EzWhd*nT%_s-mWo%U14uQnbK@-~EO-NkyCxK=vx` zya5E^=XnWNit^U^l2hq@TCr_92AmQ^f$d&S#)+GThzy&KJKv^FmUQP;yiAFmoCR&2<5=_&s-oY7MA)fVY{!j?VHw1B!4b>9qluN?NK<=XH*qYJdYqntE zfbKP${N zdB>?0idcS)JGAKaf;;hR{N+F{*lcX8t#NmB?p@Rl#Urtm6Uoa%vW(ksKC~X^?5r_y zxlUqG?KXArg3CeYNjb5VS4c^ny0a%?z*OjDGxvg1 zEUc$A(lRJQlX~y^qX?Y$W)d>?LMyV9$Irb#!^e#g+gYSvs8JJgbvd^U{33hgOh>K( zr=oJaAc!KBooR-CSs8emN-e1(d$$W5KNo}Ms}C<@Ao=-b?)=VK*7Ttejmxz zynTbhNh|69`AlsnkQMutdxt=d;jwhVVF;eY&5Vrb8SMuGJIHX!2nGd>h!CFg2un4r zKkqGc^twNr?21ovwIq0@$k0ibl`?J&Yz~G29OOfwDqg&q1#}zHk$o@6f7e6bGv{VW zjGO8a?L4!RndIyhZw>?vCjj%l!5bg|J^;V^Zu-NYYznpkKnWVrXvmQ*#!?~58`vxc z=*yF;M;(YEb-B-qz)1lp6Eojt6(&ofxFoPY>(7j>X)J1}Tr#tLYWM)Zsj{#Z8We~w6IdkUH5jft7%oN&e z6o(qbJ$VI58qKVR@OzB>WH05l7H7!5pf{6EfQBAs@<-unp~L#aPNvvp3`(rn=8mR{ zaMUDcHSfK@b&D>`$v|Z@Epv+ZpR`ZXWNqWTzk&c+Qvu+q!1x$9(@yA>d8(sT!+aaA z7v6#RWVXQXIELQ5Tqe4Bzd7HO``|J68}#;11r9(phyj9jP*=S%BkVaM6H8+TseZ`D z2n@lKCM{yD0e zRTT(m=h0^ey!0D2%D8K-m)y)(k_!GaJ_boH%84d3F}Cu*>&pOhlbZ{N3<3lvA~TSc zd_e`h9I!876|^Z}fY2-`I-^Fv102>}#4n0l|M9_X3c#xVehrAzXz9>4#FUAFW>f); z3N0J(3D_5aJ^cOje_!kWoKpT7jj(+qar^UHkG;9F3~gyF1mhD&M74)&SqEAM&9x4g7F`RD2Xy2Y_tfoWUqG-j5 zCx#i!Bye}}HUTSQz@WdN8%>90K|OU{+yQ6beFE;$wO(v=N2ahk4`BfZf?!-GgeOeY zTD&;ER8*()S{vfIICET+YIEA}RR!R6MF9Qi`&=pXkJZxwQfOF<`1=`)LLGC8}?}RJ*}cC_j4N6 z0x(Ad1tvk%ziK+SX}tqf zvbZktIDwJxWka~%q`q}O|#_b#O$=r z6?7`{<>`Z8-5BtEwgG#0nvvGDtL4zbv(?(=y|x<3qUr02Po=U3=Uop++l~J}F`(0* zv-R_&vBJdl=&@myvUwFY%8^L==8Ki(F5zd|ljGOx9`gna+B-gnDqAtDZeb7E!x|mh zT8fG`kIS+O3x``tHRwxN8IP9X zvJ922uAZHFD+><>boYi*v?o+o>)e68?haacDQ(dTo%)}-ODE~h=Hbc7y{Oc`lnT~; zYH-`)Wj1P9-Jhyu`h~{28Ul*esy@Ms%jbe5~7BX5Yx&2Rkf}}xZB{|+%Q?#S#GqZ z5mG>0#0ycrQA;7Kb!L;+`3<8Q@)klBIxzpHHw~(9T1R2KSMRtQt$w*WU3Kk+{D=8I zG-KqHD2Sy-6vcKF?Jk(VGME$V{Og;4mXg_0S$#fRR~I}kt-i?vc8r%sy3x^-Md2Jf zz3dOYS>F2))T z+?J6~0>pk~P7b4sk zbqI>d5$5}_pg89Kp*IkE=y1dTz#1auzPy1bgFA;*3DqJ#KgNcw21k7Q-&jLn24Ysdi2n^8^NOg6z)*3R1`_=KzQE~1`p zEIuNR8I@gAO!TaWOY-rMye9VH2$rZS$S6z&@M0#?oirc^9KpQBT#Eh z<5mNBSb&(Ckx?yt$^oHsSazg{y+2cWHqrBC+Mvf6nRAlN>cm)07U5M5c2lJ{La&frM?OV8V*d53mBkCw{_-!!0rLP z2Ku{d5hbz)QK==fv{YOMtiq5>|Hi@B$}nRdpDnjUxp1Qw9HDW{mkP5#epqMZw&lr7 ztTkF*VsWdARW#-0Wo2cJzv&$tOES0BP!@7~t!-cG1=CDM4p-OH>eaDi(am%Cc+h_m z{oFX1uE^7~{Mykh$3HXyxk(|Rj-b@$QcoC7u}H1Nv!itoo48zg)TJBZrvX@197dtfbWtFa3pB4o1~JENG!sT6aDVq3^~imFrW=hqch27EybA=Zvd@OVbx8M_Z28D#N*<1bx}qY8=5o1l1g$AOcgy>fln3L=A8UjuBYT*fuS<)I zRK{n`^ZCx0K)sl?AXuTyM3n8Y{dT? zCEhBWsreAvvsj4DE}!)2HvAO4vVOUBon0QA3ldV2ueienJhX>98f?tEHquf#_Y&*H-h6#$wj~XimhZq3h|7;T3x+ z<9Spup%LJf-r_;SMPZa?KQ0In{rDiOXori{gH{?0cy;ZON6X=?->V37Pn+4C$iv~# zvTvQJN~VAiPT=~=(f#e|fs*jzU_-3@dg~*AU)ybVbzuvmxENZjkdDT4R&0>a=!~g# z$_?sY?WRjZlHlk>1;Td06HbbiAvjvc0MSnj;yE(DP7Ep%I_CDdZZP`Lq5f&lBic_Sb5R&0pU6Df?#D!&VZ^Qo zGcuYFVdf_%&BlQE8H3Z;{-(D%^B|J_ysV{Z@9bPQLFm}M^?I8~P@ew+=;rg;Rv8=q z&Ny>0c|pyKhW(>nsI0;=u@K}K6#h1H0~|uIeBu*7H~;e*4~EaxPWD|s>cj|+*oE2l zmJBGLOtynnSj3)5B0xN=BBg;asL#c)#8OOHRx%-rU5d^r4KcG<<%mJZz7#1h%ker# zq|Z+JIU3syGC!n2^T$)6ZT#GUW4lTYWGHOM7qtG24yTX!*MW?=4qI*@e6cT@cyFWi zV7ADSXRr16Sc1r}cqhRqmZ?t#M5$5PTom{QlIuwLlmjTUq!H`E^#$ikT1MCBBi|h7 zXHPxs6K^nf$>xH{J;0m=V6QcSg7znL_|v#(LYmm@;bBLFx;oeS@17N@PwOd?)taQI zBX1xgvRLf$0N#xY+<6!+?7&5{+8q%v6v8m;V^e+s-yzA2y<~ZWPVsNUm1Z9R&t3QW z=cd`--yCbk7Oiq~;#|&H#@3f4_^}<^ep=~7X z#`t(}-*ociAQMWB$7SXWvAy%kAK769PYZY1fLsRX=wL1?bwu3E(oOrDRM2(Z5vvcN zd19a%Y2+5krWz7dHyJw#RKMF$b`J2lh$Kdhx+>{B5_b8Fc4ML;`65ooJ1|OG(0?X6 z6R}|ch3X~7p&8az;t;X-OLsvn;)7(Yh;k!?8Bu_U2Qvw~67iVL9Q=KQkEXONd7ir`xl0dNx!2$!L=>mMbO^?%)4fk69uL`uSbu1k~@6 zWd}}?HFTI`A*})VHWT$5$i^!7mJJ!Yv>6lL`g&0%Qx&8$B&56-%S zuAh3WPRvkMD)B#mfLx4uG75muB#=spN^(qNiC)J;2NFzW!i?~0i*FNoj$YH0L!&c zA7dMJe0fpoJ#@Zh{N_J})4I?60}Z}D5xi`*Kk=}2x40w!L6Q)_BvQx-U}ci~-%EvG z+#3+j4wCy9)-(15me**a>1E&NHGf2V1(~Px=s%$|M@`({Rv7>gJwjXtgr1Vt56irn zK9h6ODDhg!;Pa3>Lv96Sjx#4s1N|ke?m$_K5cwjzl4=%aW%Yv8NL;km3-xO1H{*Vi zne5Sc1&cngfxYy_Bjjib?(1U$@x!4*I&*edpiiL)Ce3_CMC3>R>%dDDXy4D1aj%4_ z%}8q(zdHY%S3oWNN{ttKy13r$u~uNolh*S47ve(PB4ES^+n`NWB*dH1+#uxFRi0>`Tk*%ZlcC4xP{|?Q;1K4T~V2J+H!woLR-B(Oz z8snu=p-d;%tWdre{;cTnZ^80MzmK_$C91Di1=M{#jvJ<2c;1=IN}l)%Iq%iFfb7C1rX!8NV7rF(%q@eO`=9g=Z&BncD%c!6K20( z`to*MNIa^S;6{i9xyi|x-2%Op4gm%Me;o)#X*O!aW4oxcZP~7nPh6DNxo6Hsp85^Y z@OuDY2$#;P{K>a@nYs85pY)>=ijQGlUpg=NrXdA@0c9+{n2lKlL5`TmyL?TXG2tVj zc;K(pB!v3m7B9A@d z&Qy0$N2Hl+BZBT9eYtu2qj|>Be?*_c~wmFVP z;0U>*lgND{7#i1-X1hEvd&jp)CHF<4XiWmnAB?9K0W|NBfGQTd5XO2~)P)(sn|&mp zo8bH!(eX~hc&g|*;&Dk_cDH08*5Vk#j(+M5#2>)C@)k2If2u_U2FtVxyLP?3Eh^Z1 zHGGJ$CgR2fz_B+FwYpF&4^47G#GS3NM_qA0@JTu?c>gGLw3LaKUA}=(bR!a0HU!q3zYvy`^U@-^%|Fg0(j9*=XPeG>C|{`+|U?t14p)mffQ^UrGU#l^VwAsNZ~ z;XjHy(bg&s3y0!%DQht0D9mNhkJNdN`^9*CK7&t*Yxm!V2c|y&`lZ^I-}WEhEY%x` zd;or}31dYdoVL?t)$#EuItw*wultIZk6^v_%6#Pkx8aZ=$X&Gv44NzF3MPlSOOzQ` z^u0kJS2)tRZdLfg0>y>l_G(%9Vnx^4_Vm6B$l?~oi)%3aF8nnROsDmeZL{YjF7gH) zyGG_>`oq25!at8P#a{F0lfx_vS(wr8D6C!?e%lHFM>$+TR-NZA4)!q3SdO}&>(jTun;amB62(^eY zR8ziD>xJe>25I4BH>T?=ShoNXl*8!e%?z@*d*OCcR$dnhU)vkP?)q`gWU<~@%Uuvt z^OZ$Q1N^?nIR753&{4k=N0+!j$QRqLwBk97UEUB>XW4{H!kFzyNa|OaAdELh@V798Cqv!DDzuLG_ z_EiyYdT$e?w%vw%$*?U`qc%Se(RwJC@6)=7WhmwD{=Tw`l;^3uya;X6ggx4w>`X&n z|2J8rU$>0?$;LQ%@+6l;kb-Wzr>{?XA4ONm^H*LrKit$Z`2~{xY^>{1B&@Yx+y)4B z=k$Q3JV1Vr?enjBAxzL+4VS>Tkdj%mvBX&w6a0f(eT%k&z%`)L3?l@uJRqw#1TSNc z1j+$$J#0EnU+8;x2L?v@7Mu;Zi@Lfz7N3ljl_-8ZIdO*P;j_mY__74ZK>?6Hc=we1 zP_%5+0(|C|4dd-dQjeeS&u+of+xg=`*s$SPzkIC%WOV(s#|ehlH{N`~g_DNg#({zS zl=(POZy|Xy7Bb@Vg$~oE$BCiNXoe?~)C=)hlK}x^hJ6Kuavseup%!WHtWZ=?4mw0UG|HQD7Zd)| zkuY!Z^us0*4Cqu~BhSeQIhW3RR2Lfi%U7|B77>pJ1M3xjvXr*W^RNB2-TOShv3}l8 z>+viONWMYv=PA)`IN-LwLHvBwO+WmG^%kkPIkkzspzM43cL_ra1HUL_=wp*E7kj#! z27S3830;_YgAmbp1L@{OMPgBS|D#U24SHEJHe~Tz#j8}W4}$^_j>3TuFmnq;@Mlda zOXByt8HngSBiMS}ukc`F^$F`j2bGNBfI1LehjbVq88A?|K!PFU;`67a@9NHDGR^*IWVlsOuH!KMlZtN_vv)qp zTZmkiX4lD^=g>k&W`)Z@uh!J6g0H5EnWPqo?M_}E76rdyAVfIo<^|@D>2t1Y@onx% zP=uNJN`y>S0-OiMV}NCP5(Az6F-0ep1h9K{71|>b6tqe=riMHF0Q}3hfZv2MOTi5m z=!$v--S^(3()9q+zD!Mwx=<4F`8+F`DCn2uVXhEvFQE18#;oLiO^^UKZA;0Tp_F9u zx@^N)TAl%5rMhPO(ryOCe*Z zz-KlKlH9O+Zy+&s*y8gy{hc?;0k|9oLNw=c!{B5+0$cFf&(t~2*V|}mx!69f!zSn( zvL3%HPY0TC@2Xs(5q5Zvs4QaJSK(N;lS#i1Fh7v8I^B)(BpNqD)yu8PzAn_3@Ywj) z?uzid+vH;C!zt_MBg~3iHa2ng%2Ul=Rd!<&!gIsrYl%6p-e0WtG&TC{HrhrSV>d*k z1(=vfd#>WbL-Q>+q&6&gxm#=wEvpC)bP1K0)lND>;nwz^2}PwXvYM(}j8;1m9S+;$>`qfgh>eyXyj$tusTk15t+RoHP$ zMNCw;^o3b^bBl|<8`89mAlBM4hFl$?ggrGgJN=L*cBIM~{v6r7+pB&5`qAzYZPubb zh$-S?vU0ew8p+BGzMJJWRA^U!sJ0Q3v@ug_FYpptRsX`9bd|2w5h*&Q=g~zcQLNLK z)6#&Pn6p`}8*Fgf(%D)b-+;Pi+^=;|HOi}P{XzzE+n5XT`W>5~v(;FtBEW4pyAc#& z@ixM$a2eL(x3zo?{A#Cwh$$F))oz@zv6_@Ldl_=uhIBo*;!4zEao4BL7~8hmeo%yh zb1i|(@Y$gD3`>FNh|6}NX97gYlIXH$>Z^Xk8xpVu5yjT7U2OZa=A5>GsR-_>Hs(4c zeB&x2S?at;LO^NlFLTWS)4hy{DVNw-J);OgTOaiCB*?&7Boq;z3B3=9x1YC~_9c|U zSb|AFfqJx`&oyaXywL1W8th zsapDN{y}!t)m$|X#SIeO@0#@Iz(hvY_zD(5`ISq zxo~~kZfr4osWNmAl#v%3pvwJfP$1bApcu&`w`ouzh=!V-K{4Ugj1OqO@%JkelfP&a z`}pX9UvZ*&NHnPl+y~(In>QpRn$bj)v48)t^X36?WB-f|uH3l3ok@Z_*g~802KaI6 OEoFH%xiYXx;C}(=_~W|( literal 0 HcmV?d00001 diff --git a/Behavioral/Iterator/uml/uml.svg b/Behavioral/Iterator/uml/uml.svg new file mode 100644 index 0000000..d72d5b8 --- /dev/null +++ b/Behavioral/Iterator/uml/uml.svg @@ -0,0 +1,638 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bookList + + + + + + + + + + currentBook + + + + + + + + + + + + __construct(bookList) + + + + + + + + + + + + next() + + + + + + + + + valid() + + + + + + + + + + + + + BookListReverseIterator + + + BookListReverseIterator + + + + + + + + + + + + + + + + + + + + + + + + + books + + + + + + + + + + + + getBook(bookNumberToGet) + + + + + + + + + addBook(book) + + + + + + + + + removeBook(bookToRemove) + + + + + + + + + count() + + + + + + + + + + + + + BookList + + + BookList + + + + + + + + + + + + + + + + + + + bookList + + + + + + + + + + currentBook + + + + + + + + + + + + __construct(bookList) + + + + + + + + + + + + current() + + + + + + + + + next() + + + + + + + + + key() + + + + + + + + + valid() + + + + + + + + + rewind() + + + + + + + + + + + + + BookListIterator + + + BookListIterator + + + + + + + + + + + + + + + + + + + author + + + + + + + + + + title + + + + + + + + + + + + __construct(title, author) + + + + + + + + + + + + getAuthor() + + + + + + + + + getTitle() + + + + + + + + + getAuthorAndTitle() + + + + + + + + + + + + + Book + + + Book + + + + + + + + + diff --git a/Behavioral/Mediator/uml/Mediator.uml b/Behavioral/Mediator/uml/Mediator.uml new file mode 100644 index 0000000..19df84e --- /dev/null +++ b/Behavioral/Mediator/uml/Mediator.uml @@ -0,0 +1,46 @@ + + + PHP + \DesignPatterns\Behavioral\Mediator\Colleague + + \DesignPatterns\Behavioral\Mediator\Subsystem\Database + \DesignPatterns\Behavioral\Mediator\MediatorInterface + \DesignPatterns\Behavioral\Mediator\Subsystem\Client + \DesignPatterns\Behavioral\Mediator\Mediator + \DesignPatterns\Behavioral\Mediator\Subsystem\Server + \DesignPatterns\Behavioral\Mediator\Colleague + + + + + + + + + + + + + + + + + + + + + + + + + + + + Fields + Constants + Constructors + Methods + + private + + diff --git a/Behavioral/Mediator/uml/uml.png b/Behavioral/Mediator/uml/uml.png new file mode 100644 index 0000000000000000000000000000000000000000..04efc46e8bb83b45590605b3fdffe32233401aa1 GIT binary patch literal 20731 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 literal 0 HcmV?d00001 diff --git a/Behavioral/Mediator/uml/uml.svg b/Behavioral/Mediator/uml/uml.svg new file mode 100644 index 0000000..6934436 --- /dev/null +++ b/Behavioral/Mediator/uml/uml.svg @@ -0,0 +1,651 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + getData() + + + + + + + + + + + + + Database + + + Database + + + + + + + + + + + + + + + + + + + + + + + + sendResponse(content) + + + + + + + + + makeRequest() + + + + + + + + + queryDb() + + + + + + + + + + + + + MediatorInterface + + + MediatorInterface + + + + + + + + + + + + + + + + + + request() + + + + + + + + + output(content) + + + + + + + + + + + + + Client + + + Client + + + + + + + + + + + + + + + + + + + + + + + + + server + + + + + + + + + + database + + + + + + + + + + client + + + + + + + + + + + + setColleague(db, cl, srv) + + + + + + + + + makeRequest() + + + + + + + + + queryDb() + + + + + + + + + sendResponse(content) + + + + + + + + + + + + + Mediator + + + Mediator + + + + + + + + + + + + + + + + + + + + + process() + + + + + + + + + + + + + Server + + + Server + + + + + + + + + + + + + + + + + + + + + + + + + mediator + + + + + + + + + + + + __construct(medium) + + + + + + + + + + + + getMediator() + + + + + + + + + + + + + Colleague + + + Colleague + + + + + + + + + + + + + + + diff --git a/Behavioral/Memento/uml/Momento.uml b/Behavioral/Memento/uml/Momento.uml new file mode 100644 index 0000000..c72667e --- /dev/null +++ b/Behavioral/Memento/uml/Momento.uml @@ -0,0 +1,22 @@ + + + PHP + \DesignPatterns\Behavioral\Memento\Caretaker + + \DesignPatterns\Behavioral\Memento\Caretaker + \DesignPatterns\Behavioral\Memento\Originator + \DesignPatterns\Behavioral\Memento\Memento + + + + + + + Fields + Constants + Constructors + Methods + + private + + diff --git a/Behavioral/Memento/uml/uml.png b/Behavioral/Memento/uml/uml.png new file mode 100644 index 0000000000000000000000000000000000000000..e96ea6951396c6d5101f156e6fccdb01365e0a89 GIT binary patch literal 8364 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + state + + + + + + + + + + + + setState(state) + + + + + + + + + saveToMemento() + + + + + + + + + restoreFromMemento(memento) + + + + + + + + + + + + + Originator + + + Originator + + + + + + + + + + + + + + + + + + run() + + + + + + + + + + + + + Caretaker + + + Caretaker + + + + + + + + + + + + + + + + + + + state + + + + + + + + + + + + __construct(stateToSave) + + + + + + + + + + + + getState() + + + + + + + + + + + + + Memento + + + Memento + + + diff --git a/Behavioral/NullObject/uml/NullObject.uml b/Behavioral/NullObject/uml/NullObject.uml new file mode 100644 index 0000000..257c915 --- /dev/null +++ b/Behavioral/NullObject/uml/NullObject.uml @@ -0,0 +1,36 @@ + + + PHP + \DesignPatterns\Behavioral\NullObject\Service + + \DesignPatterns\Behavioral\NullObject\NullLogger + \DesignPatterns\Behavioral\NullObject\PrintLogger + \DesignPatterns\Behavioral\NullObject\LoggerInterface + \DesignPatterns\Behavioral\NullObject\Service + + + + + + + + + + + + + + + + + + + + Fields + Constants + Constructors + Methods + + private + + diff --git a/Behavioral/NullObject/uml/uml.png b/Behavioral/NullObject/uml/uml.png new file mode 100644 index 0000000000000000000000000000000000000000..9a081bee990ca9c404bac6119405103d4d7c221a GIT binary patch literal 8701 zcmcI~byU<}*Y8jx!Vn^ol2VdGi!_LINH;?_NJ%${(#?-XLAp~=U}&VfOX(Oogkj(g z=z8Agz3X}JUH6YWYn?gsjlIv=`|Q2HpY!?7M-?S$94s;{004j^EAvVf06;-SHW5tZ zH()#I<0t??(<%E(T-{?1mif{Bv2=a+W`!K|h}P`k{BijDVssQS$PmgG{qcy_vj-O! zC|_?%Z6_Z8Fl3Q66P)nfGe&mFyM~UGiw-?rmcbI$sT~a2Pynwj?#K6)?I&ju%ND{8 zvJSS?ms>P!v?eQxb$8g)#?FLjdAXKu`b*Itm&lDi9wXM2$%zh7bO~ zUeKffmQ~`Df=Bp)jg{u);1OY5^S4Iww*&|cXBCThvy}_YWTZJpV z5nJl^$)Ydwf!NsO2(hsV+cC6+Qmgbl3Hb=qb*w$Kl~HnV#d7d=@F^_6SHY81rvMZB z4I5Px%`&%{n~%>((p1-)d)M2YNm#kMrj$kRX4*P$KmSi!8j(^&-Q1QzX;oF=kdopV z#~K;Iag$J|>Q*_?og37XX8opjQw7|9^^EIdxY0LTK3J#3s`Q^2uF>whGGNzB?V`On zZ2KmA>=Lt;u~V=@O&Lfr{!`umHUx_G^PnBE6dL6^v~f%sE`XLY{?FJ}Y_qlGaw0#Q zRQR;DbsD}IJ)AhH*c>W$L87fb1>cVK-pJDr5x+=92~BACNKPCR*~$6x{P|KxVz-m{ z+o`Ue?(U7b#dZ%gPli{@sGh%^_XzdlOSe-Cks(`E?%Dk&vJ5A=Uj|$&E^QaJ_p%FJAyd_@;f?Q+7!~48M zD1<~@B+9RwewA}0uo#V@HFPz&X&D1}iw@p_qcYZ};thIl`4Uf?77Z?eXrA$MUR_ER z+ebJZV_UmcvDZ=z3BL@qKZ7~rGB$o0ZsZNYj!vs;+WLRSl`7z6KmD#{&Y|7laD#Wm zQ9OFV-*>-YW=VAh2QPgNeveWu=wH@#)pIvH<6+d^mPc5|T{&6Gs>WZbC}8K#lXYV> z_Dt%Oo`0Zd;`WBkkz`{qYwENl8m2Ek$GvW;5$}tW_Ci z!a!N(`Hi`jgNoI#{pK!p!Ldq_@p#R|I>buJf-DM7mPM8nS-fDxpvA$bMq~AyFR>ol z3c~iTHET|1MCqPy<7CHI2frAU9;obZZu64A6gF|FxnAV$fAmbax%4R+-1@a{t6#H6 z<}Y4Cx2BDg;)pRGNRBsXs)V(MssFrS>Bj*c)mL|QHP>)drbx?2a8e^(8Q(Y}N{55Y zFEtDd?@df>o}QFoYdtuVsAHT;kw5(kladl<|1rGOzRLF2C%rZM%XGQHH+uz84kcyY z(`w?Hmn6W%d_h#Ajdw3~6e3wU5cJ`nJ!qWKfK5HnQuFoTBm;gR!;RnD<9(V?h89to z0w%Gzb*a=*V-pivHkzqY9m$Hs^AnY6^0KMZe-s#WvrFS5_f>SNb{bUR+mlv2)ni1e zxXNnmzrxyot*$=Nx*3z_uqOJ#cW0IYirp&29G>0e?%(XV2S;0V$BRei`dXe^eiu1; z@$7Y_=OCG4jMDwmc0!ZW(sg$otS&3gqm{qSi|#vI4xi7h&iAH%RnPr-9!hMOV>}4~ zqaSaL1_bVNg4>hr@6w?(m~H<482aa!?r-1O@#mPZ?N7gw^6*U*6hM+g7Kj2C<3$a| zs9)~!h51ufW**EKE6Ph2JOGx|B1FjMPcnB`5V?;p&QD_|rgN6jf+uJEQkvYCUJ4zp ztm!EaeWi@tCo5X6&ft&w0dsErR(kY4w7X|BV)&)tE-|70CLwwQ+cW?aApT+gK;66F z5-xq9OmTG?xjUP>%H6TpxV?QG&^|Plk6poMWb;K!E{q7RWU=grSdQ~60wOgLFaU^c z(>hKe=%BO@4}%Y8D>t9*ogVp9QGQz(rNy(#a!}NE{EXgA@Q|jHnxSRs5yTbmLm-d$ zi=6-zFs3-1bQQ-C$6;1IEz=-1-KD++k>VaLEaFMIVz0Bw4>qM{_>Ie3#P1SQ zJ1HL?hXdnbJ5-x>@|>8S{dx3hx=@U~?7h#rN?v~!9?}XcaLz0Jpej0+lci5p%eZHD zeS?T~SVtZljbew@$GVfyDzFpW8(rdpxx|^y=A9R~y!*585SQ)IFW5S-66YtVtjKl5 zA?uzYDhU8B>ik=kuyX;aRiRgAA!Z-NDu*gfPz*_g$~lRfVWAQKmlo5 zuNAr22}nw9Qe6hfDRfT5BhY~*T9@@aJH~&0doe@8=c+V`i64SoMW2ABVA>@S$a`3f znLqqJt=X%NUuRmzey1j*h#IR$*Fc{Rto=q!oG`ks>8lK+ax6cnkj&Q2DGmz3P{Me_ zJGJwRHn6QP1M9O{>13A_YVZ^K9aZFw0n)pNRuuQR#+VNP#NWq3Vjj?cZz0Oze}GU8 z3OL}cBLL(o_UtWzUpf&)-Q76J}sAEE#BMgu|cEznpk zX%@);b@9KeVv{JVTqkAbR!AbX200tc^YQ`<6I3)T@;G|~*(N7Qa+D-AQscUzSbD`p zoMM?F#az###QE%s^1A_U1jT)kJV0{DzYAg6b*-m2Egqa1AWWv=%W+o~e#WBgvE0}U zsbpyC7KO~*VMi1 zoexEC{5GccF6U#O&@yIz4v5rnv;ooTq;5Y!Q&U4*U;kw*<#mNsG9Y6bTV5Sh9iC;o z{N2U&d=J)>_F0WkErEG3Deuz8$V_F+fe0=QeLn;S^`B!}T`F;I#{%Ofwy7p>n2*Lq5m9=nZ(ow_p|Y>oFUt)*D2o0p+~W(u_5j2o0RLU-9H?W%N^@(~056m#z% zT;G&YIu;?i{BG)yq*Sd=zW}GN{p>Ab*eBy?;%X7Tyf3C`iYMhNK-msQqwpk zu9d}Q!#)1rvyuwo04u5%ije-+!Rga(YP_l8Z!l$E#PX272LTh2M z@#yG>Y6oGe!cvWTKYjD5?mz#?P`Xt8!>*{r020a)k*g$;J4Chqp$FknozotH5oO@e zH#@j%wX}(4(G?XED8?Lc<ayo}g^vhiqZ#>hf8v~CdgV7RhYpK!$M#wAOtxMygu&eqh#gn)n`zL!o}R+T_h zPrvk3#moL(!Hb>WJ^g6kt&LsvI=<#Gslc9RwSp|dO(bn?KoZ)iu7egevoH1;>i;~Ib#w^ zG_3hFF6qL@`_=!Ug-b^vbykk6Q-w6iBCDrZr9mP zJCHwSG`ToDysnl*4W5#BIDnKo7XB*x-=ErF);>7ecXJB9$ zTkgH7-BTile_K#utQfx3YW^Ge7HsniyE9H_-#*4r?cbipNg&}FVNUPyuLus{QDyC% zDG!2|r%Bd)U(DuBUErXR+-lL6272J+_Y*#1}w>rG^%{9K2a%K<_&28JhgN0S$ z@4LmaKBSTbGgS-}7B{clmC(q_FKJ|G6SDV(4ha(ft%L&py@aCvdkH=IcOfKlw6OuH zFn%gVCT4&UFGvISi7VSw3my3^KtdS^0Ms59$ji2>nvIAy^{}{Q+8)~4KM~Gcdlk%v zf~KC&&Pigu;B^oseEV`Y6+XCLK&4OrCJ6UHF?!^A?d)f;nE4Jta9sBl{K4zZaz#DJ0tC-1|{@!_D45w<|cT@Ake*@0UXi zXLROVe@<@5mz~OOkJM*O?oZj(i>-f%YWU~4BMd26L6XtXfY@EDDmXB}q{aF=G0r|b zDYTeYx%BFx*OzW=SVJf5{hMZry7x>-R2h@HpoF0}J2chP> zNFs#93z$}hvP4>wzfBaU;x0Lx1Rcc2lLdI^Eh?)<+VOmji_Gqe?$6yY4(kas%tf{5 z35553l1UN1Z8Qz&n_vNQ!`}%v`=s$8(q?oMe=p7$N(G&+E}^(t`|w#}@f6e~_uqp` zN^C6S2l8u(gtLG0SZXfzqv21{i?`P8xwx>Mg zxxt?C^~KDy`ti`m(-a-y=oky6)wZ=66S^O_WfSwY-hKU$T#}hxJ;}zXx9By`q1`Xl zV|OpUIj2iWmHCh0X5)(ygQRTfkGpU~H996plc{u0vS}H;GKU4_#S(O|A>2_wo-)jx zE;pTzGje!uCpjYC``*XBvdXQ3X5P-nTMOH(e{x@Z!%4&oBekdQU}q=eM3l7M#Aoow zd-iwX4RTRxEADRJ*FSG2(5mNWwThIK-B`O{Bs>n=RH9J(kb&Gl^2qD07%WP(emzp` z3>4YHP3C{u!jFtOxN&%M-K4v_n~=!YgC8FyT^M6x?{;NRi;8fK3@TA%Me?>0dS>eR zLsVroc}fR%O^Y=y7CEa+Vm&E~g2SzIuatxk)rr!(DybeLWF%t9WVmmmF(`Hd@B2V% z=C29SFm*})Ux=nZi0uE9M9yZkIEw-!5YQeW&d$1nLlQy}{8W2_9E>Rl)co7eRu=L@ z@ZW*>pr4ll#Ai5r|3~;lq=N=D?xE%mXs-5lUYTo<7HRR{@1Kour@Z5_ki|2#5|ivs z^?wFUAniQR-2_~do+N6V>cclO^=d2~MW+anfT}$z=~&--9ZfChu-puZsJ0_`I0en+ z<>kYQ?qztA+@3abU4~^ZHA*ca{u2)3b%Te1CzDd}8FkCXbyDg*ax<*KZ1)q^FwY$4 zS6=XOJ&w>B>&`!~cjA}tmqN)L&pu%#l21Uwntuk5omtHhc7FIFMK@d#9xo=BMQJeG zUzu7jCxS=Ksw%%f9(X1t8@8k)6?w=(=caLQCQ*_b*0O@HNWYmv^;c1EDBk*x$Az9} zIa%0*4kOvDv7Fp9xBaG&keQj8uTQ`AjO(e+Z4x|`$$yjGrItqUgK(=*_EQbJo~*NV zg*1}5QY#M$L3g7;a#_ifmQd=w{{et);vd~~C8cNWgU|RWDd7FAMV0l9 zh!xW0jlFNIGj?M5aL=@!X{q0h*qd zl6XhpcK5iy_4m{1{0Jld%$Cv0TUvp~#&NuNw?zKUz^S%B83_KHi829F%_zZ@rucXf zUU$RgU=p3(`2@v=?<&*+Su)Zdl89O5Z+>WdADQTWZg;s_)ilpoA9v$XyAS(0xb{jO z5Ih;wHWHoUs5m)%-Q<4m|1`#5^z~j^>*#(Hj??3 z(n~3n9eoU`F5IxyoM9$K%E5n;JwP62@CQ{;H8)#>ema%k3nBROGliaa(+&1)H>Y;| zf=KuT8B{HgUIV=)Kr%8T^gzb<%zj_zMC3_+s~e>G!c-y_BvA_9vpgZynZ|R)1O)_U zfq!=d9!uW}fW3WVw_$NjeZNYxVD#B7<3pK*hdseh`m=F5LoRx>GI$A|EIfnpoISVrl*pe_h<&rH+4BD0;l{H|Z)P2y$SCt&DF zM8}sj3};Z#_idkxGq$Ka6lC@J`KIUh%jP{sy=!L_Gzfm$6#_xth37whvlXmV9{xEJ zZ>coJn`s3vp-UV*BP{eZBqV@j;w6SuftI&=rXTNuH6U2V6g+9WCK z6^laph4Dc|vLLw?M|kIYi+|+YY6Chd5K4V|W;>{Gbq!exc2B1=v>ioOO8}PMhFy+t zg#KoR(P1S?UC(X40C@zGAc?-Bu&Z7YNW56FS?#!}XE_zKLM{n@AvAOVi2dlyFO4e5 z`!Mi181tlqaK4P6v8Gj2<7lOC${!2oo)vkJUL8!R-RefpDOMr>EsKotc97%XI_DgT z`0(4LcgLo)_l7TxHs5nFa67idower9sx>#>g&CTV6%NuHfcqAl^iiDn?qLJr3m8#= z0wlPR?_LH^g*Yqo&GmO`mYqPudsOs`q>H{S1qm5e4j1ADxK(68?U&C9sR+qrx!;dkdmz0qhz$>429^uuc--ip|h_i04;`6r% zG1km}mqlX<%BQn`pYth7GJHy2pzdXJ~lnZzqzwac{!90X}U1&*N;6qkL1Qjd`=knX2{bKWR=>)_>~ zr6GarzL-eL@zFiy z_`BZsOjFqjFL4MIK?sH~> zJgN)aLittsXZh=_v4purJ`Fe51fd60DPG03im9Sm!ZBC}UysWWe&mAm5LB4eYP09h zRyxR;Jq^|*@F4`>8stZ^ot-Ws)%0RQD=Ay~##{pWwWI?<}YaIxz$)8YJKf0|*7&odZLYeUN)ElU#_r-`cJD`0?`SH_6+r(GS8$C?MJ> z@sNhK2iu9q1tKZ8oz)vl!CwN~vTLznCoWLxaPWu2Y zrHY6m4(KyxaIf7Dtpj5%2S$AF^y5|`YkPsWFY{n0(M>+-{KkhdiS<~WnuvKJ50?OgOI3~w;hDX~bdF>O_#kH4 za+1pa`UPUuNwjsZ*yEj4Ys`Qs13D1NaG>fP2Oj{F9Rt?Lzwx{?=&OIma`kd|q`D0I zcDQBD6BJ~W!~lHM*!AG=&BURBj+82}HoWM-Vq10$w6f;&e{eK0fRAS4Ia>Qq?ZYd^ zwGR*1RdSjS8&SZqQdi4b=rf&9G101?t{ZwUke6bCXlv-Rk+wR9Uo6rNFHc|{w-nZ~ zh>qX{{IXn|m_G?Ng}!XIsSp--1Ir8O<-rD4a z6-E8pYAWsDx_4jyGEG!AYv$(W!u#Z0RQn`$i1V@001?oDf^qH|W@hHB>AJoOx>!qr zFQLU|R-vY1p9KQxK_559s<~dWvdmk7!($}1?B{CPM-?89UzzpQiOfn^AFFF5eRFcW4LmIT#9&S{%=>Y++@7s+>xj(ki^tbM(6(EJbWpK0aRhzYrr zr{3@F>gxyynXY)l}BQ6sGIt2M%#mghw$ zF&2dgH!kd;zzvNzZ=|~DPcOPjBex_=oZjSZTe8saR7}|V`f8a4w=y?nHZ@>it=LxH zUMvMjYien6a|uAwZZL*`XxlDeU=XOvF#wG$0yK%1fnjCv%YpTDAKOiS?q(RGuYJC~zQ0v9X#L8?@ zLgD8K)m*C897@#uIV;dOA;o8=w@Eykf5w`%4C%$52IWNe%VE1Zit+a(%GBo_hYFT? zVm?fkXAkv%bO9_b`JC?8ByVBfx5;8PX$%$VFsAx+i1G4_B-|2V;ae^Bv@9Y13HHan zJ~_W&8V-H#0ACeJ7u2Y4fg;a~ON&2~G+4UjFC<5>Is-IMh{}wDL2F?-MxU_$&wq=UzD1E5vU&P)m30?@{K!fv Ky(*W01pO~Nl(h%| literal 0 HcmV?d00001 diff --git a/Behavioral/NullObject/uml/uml.svg b/Behavioral/NullObject/uml/uml.svg new file mode 100644 index 0000000..12273b4 --- /dev/null +++ b/Behavioral/NullObject/uml/uml.svg @@ -0,0 +1,304 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + log(str) + + + + + + + + + + + + + NullLogger + + + NullLogger + + + + + + + + + + + + + + + + + + log(str) + + + + + + + + + + + + + PrintLogger + + + PrintLogger + + + + + + + + + + + + + + + + + + log(str) + + + + + + + + + + + + + LoggerInterface + + + LoggerInterface + + + + + + + + + + + + + + + + + + + logger + + + + + + + + + + + + __construct(log) + + + + + + + + + + + + doSomething() + + + + + + + + + + + + + Service + + + Service + + + + + + + + + + + diff --git a/Behavioral/Observer/uml/Observer.uml b/Behavioral/Observer/uml/Observer.uml new file mode 100644 index 0000000..0e5ddef --- /dev/null +++ b/Behavioral/Observer/uml/Observer.uml @@ -0,0 +1,27 @@ + + + PHP + \DesignPatterns\Behavioral\Observer\User + + \DesignPatterns\Behavioral\Observer\UserObserver + \DesignPatterns\Behavioral\Observer\User + \SplSubject + + + + + + + + + + + + Fields + Constants + Constructors + Methods + + private + + diff --git a/Behavioral/Observer/uml/uml.png b/Behavioral/Observer/uml/uml.png new file mode 100644 index 0000000000000000000000000000000000000000..0300bd4a9d4f4cb2626518ca52d45a1fa7ff3746 GIT binary patch literal 9977 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + data + + + + + + + + + + observers + + + + + + + + + + + + attach(observer) + + + + + + + + + detach(observer) + + + + + + + + + notify() + + + + + + + + + __set(name, value) + + + + + + + + + + + + + User + + + User + + + + + + + + + + + + + + + + + + update(subject) + + + + + + + + + + + + + UserObserver + + + UserObserver + + + + + + + + + + + + + + + + + + attach(observer) + + + + + + + + + detach(observer) + + + + + + + + + notify() + + + + + + + + + + + + + SplSubject + + + SplSubject + + + + + + + + + diff --git a/Behavioral/Specification/uml/Specification.uml b/Behavioral/Specification/uml/Specification.uml new file mode 100644 index 0000000..003e549 --- /dev/null +++ b/Behavioral/Specification/uml/Specification.uml @@ -0,0 +1,55 @@ + + + PHP + \DesignPatterns\Behavioral\Specification\AbstractSpecification + + \DesignPatterns\Behavioral\Specification\PriceSpecification + \DesignPatterns\Behavioral\Specification\Not + \DesignPatterns\Behavioral\Specification\SpecificationInterface + \DesignPatterns\Behavioral\Specification\Plus + \DesignPatterns\Behavioral\Specification\AbstractSpecification + \DesignPatterns\Behavioral\Specification\Either + \DesignPatterns\Behavioral\Specification\Item + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Fields + Constants + Constructors + Methods + + private + + diff --git a/Behavioral/Specification/uml/uml.png b/Behavioral/Specification/uml/uml.png new file mode 100644 index 0000000000000000000000000000000000000000..0b31e49d53921416de9ae9471b8c82d377ca1d56 GIT binary patch literal 25534 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + maxPrice + + + + + + + + + + minPrice + + + + + + + + + + + + setMaxPrice(maxPrice) + + + + + + + + + setMinPrice(minPrice) + + + + + + + + + isSatisfiedBy(item) + + + + + + + + + + + + + PriceSpecification + + + PriceSpecification + + + + + + + + + + + + + + + + + + + spec + + + + + + + + + + + + __construct(spec) + + + + + + + + + + + + isSatisfiedBy(item) + + + + + + + + + + + + + Not + + + Not + + + + + + + + + + + + + + + + + + isSatisfiedBy(item) + + + + + + + + + plus(spec) + + + + + + + + + either(spec) + + + + + + + + + not() + + + + + + + + + + + + + SpecificationInterface + + + SpecificationInterface + + + + + + + + + + + + + + + + + + + left + + + + + + + + + + right + + + + + + + + + + + + __construct(left, right) + + + + + + + + + + + + isSatisfiedBy(item) + + + + + + + + + + + + + Plus + + + Plus + + + + + + + + + + + + + + + + + + isSatisfiedBy(item) + + + + + + + + + plus(spec) + + + + + + + + + either(spec) + + + + + + + + + not() + + + + + + + + + + + + + AbstractSpecification + + + AbstractSpecification + + + + + + + + + + + + + + + + + + + left + + + + + + + + + + right + + + + + + + + + + + + __construct(left, right) + + + + + + + + + + + + isSatisfiedBy(item) + + + + + + + + + + + + + Either + + + Either + + + + + + + + + + + + + + + + + + + price + + + + + + + + + + + + __construct(price) + + + + + + + + + + + + getPrice() + + + + + + + + + + + + + Item + + + Item + + + + + + + + + + + + + + + + + diff --git a/Behavioral/State/uml/State.uml b/Behavioral/State/uml/State.uml new file mode 100644 index 0000000..6b825dd --- /dev/null +++ b/Behavioral/State/uml/State.uml @@ -0,0 +1,37 @@ + + + PHP + \DesignPatterns\Behavioral\State\OrderInterface + + \DesignPatterns\Behavioral\State\OrderFactory + \DesignPatterns\Behavioral\State\CreateOrder + \DesignPatterns\Behavioral\State\OrderController + \DesignPatterns\Behavioral\State\OrderInterface + \DesignPatterns\Behavioral\State\ShippingOrder + + + + + + + + + + + + + + + + + + + + Fields + Constants + Constructors + Methods + + private + + diff --git a/Behavioral/State/uml/uml.png b/Behavioral/State/uml/uml.png new file mode 100644 index 0000000000000000000000000000000000000000..847a4e47cbbbb025042bed94785af42966b45f68 GIT binary patch literal 12470 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + order + + + + + + + + + + + + __construct(order) + + + + + + + + + + + + shipOrder() + + + + + + + + + completeOrder() + + + + + + + + + + + + + CreateOrder + + + CreateOrder + + + + + + + + + + + + + + + + + + __construct() + + + + + + + + + + + + getOrder(id) + + + + + + + + + + + + + OrderFactory + + + OrderFactory + + + + + + + + + + + + + + + + + + shipAction(id) + + + + + + + + + completeAction(id) + + + + + + + + + + + + + OrderController + + + OrderController + + + + + + + + + + + + + + + + + + shipOrder() + + + + + + + + + completeOrder() + + + + + + + + + + + + + OrderInterface + + + OrderInterface + + + + + + + + + + + + + + + + + + + order + + + + + + + + + + + + __construct(order) + + + + + + + + + + + + shipOrder() + + + + + + + + + completeOrder() + + + + + + + + + + + + + ShippingOrder + + + ShippingOrder + + + + + + + + + + + diff --git a/Behavioral/Strategy/uml/Strategy.uml b/Behavioral/Strategy/uml/Strategy.uml new file mode 100644 index 0000000..7c2838a --- /dev/null +++ b/Behavioral/Strategy/uml/Strategy.uml @@ -0,0 +1,36 @@ + + + PHP + \DesignPatterns\Behavioral\Strategy\ComparatorInterface + + \DesignPatterns\Behavioral\Strategy\ObjectCollection + \DesignPatterns\Behavioral\Strategy\DateComparator + \DesignPatterns\Behavioral\Strategy\ComparatorInterface + \DesignPatterns\Behavioral\Strategy\IdComparator + + + + + + + + + + + + + + + + + + + + Fields + Constants + Constructors + Methods + + private + + diff --git a/Behavioral/Strategy/uml/uml.png b/Behavioral/Strategy/uml/uml.png new file mode 100644 index 0000000000000000000000000000000000000000..269e496d6b7a26cafb35e03bf8e87bdd2dad6405 GIT binary patch literal 10852 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + elements + + + + + + + + + + comparator + + + + + + + + + + + + __construct(elements) + + + + + + + + + + + + sort() + + + + + + + + + setComparator(comparator) + + + + + + + + + + + + + ObjectCollection + + + ObjectCollection + + + + + + + + + + + + + + + + + + compare(a, b) + + + + + + + + + + + + + DateComparator + + + DateComparator + + + + + + + + + + + + + + + + + + compare(a, b) + + + + + + + + + + + + + ComparatorInterface + + + ComparatorInterface + + + + + + + + + + + + + + + + + + compare(a, b) + + + + + + + + + + + + + IdComparator + + + IdComparator + + + + + + + + + + + diff --git a/Behavioral/TemplateMethod/uml/TemplateMethod.uml b/Behavioral/TemplateMethod/uml/TemplateMethod.uml new file mode 100644 index 0000000..063b022 --- /dev/null +++ b/Behavioral/TemplateMethod/uml/TemplateMethod.uml @@ -0,0 +1,35 @@ + + + PHP + \DesignPatterns\Behavioral\TemplateMethod\BeachJourney + + \DesignPatterns\Behavioral\TemplateMethod\CityJourney + \DesignPatterns\Behavioral\TemplateMethod\Journey + \DesignPatterns\Behavioral\TemplateMethod\BeachJourney + + + + + + + + + + + + + + + + + + + + Fields + Constants + Constructors + Methods + + private + + diff --git a/Behavioral/TemplateMethod/uml/uml.png b/Behavioral/TemplateMethod/uml/uml.png new file mode 100644 index 0000000000000000000000000000000000000000..c557e8fcdb831339cfab288323611835f0cac518 GIT binary patch literal 8688 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 CCa9MH literal 0 HcmV?d00001 diff --git a/Behavioral/TemplateMethod/uml/uml.svg b/Behavioral/TemplateMethod/uml/uml.svg new file mode 100644 index 0000000..d06adcb --- /dev/null +++ b/Behavioral/TemplateMethod/uml/uml.svg @@ -0,0 +1,256 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + enjoyVacation() + + + + + + + + + + + + + CityJourney + + + CityJourney + + + + + + + + + + + + + + + + + + takeATrip() + + + + + + + + + enjoyVacation() + + + + + + + + + buyGift() + + + + + + + + + buyAFlight() + + + + + + + + + takePlane() + + + + + + + + + + + + + Journey + + + Journey + + + + + + + + + + + + + + + + + + enjoyVacation() + + + + + + + + + + + + + BeachJourney + + + BeachJourney + + + + + + + + + + + diff --git a/Behavioral/Visitor/uml/Visitor.uml b/Behavioral/Visitor/uml/Visitor.uml new file mode 100644 index 0000000..cb03bd5 --- /dev/null +++ b/Behavioral/Visitor/uml/Visitor.uml @@ -0,0 +1,41 @@ + + + PHP + \DesignPatterns\Behavioral\Visitor\Group + + \DesignPatterns\Behavioral\Visitor\Role + \DesignPatterns\Behavioral\Visitor\RolePrintVisitor + \DesignPatterns\Behavioral\Visitor\Group + \DesignPatterns\Behavioral\Visitor\RoleVisitorInterface + \DesignPatterns\Behavioral\Visitor\User + + + + + + + + + + + + + + + + + + + + + + + + Fields + Constants + Constructors + Methods + + private + + diff --git a/Behavioral/Visitor/uml/uml.png b/Behavioral/Visitor/uml/uml.png new file mode 100644 index 0000000000000000000000000000000000000000..e2e59c0085da2193230c2566b649a5cdbd011446 GIT binary patch literal 11641 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 BjQ;=t literal 0 HcmV?d00001 diff --git a/Behavioral/Visitor/uml/uml.svg b/Behavioral/Visitor/uml/uml.svg new file mode 100644 index 0000000..b2a6945 --- /dev/null +++ b/Behavioral/Visitor/uml/uml.svg @@ -0,0 +1,441 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + accept(visitor) + + + + + + + + + + + + + Role + + + Role + + + + + + + + + + + + + + + + + + + + + + + + visitGroup(role) + + + + + + + + + visitUser(role) + + + + + + + + + + + + + RolePrintVisitor + + + RolePrintVisitor + + + + + + + + + + + + + + + + + + + name + + + + + + + + + + + + __construct(name) + + + + + + + + + + + + getName() + + + + + + + + + + + + + Group + + + Group + + + + + + + + + + + + + + + + + + + + + + + + visitUser(role) + + + + + + + + + visitGroup(role) + + + + + + + + + + + + + RoleVisitorInterface + + + RoleVisitorInterface + + + + + + + + + + + + + + + + + + + name + + + + + + + + + + + + __construct(name) + + + + + + + + + + + + getName() + + + + + + + + + + + + + User + + + User + + + + + + + + + + + + + diff --git a/Creational/Singleton/README.md b/Creational/Singleton/README.md index 5148762..b90fcdc 100644 --- a/Creational/Singleton/README.md +++ b/Creational/Singleton/README.md @@ -12,10 +12,6 @@ To have only one instance of this object in the application that will handle all * Logger (may also be a Multiton if there are many log files for several purposes) * Lock file for the application (there is only one in the filesystem ...) -## Diagram - - - ## UML Diagram ![Alt Singleton UML Diagram](uml/uml.png) \ No newline at end of file