From f03c173eb9040f5e3b8851b4a5c3befc404bbc7a Mon Sep 17 00:00:00 2001 From: Dominik Liebler Date: Thu, 22 Sep 2016 15:19:18 +0200 Subject: [PATCH] PHP7 AbstractFactory --- .../AbstractFactory/AbstractFactory.php | 32 +- Creational/AbstractFactory/Html/Picture.php | 18 - Creational/AbstractFactory/Html/Text.php | 18 - Creational/AbstractFactory/HtmlFactory.php | 24 +- Creational/AbstractFactory/HtmlText.php | 8 + Creational/AbstractFactory/Json/Picture.php | 18 - Creational/AbstractFactory/Json/Text.php | 18 - Creational/AbstractFactory/JsonFactory.php | 24 +- Creational/AbstractFactory/JsonText.php | 8 + Creational/AbstractFactory/MediaInterface.php | 19 - Creational/AbstractFactory/Picture.php | 26 - Creational/AbstractFactory/README.rst | 32 +- .../Tests/AbstractFactoryTest.php | 37 +- Creational/AbstractFactory/Text.php | 11 +- .../AbstractFactory/uml/AbstractFactory.uml | 89 +- Creational/AbstractFactory/uml/uml.png | Bin 11811 -> 34026 bytes Creational/AbstractFactory/uml/uml.svg | 939 +++++++++++------- 17 files changed, 650 insertions(+), 671 deletions(-) delete mode 100644 Creational/AbstractFactory/Html/Picture.php delete mode 100644 Creational/AbstractFactory/Html/Text.php create mode 100644 Creational/AbstractFactory/HtmlText.php delete mode 100644 Creational/AbstractFactory/Json/Picture.php delete mode 100644 Creational/AbstractFactory/Json/Text.php create mode 100644 Creational/AbstractFactory/JsonText.php delete mode 100644 Creational/AbstractFactory/MediaInterface.php delete mode 100644 Creational/AbstractFactory/Picture.php diff --git a/Creational/AbstractFactory/AbstractFactory.php b/Creational/AbstractFactory/AbstractFactory.php index fd69448..85bd878 100644 --- a/Creational/AbstractFactory/AbstractFactory.php +++ b/Creational/AbstractFactory/AbstractFactory.php @@ -3,38 +3,10 @@ namespace DesignPatterns\Creational\AbstractFactory; /** - * class AbstractFactory. - * - * Sometimes also known as "Kit" in a GUI libraries. - * - * This design pattern implements the Dependency Inversion Principle since - * it is the concrete subclass which creates concrete components. - * * In this case, the abstract factory is a contract for creating some components - * for the web. There are two components : Text and Picture. There are two ways - * of rendering : HTML or JSON. - * - * Therefore 4 concrete classes, but the client just needs to know this contract - * to build a correct HTTP response (for a HTML page or for an AJAX request). + * for the web. There are two ways of rendering text: HTML and JSON */ abstract class AbstractFactory { - /** - * Creates a text component. - * - * @param string $content - * - * @return Text - */ - abstract public function createText($content); - - /** - * Creates a picture component. - * - * @param string $path - * @param string $name - * - * @return Picture - */ - abstract public function createPicture($path, $name = ''); + abstract public function createText(string $content): Text; } diff --git a/Creational/AbstractFactory/Html/Picture.php b/Creational/AbstractFactory/Html/Picture.php deleted file mode 100644 index e5f430b..0000000 --- a/Creational/AbstractFactory/Html/Picture.php +++ /dev/null @@ -1,18 +0,0 @@ -', $this->path, $this->name); - } -} diff --git a/Creational/AbstractFactory/Html/Text.php b/Creational/AbstractFactory/Html/Text.php deleted file mode 100644 index 32d9350..0000000 --- a/Creational/AbstractFactory/Html/Text.php +++ /dev/null @@ -1,18 +0,0 @@ -'.htmlspecialchars($this->text).''; - } -} diff --git a/Creational/AbstractFactory/HtmlFactory.php b/Creational/AbstractFactory/HtmlFactory.php index 1d622e1..ba44216 100644 --- a/Creational/AbstractFactory/HtmlFactory.php +++ b/Creational/AbstractFactory/HtmlFactory.php @@ -4,28 +4,8 @@ namespace DesignPatterns\Creational\AbstractFactory; class HtmlFactory extends AbstractFactory { - /** - * Creates a picture component. - * - * @param string $path - * @param string $name - * - * @return Html\Picture|Picture - */ - public function createPicture($path, $name = '') + public function createText(string $content): Text { - return new Html\Picture($path, $name); - } - - /** - * Creates a text component. - * - * @param string $content - * - * @return Html\Text|Text - */ - public function createText($content) - { - return new Html\Text($content); + return new HtmlText($content); } } diff --git a/Creational/AbstractFactory/HtmlText.php b/Creational/AbstractFactory/HtmlText.php new file mode 100644 index 0000000..a3764da --- /dev/null +++ b/Creational/AbstractFactory/HtmlText.php @@ -0,0 +1,8 @@ + $this->name, 'path' => $this->path)); - } -} diff --git a/Creational/AbstractFactory/Json/Text.php b/Creational/AbstractFactory/Json/Text.php deleted file mode 100644 index df69a4d..0000000 --- a/Creational/AbstractFactory/Json/Text.php +++ /dev/null @@ -1,18 +0,0 @@ - $this->text)); - } -} diff --git a/Creational/AbstractFactory/JsonFactory.php b/Creational/AbstractFactory/JsonFactory.php index 945f55d..a767f7e 100644 --- a/Creational/AbstractFactory/JsonFactory.php +++ b/Creational/AbstractFactory/JsonFactory.php @@ -4,28 +4,8 @@ namespace DesignPatterns\Creational\AbstractFactory; class JsonFactory extends AbstractFactory { - /** - * Creates a picture component. - * - * @param string $path - * @param string $name - * - * @return Json\Picture|Picture - */ - public function createPicture($path, $name = '') + public function createText(string $content): Text { - return new Json\Picture($path, $name); - } - - /** - * Creates a text component. - * - * @param string $content - * - * @return Json\Text|Text - */ - public function createText($content) - { - return new Json\Text($content); + return new JsonText($content); } } diff --git a/Creational/AbstractFactory/JsonText.php b/Creational/AbstractFactory/JsonText.php new file mode 100644 index 0000000..a0386a0 --- /dev/null +++ b/Creational/AbstractFactory/JsonText.php @@ -0,0 +1,8 @@ +name = (string) $name; - $this->path = (string) $path; - } -} diff --git a/Creational/AbstractFactory/README.rst b/Creational/AbstractFactory/README.rst index 69980eb..5251b6c 100644 --- a/Creational/AbstractFactory/README.rst +++ b/Creational/AbstractFactory/README.rst @@ -39,45 +39,21 @@ HtmlFactory.php :language: php :linenos: -MediaInterface.php - -.. literalinclude:: MediaInterface.php - :language: php - :linenos: - -Picture.php - -.. literalinclude:: Picture.php - :language: php - :linenos: - Text.php .. literalinclude:: Text.php :language: php :linenos: -Json/Picture.php +JsonText.php -.. literalinclude:: Json/Picture.php +.. literalinclude:: JsonText.php :language: php :linenos: -Json/Text.php +HtmlText.php -.. literalinclude:: Json/Text.php - :language: php - :linenos: - -Html/Picture.php - -.. literalinclude:: Html/Picture.php - :language: php - :linenos: - -Html/Text.php - -.. literalinclude:: Html/Text.php +.. literalinclude:: HtmlText.php :language: php :linenos: diff --git a/Creational/AbstractFactory/Tests/AbstractFactoryTest.php b/Creational/AbstractFactory/Tests/AbstractFactoryTest.php index 97f4417..1bdbd1c 100644 --- a/Creational/AbstractFactory/Tests/AbstractFactoryTest.php +++ b/Creational/AbstractFactory/Tests/AbstractFactoryTest.php @@ -2,43 +2,24 @@ namespace DesignPatterns\Creational\AbstractFactory\Tests; -use DesignPatterns\Creational\AbstractFactory\AbstractFactory; use DesignPatterns\Creational\AbstractFactory\HtmlFactory; use DesignPatterns\Creational\AbstractFactory\JsonFactory; -/** - * AbstractFactoryTest tests concrete factories. - */ class AbstractFactoryTest extends \PHPUnit_Framework_TestCase { - public function getFactories() + public function testCanCreateHtmlText() { - return array( - array(new JsonFactory()), - array(new HtmlFactory()), - ); + $factory = new HtmlFactory(); + $text = $factory->createText('foobar'); + + $this->assertInstanceOf('DesignPatterns\Creational\AbstractFactory\HtmlText', $text); } - /** - * This is the client of factories. Note that the client does not - * care which factory is given to him, he can create any component he - * wants and render how he wants. - * - * @dataProvider getFactories - */ - public function testComponentCreation(AbstractFactory $factory) + public function testCanCreateJsonText() { - $article = array( - $factory->createText('Lorem Ipsum'), - $factory->createPicture('/image.jpg', 'caption'), - $factory->createText('footnotes'), - ); + $factory = new JsonFactory(); + $text = $factory->createText('foobar'); - $this->assertContainsOnly('DesignPatterns\Creational\AbstractFactory\MediaInterface', $article); - - /* this is the time to look at the Builder pattern. This pattern - * helps you to create complex object like that article above with - * a given Abstract Factory - */ + $this->assertInstanceOf('DesignPatterns\Creational\AbstractFactory\JsonText', $text); } } diff --git a/Creational/AbstractFactory/Text.php b/Creational/AbstractFactory/Text.php index 593c4e5..60846bb 100644 --- a/Creational/AbstractFactory/Text.php +++ b/Creational/AbstractFactory/Text.php @@ -2,18 +2,15 @@ namespace DesignPatterns\Creational\AbstractFactory; -abstract class Text implements MediaInterface +abstract class Text { /** * @var string */ - protected $text; + private $text; - /** - * @param string $text - */ - public function __construct($text) + public function __construct(string $text) { - $this->text = (string) $text; + $this->text = $text; } } diff --git a/Creational/AbstractFactory/uml/AbstractFactory.uml b/Creational/AbstractFactory/uml/AbstractFactory.uml index a44e64c..224cc06 100644 --- a/Creational/AbstractFactory/uml/AbstractFactory.uml +++ b/Creational/AbstractFactory/uml/AbstractFactory.uml @@ -1,38 +1,51 @@ - - - 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 - - + + + PHP + \DesignPatterns\Creational\AbstractFactory\AbstractFactory + + \DesignPatterns\Creational\AbstractFactory\JsonFactory + \DesignPatterns\Creational\AbstractFactory\AbstractFactory + \DesignPatterns\Creational\AbstractFactory\HtmlFactory + \DesignPatterns\Creational\AbstractFactory\JsonText + \DesignPatterns\Creational\AbstractFactory\HtmlText + \DesignPatterns\Creational\AbstractFactory\Text + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \DesignPatterns\Creational\AbstractFactory\AbstractFactory + + + Methods + Constants + Fields + + private + + diff --git a/Creational/AbstractFactory/uml/uml.png b/Creational/AbstractFactory/uml/uml.png index 6de2767731a57fd874386805a91a94d0a7f35129..68d3a8be446b031e27e514d6227027d208a9fc5b 100644 GIT binary patch literal 34026 zcmce-by!qg`}aM7grqc*3IYNGA|;JMOLvZfbV|oiA|N0j(%s!TG$J6~B`q;@4>d5r zvr(_>ciq4He((4B<2~Mg=Ge2>+H0L_?Q_NXU7sDKq#%WdO^FQxf$(IcU#fsWXg(ki z>O2-IaK|xwof`!50m;04rsg`mJr|;?dzyTGy+=1{;&nN2bhtAigT=RMcn4ehp5HDx z8Y<2ma=$ult<^BDA8{aGie-wA)>e^tPvxC;8Ru;4TMz@bE)6?;=3khcMoqXYcWiR4 z6GE32OcP4I>E2~!X5uViIjkX4I^R-ntj`{=W@kEtU3D&IY6F&htwGQg-I#Po90ddt z2cZL(SZTn|J)fJqx0HaN|FO&yce|+j6Ngx!Ge<|?4CzZXiWn`Zq_|fon9v!GZ z;pvYC&(@6Q0UbZ|lF_Lj~-)xdM5R1Fe#$2JZa2GF$p} zMf<$TWEQ{|M|WdmxS^dJ}C;xO~JCtBoa6Ee4W4?q7TlRM;WbayL^LnX0`67mj4olrd%qpo-*Xrp2oz9q z=QcIn#a01b?v~PGmwFx9Av;s+Z5E&l$h7)vx4D3Vtb$R!HU3Gb_=18-%AB&Y5iX*< z6t5R{d}>?xcG0d`{t1{-ph?&3bK zm{I^`|8|TzkWOAjFm}sj&t&t#rX~^XMbt>{CC%Ctn+rON&-}%D`p8-Mm01JgP5<1f zlSGGqzS_H;4^PCVEaz@xvOToZ<^1qIwrz`L_WekFzkfqM(LlHs!O7w=YF_bcsnyU7 z!#^G;uW^?_(fiV1zj5%v#^`0GpfN}v0Th17Nq0Vv426Bi#3ObYzxHH(_*nO1mj$kB zJc!sKNXy~I>0aLB)BJ)^F2VHhjQqYnk&sEE)#HecF7(9qw^QEp!O->g4R){jIc3W( zb^!PUrT2J*bZYjs+S}B}4U~NfazSmc?)7t&_`w20F4^4qpmJ z1l?y=kLzoizT0iR;gG98;@{NTZ7)S~%sL>nJzVrc&ib)@Gf2^*9-#H$^AmwZ^ z|ByB3*I2wY#LL#e;JTwcP0*5Z&$C%$#g5j6nm;P_o%*rnB#)D;g`#>b>!w2L<;(@a zvJB?4!g`K;hlr)=ZpN#*E3$=%j@`x33h$2AFZuvX;g33qH! z?m%=seYcEd0sq9AbyIp~nQ`*vlDE7;OMZ?FIqjQw(VS-=Cruv?TU6s4Eu#l|Pfu}M z=i`P-nHKW8dsyulwRZY3S%-@1XCNX>x|K#52EV|!vzjj7Pt9=jU)RGkannu`dXO)( zlV+U<5)FmJM$X~R*Pp7KlCExBUT%CKmany;nd3e=@%_1c?B&NYY{EMplG_gYZqI)| z{MUfiCl^muS2owYj>SsT9-gE{Z*jX8lfdtM7r0ToHoh8jDmmEfveSp-a%+R_EF0(q z`O70kdY_bp>jjIP!tsgT$x#X#^=y$vxd=%niKQSaEy701!Kp#ar2)?*{@BE5&f)0O zD8_n&+!1dD+MFLkbrbPXOo$+VPGD_ z!=j6#Yi$d1^4~LGy$QOvIsBN}aAfTum28SLo(AIu%<*``MM`L)VdDC#w+G~YN)B#s zIDlgU!|;@&snDdpKA~LcXDyF%Tyk-K{Fk=i;+}{HJ|&)){dfYmgU*aqKd7A|s9@v< z3U|aUnI|D`41~JjWt{B34<*;I#y~9;UT-@iwyS_ zJCF}i%_K%Z^>c7C>Ks7}Vc6PQ?|J6)vf^nP-ayNunZqlgMMZ|ufOSO%9qUL3Rvx2? z^>AvEn~4v#f!@bLeGIxQa=^cE?QJ-cdu*Kx&l-L=J9NZJF1XM%aXR1Iw%0Pu<)r%= zbv>D&7cvUdL0uG0BSNDhQzvDcu+pS$>Gepg6DsK3? z(l;DS3e^w4MZOR}v_DY^OOJb!%TJai7i~Hum>6uGeQ3r@X><~y(zF+IWN+Eu&49=j zs2>rwUey_`=DpzQm=JczE_ui)w(w@hv#w7p!=?U-X71;hoN=gLECGxRwiejw(3Agk zX58!im5ELQ#nt{|+f)bXc>$AoSJZ0fuoAOI=D^Cw$8jWmq zdN(SO$%29T?Xbs)`KF1B`CjsQZ=>zCYw*R`&WRmJpX42PM8KqI`2zCwCCK795N(Ow zkIRU6!OU?7y0SMaCy%g1R~j4(C6Y3)&j=oz#}hj?%)fv34Kh0Q#2ndXRA+8JGA@u# zk`SAVl}33W{YH0PO|5d~5uU@*`tXPQ-7EQ@nOP0kFuDc?V(226B66&q{K>3`&G6X$ z7mvoJzX_?c;c>3YUUhz7Wj=Ym(p5{%2KAoD4b@!f&m9e$muX zX7r|0e~wB&Ru80uYQ#qF|6T?{QFy=-0s#4x)VZ*mE#iaC^kHeV<-hB3xT_w*1c3``YKkC1)Fgy1MO-+}zv_nsStq zAA~mu-K^rLHFBvBAEh5qT!t*d@p2AFN7@TlWIj%=ewg%0KyWeNPK#v@CXs{o!J#eFbUe*X9DT193(L?c%!j}Bg(oVY;--t;AfeN2t^Bbk zPd6S@)URE0T(P{ly2Ly%fN(kzsvNSAxpPS2Pvhx195+*pTxJ|DS%%ESJ;wUpS>AaKh@5PmfWU4w(yd8QE*8mrQ)y?NB7EM{s&_j-C}Q zFTe3DeqGT0XkDQ{(Oy_1oZ-rUx?rEzv~7^I1AXYsiS5vMCF&EL9LG;eN6}x*jr-_!fZ1YqHxw2|Oum48Eb24RbbW8$LF`Jc9#8d< zC81vP3wV&WJ|nME)l0^}AYPkL+(_~v=Frc{>TI_WKW%Mob93{AV1o+;EN`1vP(3O( z7viS8VrlHM9T%xMIjl~IxPQSIXj^-Gcnvr2AJ?EgAdivpH(i9CKqM_{c1LC0n?gczw8axb=45{0`>Q@@ty{J zsmeY5!X$DTZ<<0l>Mm%XdQV_wO13S2W^TMRG^~XRKkZ;}_h)0!L7aOVvtvzCuy=a8 zlPE-4xl}_R)ZfF(AF!7VvpCTGCigaW-)<+s${na{{ZJpYKRizC!ZD=d2Zs3nXZm%U{QzN8y z{Qr#m$Y>WUF4sFpp$mP@7q8pedpo4t^S-=#$UkX>vp_VW_eM@p&D`8M5;D_e7o{8! zedw^}6by+>+={m4-mo&q7s+!Wt)q`${ZVd2?@Q|Zfuo&+z%(sRNuBJnwg*HhOjAk! zCFpp*3pT^Zn2zYBd@Po!VfYoAonj2>IYq~o7S~-g@2m#4T_Zc=Q$>D&4xS$zPG_fv zC^N<@d5udy1vM$fMMT(95OVT3aUXVvNa_x3_WLCD%n-Oqf-A-@9LY@IAhbPJn5k{a zNaSD7qAM@oNMcLQW@3VkO zA*}Y^#}byRist$)#mwh{-kX#>0@EwWK?=hr~AqDW>+%nTBoDv z0do7S(b$-jG*xwWs2Nr?ph8%=DzfI@ZnssUTi4#W0XVjsE??ZJeZGjwEhQkTMqL*) zE*98nJYEE*GO6q1Q8uv)VaC|&V^yHN_FP{cM0Ry^Q8YYR06t_HzH*SmII!YeISzwF$ z9WKXW3>oFCsSnm(u40zVoCaQRgpck)O1@BNHNI?AY7|DCIoMNfXO7(d=n^b9`UN*W zIy!p~_nPwTXC9V}{r=&rxv{B)A~fa6VGj;{&Kkrdt4W`%BHWDMMWFg<-M%_s0FM2!`qUgWx>!0ji#zK%QKBF=Wx^oi z)aLh;jZRL!9J65Yll~?vCl?vecRMh#=((kH#A{)q#*Fp+Z6d|=Oi3flF`cB1K>Y0D zs}JG!xQ1~rw9k`>pc5MT<>MB`q*4|5L73sRB9vlvrYUZ#L-##Pstt_nEq8b+lNI7u zvIMj(-{G4VQCd2sbZ2r+rRX#j$u_wuh|g-4fr+9j5bm<`zYlya(cE~HshB%|B^=jV=iToka@JjbM(e-Cq!fs#-@=@u~b%iKGdZqZxJjgfNFX)0zw zMet;gqRc31^u9m6Oh`viD)9jUA|h^ad5zWUDzY!Uar+>oaT(4Ot<}vs2|09PQx6h@ zOiT8fZy4l`8L<4(T>J%N5;Z*#Ca^gIiDnXo**b9L;k!%ARIDYsCGYIc4v^tvuKg1v z7crOg3V|_2k6y78_@MzKhH9jK`{Py*QVB%~d6~$M1QwR^YUj}>XR%fj$n5|(Re=;I zzWVaYN60NH3}DpQ5p)FB zg9(gZ{qDiwW1>7}P;zv1v{w}4*vwK5{dcX(jOlMp>NVJn&72SrxTcd))Z}l(wy!A! zX;S|qk=;@X&iK7WsuA@uQToqfnaFcxlIjZ9Y`Mw2(7BTKxsHAfLJy`;KOkXn9+2^KtujF;@uYJ|ISGo_SVGotqDzk z-#|~#K)2}0RLAZDLFz@`!l|Tgn?Rtta0ev@ApHT2TCKVoUyo;(7~C#OGMeh-5vcQ~ z-SU1qar(OI6fP(7%{Bm8$!o(!v2_=a`2aJ*$IrQ+_;2?WC2emf83}aqxVa6ku5DEh zik>&b(lt4+4YP52B1VqDDRf`HtaqX%s|Ofr@cz~q`9{te7V1nx0RKviO^pTTc}^%P znX$5BV<=@eOiJLA-aQ(PC_#z!s}5bko-Oul>PNpDUljb-vYT;2h3!}MnAyj2;099@ z*jr;5H4q8J7P1VPgu62eOBUZ~tzwrxE4UfgZd=A{iNoj2=+*`e(`!-i^P z?rqw$M`PN-A^MEj>SPX0Z4vi;O3v*U-6Eb{KZcYPNe>DxOoJ@8?r`mfs#&;I7_FJk z?6g!1&iMMjK||qjQ?adoU|p-bEc)AX-L}GIQU!M^83mK)>>9tlEvlYMP^^VSlZH2Y zn6i5}@o^**)bH}j=(s3P$uV2bn;l-2Y2Ueim?)NC{8X#E`fF_~OrGC)R+h_Wo@VdI z6r=259<{EHe5!AqiSDZC481PbTulhhNDUP{`nR{)>Uv9>#3YHr;qND@qBoBQmOB*_ z`tcMzJS4QCxfXdPC&Pu%NyohjFq7Y!-@rs|WcDC-(`m5@i@T&-q4t*Oox4>BOG#1e zlDgYevpFR__R#meyF1A--|uS0+c-u`h-{Tqtv_*b4x$Wvf%a;<=jrj8?%UB^Hu{V9 zV3H}*rutXEn{K*AkUf~BCto5dn_BXPD7<5K+um7219!}wBefvWLV!`lv51(pZg`83@h$d$g+dl!P)Yj8;Y2~>Y4j3!6^Vx-3S5s5f?=cAb` zbeBU$Sr^1}aPwY!$JDo z^!Aq1kvjWT#6frd#zua3chJE>#G>!OiHR|;{TS5w7UzUH`=oJ>X&mJxno(q=DtDxp z?E~VhEmom(PWg`!uN1-Y@r^^{3Hy(}qv{$PHF(>deW7T3IdqmLX3^zn^*Q_gD``!l0{-pC-5Up>f5C%(95d(Lb_uD)Fb8v2R0qKY3$W_ZDBi zUdC!~ceA`kWhj2HCKz!p$?WIQEV!=~UV4AgBFIYBXkR;IlAQATXhqsP(73mzYgK{Y z^$w5Y{I})J>2l&c+(dSRTQh5L%5vcg#>xyY(`ji_Eisdc!!=b&x98H z*TGcmx!fmsnW&=h{N*_SZTIZyhXh18#pe<;kL-Mv`%kh zme#s2zF%bn<*%r0>2z=7aZkYLbU)#WP0-59#pL*&IdGtbL>gp1fyTS%kQ1kP1O62; z=w9_9+`OZIL?v*kPnuVCRtu!>(r5ULEh9Y7*hqJ(=0yl^A^cHZiP54eH;rs$ml$xx8u{Q5;v|Vy58^=>g09 znhU)wFAKrVbZlL{{3ImPAt8mYvgH*#ipTW~bX49va-x!xI4|OfFL)(MC`h%m-kIe#kMkqMeP226A78ep7R1TR~9a7rx%0A znwqjf@Zpi9w*lmlkpE`Z(WNrbw0M{`A`Bp)fb|H{RX@FHMd$KN@F@5E)C5dpxZ1Q@B1Ap zj~wBS{@flx9@$kwUtwc!+&vH5=XxxV^AQv0$t(L$iTj$lTdy!OyVD}qq;^PD@zPjA z>(aa)eu@7!%>3lGgtU%JP~&26_$nvV#*s?BH&7oXZ5(@+Mw33>yWV2Q+TF#u zXv&ClD7srJU!tsJdYiqXZWPa3m9Bo-7y116l%%*d*xNl0Gyf!*ymfX!Sy|T)+ZNie zv7cs>_3IREnekk`@VtT!xDcqP;&${4amubvCm7PYIbKYsrfywt8$uJ@xKmwXZA$L((gNb>pkn>Be;5m>p9pbyYkfR?9+Q#eDhfZU}1F%VBX68SW}{HwX2QnIFDpj z=*HYeo^6T5o!R=E4iD9iiTfYR=mG`-fAV&O`%6Jh-a4>{I%$M_9$^T#X-vCfbLHLO z9(Q=*munQ@@U{5Z=4%Nq9@nX%T9_%XZ}BbELJbX)T+sI%5x<7?N^e&y`_;|uzVW*3 z{d6Jqaw8*EHDYmozSWDlC$L$d>sJgudl>SeSB;jC;kLntu{Akf9}9)`C`EH>bU^xG zpu$c&STvfml#LRzwAnw;C5xG;t$1lYD`Otaf<6=qI4I+$;ZF7LXtOU!FhkIXmG83% z;(aGw&?o)2d`zX|Eo{7 zM&@nT*V$})guRuKW$?S35lWCob+;0E5pOxSFD?K1i}$wal_4CXMtQ$E%fa`-Bx^S} zOSq{jni=+%wH&J1%4T*vIx$iGk5?Xwr znxso39-Yp7M{DDq?PDLwQ05JJyOrg)zF$>x*;Fqjqz?j*)D+&Kk>Af2Gqk9j{d%m?1+Sa*SQVImrG&cSm+|Lmfj2=4vDFTpA6U zs6Wq|<>y!s%j=K3=iEL^sd`Dme@9%E(xINiel)xA5^tmzMn#KG#?kSLeu~I{@ANM5 z&oNsDzone4%;6bngSHHeE%|V|TXd!&R=bXjyiMFa3(3F5fR^ejV4JOoA>?QJzWFh= zFn&UPivmGNthew`d_?|9^T7f1%}CNvN77}T@66-d*0JQ#lc3O}^TzoA6Yy!*O3|Tx z%nES!N65kIbz<^vdST?JU9`Fz)ie^#h&!a$p^ZLR;u?2k$;{g&x5d_qZ!_2ZJ2H4d zQj;1l5|vZy3o7vHQ#K{(!|%eRp$V?yr}JDgIb{5@_m+pqGfDB7j|fhz zbfqF*SJ<~$uuB~_E2HM-W5@8!j=QESM^W?LTTk0mkSuUA9#suOHG9I#7@#OsPYdkw z7RV)O`@?cpddVf*aju_^cpkczpSy8e_lK@$i_Lp-%USBz6(NrkhO-+wkhy5dw`W);FrJb-4#G7|8(skBcSJ$SHR{q9EhwMwsw)JCt&3U!vElUL_D{?Cv zx-m!J@^byn@UYLdd>LaCe3dE`PdKY>uk zYbxE7@AC%@zCV6eH1bR?N4J#l;stOX(VAD3@}{sZ3>`;{&tAI3l!UqT1{IWh+iPu03HqLayUV~v({UK`6EP^E0ys3J^vmj~Z^B5&qk^;sYD zbn9@ss|NtJ(W3)Gar7kbp-v5RL?6VYp@TRYuMGEfye;|kv97n zle+q<3rfrRRl?u1+wm3kjZ|Mm=PG>af5Xif7gOG+OGlmdT{Q<%#`N^K-ab*(>$`>U zIPbh*pmIw&i_Khxm8&|l9z85R?LgC^a6xiI&_mwSA(Nsazq-76x-6eOU~h~}=BYm7 z>5+lh#jnlhGmv`WdF|o?=3uZE;&qkgO7G8MrHGfAo&rwK0BHm(h<@$FZ-@iilJICU*%}hmnny`Rq{3{<9 z?p5TxOZYM9g#HF(nsNNedItNsy++-P>Oly^+&e?4-O6=2OW(0+vc^AXVhl>YZ4|1AB_Bmer)KkE74Ak+}Q4|C`L>aCFdr$q88SSF!(=GYx?X61nr20sod0aHzjb{kNP$5ELI; zEFfI?Rr|l?yyx@&SEGP3|2=2yDvl3r*YwQ@`end>%ly03{vUG!qTpW!{O_Eozq%LT z@qQcdkDPqquzY1lg9EU}P0xvg)U*8n7>}GpUnr^2ZiQk}$i9-;le6{%Niqmm$$l#Ic^+~R#AKmGs%U)(+q!>cA%`){P zdHwWYVUki%?hPBr?--+lO^mOkrDIKmhQ%9t{_XkPiN>2Z*+vhPL@onE@X>7?tH^kX^G;I=4)AxKmn0$0Bb=m{ZzE6t9d#-WwT5FoG zCJ(;6F4jeKsg0-Qzy&#(!(8m|Zl=Uy?CW_ozm-B=w{ykcDj*(kd!CXX+wYw4L}I5K zRBtWv_{Xbl{oVYpCDxQjf&f1%Y6E9i)2z=}s*hbbZ9YGMiyI^`h985k51COK?0ZMU(P8`;`b1YApscRXg@|tCo)as4ud;n09 z-(7KNC8jLO7%6sINCUSIP(d*0T&o`{E)g^s?^KG+SUgrVI7j$tdLbTv-*NHcKl|1n zpjvE9R@nC1j#|vXq`W$5BZy9=Q4a_UWj{UXUa8W78b2fwC&pLRW566LH!RjbL>=^n zDj5~LBe9YX5>S&|`QTtvP(>Y9$RHI)Vr6XIR-rn^Gyx2;hB8cy#2}fw;?)h-ZNorY z>5jgN+!0T7! z&MC=NQ1D}qnd}bD%I(F2r?OjvfiZ$l3vR>SOBKI$(~mamDEt&k-VPD0H{ISrYwg^+ z91;9<(WcFrLWD-qJI6zA;eBh!de^rbEzb-+d)}*#^v9rHMT(&2rhU;czlwKDX>(}^ z+n_(wFt4@k0eNQ)p*u}e7~p*da8C`1@jeLHv5$QI%4*~4MK+ZfB6Q~6(uZ#0%O<)` z;p&(Ts2Fi(f!Csk3==u2xMd*`ekN90tb``E$a=Egmeqsd)@&}JZ_EQTP4cUiA>}Vl zz(hOwwW}&HwR`Tkr&i;;?GEcA@gqrrfsR@LTR6A_)6SHq;%+Qy?Bpeqt};8#lF)UT zda<0p%_--&;j?z=1>OXGXD;GXe7Uo9D#!BMHV|V-;}k zW|T~{yb96>5FE|(!H)2^Mtd$E@=Y6kkoV1RM@F{RoyNR2eLe2^Ot4=T9ULp#K=yy` zayBb%(k41l;QDFqeHTt?$J?OF6S6JDO{=kx`u4_g+~_u{+0*Fnyg5`VTO>v`U}@(i zNZIgFUwtl7O|kh4*XNr6J9ubZ72ajN3p<4K_mDPKR1}H{T7!c(Dq(BnbFpa3@@`GW z1o)~nyeWrpxbda3H-+Kz6P>Ms#%l$$6@~~WA}{qw?jucjO7-k3hx8LE(A+9*tpcQp)5qp<@}p zu#r*Jwp5_)=IkGiUNz@l?tJtvd1I7pYouyC$9MfjO6H{OTuR>&s7WnZXtD#wWb=C;M2vs6cekf7A&mhI{~129FN!gcxHlB1N^}QMj}+rJYEX6k3P?T z+i=4uuFU_TK{+QucY0|s%$)< zESOpMi3wWy=<48sjptcMJOI2mow7xvIO-3hs4>*P0!YGM27n|yPR^7HXQHmGo`|F^ zNh&DsdWxCat7{D@Y^oS>XDRaqCA`*<`VP}31rGJu6)yqEpw--5SO1;2J#KEPq~Kw` zj=Ae_1k5{6&-ul2wB1_rhEA#yc7LyGGm>jzuf#bO>81E1cHIeBR6yso z{rq4Fw>|X4JpeoWNNCkua(LDmS$ps-55W|lB&lkn!05BdOW9$`+d+e~$f?cBv-qWx z`gWMS)1WZ?m5GVTt_7@)Gtgt=6Cc04V|P*#^})BIM}Y^BT4f!gPn`z3+4ch>H|$^~ zYeEH&liL7yb#a84z@qtGm{C*gAJDLau#}WL-+l^qpmuh7_wLGO38O z=Y23Tn3+^me*BKe-Ep~Jq*#ojD&hLKoc!f+mgM?&d@)aX)TE@zE5^w9A zis87P{?0I(5WOF7i#|9%=xnl4>?xpaa(TEH8F8L{qX&TCr z8*b5HL@lABe~e1BJ0GTo#K9|uFB0!~RBtBOYiQJQL8K@&Ll%e(=;fU5iug~PqBtgc zy#4}W-CQ5eG%t)cvW6Z>8RoU=){*X=I-xym3IjIVROZcYtg@Niv0eeYJwmBqkJD$L zf}p!l0tGeoiCS5??9_CjH#I4V^`v4eIC~I|OWb6Nn}uh!K1vGMyJdETWct_D_2jO6 ze;|6rL{q7Yh+6u*X$-@H#eS63HtdlXrR8{1S&6SNWOHY=KDN*}kYX%Mleg(P ztU4;jISjO|6yZn2$X0BhpX}eh@?)4@=Z#6Uti}%r7fCV)yXgC4cJ;%X@0|Kif8r2h z2+tV13A1kYfD2&8<};gnnhFYGW|WFzmq)6Kcjerl->sTm1KyFxH-U7(3-dgOZe9?n zIu{Q!4Jgj@v^7A6?y`5VrB-2WE(^qZ8mmtw?w6~muEpRvN>w*ok@bM5_*G3d7I*|4*!`@uDHi) zFERgVsfp=O?~T-Y#jZW9!3#dWmq-K*Xy7}XQ0wNpO;%3umcIMo#b#&b_4!8MAg$Hc z^>9&A&Qe`>%}=a|Dtr5+95_o7nogN}>7BYLx=ib1cK?`2_e51%xQ=Noz!d|7q3>2= zDHk)sb*#^A9TstMpHnB%U3Tl-T4Y#kOnEX*J2`ZFd;5J%VvoZ~aj0oXui{+`k0R63 zVuh}Jlc~yz;NU?Po5NXq4b%LGRbw$V11}}LN~Cb1yY*k>`V!|`isGQgegf>V8ETV% z^|+5@DzXDQ>xQjids~g`sS%<4SGOmtmzD-i?>$Br_5?5_KB zPS{K;J))Z=%FM2#lTi1=+qAefiWu;djFf?cIE=|=r-h%!@&lvF-U0y=;F!LO#V(5T zfi?fVR4L_)M?N;D1h_R=bqx9mBWo|whuZfRcD>}CYwU3okG&Kr{5SquL{GI?jl~>> zFE&dhsG5#AQx#g^b+U%94~Pz)dt9LNsuJ#erDz`fnB5a^7l#av*!ScLkXTa@C2hnS zomy5pVjA54!1GEWtb;<-dzMnfL>^{$_6o5G>A-@;-}X{}+jmvEZy#;`X64@$%aIyQ1_Mz;;(@f+i8Vl8$%84u8cgzeN zA*Z$z=`Xm9eiWU0gq3vAVy8`JhrPVnB3)!+?q-81w_A3|+XG$q3a{rc!&^MAcCHoX zojX8tV#s6w)oh>O%kp9cHg;YX)%F=}*%etRBcr3ssqU-sruZ}?YdTxJOwb8~%;Alw zIVJZudYkDXaAJoZ zdLURo4^k+!U{J_aS5blAq4==7qPNoJVQ*eJKgl#Jyf>km?=)ik;G<0EHB7qplQPcI zdMVcBy9Aao>YPNS3n3pHeS$t{HAR61+zI1g?_02!fNylFdH9A$V8xLDqfK$Kic#UX z4qMjg-f*VWq(xTvwHLX*gfPdI+)a1f8j`nc7RZlHZyabiGT3PfrvhKUJeuegyBZyv zN$tEt5S;rSEHH7LlAzP{*`*7m~r6lD&SJm^{FE-JqZ)@L+9n*3QM`vLg z8PGF55aGDQGDY@D@7T^A{O8Q-DvQ~c~+;zny=nTZgA-PGpS{ZLA;tdO|N$u z*98==QZO$w}Wh`7PKZU>_$piJ6j%%8*2)rtVCOHKf<}D|Ja%& z$(D{U4VnuE>|p=y2^9rz^91vof0;;sa@)G+BKddxBD4U3ky)8<9yIQY>?K2+dQY25 zuXOTsud+{fg_fSd^KH1W8YV?cmTKG(QOMa(xEfeacBtz)r(co52E9{kH6?`u^8!+n zYBD<;MK1!0yxLv>TM74{URY^UB-QCXJ@#EhV#%`vix9V@-zNHQ>sRDM( zUuh*uGuM3qpi$)nR>YhNQ9))4L(U#s`T>vtH zNCuzI(%_1VhMXW~NQTNy&^d)o(iHX|RKQm^AM_Ud&LBb4M=O2vdGM+n0U$Wix&ohp zDgXC$GmQVP5*}gw_w?VaXP*4`2a3|_{ zo}KKV@W}CNsQl8d6IUF?*>Cg}!Mi$`c_G-|+oa_-Ek5!w`MX*?Xexm_mEsstRff z_hH}QOa9&zqM906YyFkg{gV^-b$(Fgj~%WIfKiinPZo5NcfNir^Ic6uma2_1nzzkS zp5DA*K+{9p@VyZ5F)@KjuL*l1mTGVG!(WgkPW3M0>_0=6`VD_WmgR_lLY6y?{{gbR zspz-mw6(Tq>mk+A=?*Eo>==X93qBsut0#Ab$t`NWCl|pr)|+g3<*fO8bo+Hqeb-w; z$=9+@$IU`K{lJQ~ti5yC91Tzx9ZJ*J#`VMMWXDAfBN@H3Q;ZhW_;`=Y*>t;?Z6oAU zOU@j4%jqxc5{@^Ym^c5aSDIip5Qtz5u6GbO)GOUw0-=cGGFfSG#7AYuI{x_}^l-E4 zfx9jfm31Qw+U}vt!Meg)CtucH^DOx9>kd?zgSDzY`6uix#Tn1E%*r&s+~5GOhvX*5 zL6fKH!^QMFH?@^oIny~@ZbrsmZ6!c6i)|x2UvGiHxnwXwNatRi(E_*SsP)Pzclohc z@ZYec!}#%kh9z2qs|y=-;w#*5YArcABwnIpXHNPjEh#5Vf5nDz0XaxO7I2m-epCi#g|dmNEY8F+ zvE~DUcG~Oc>|1NM(NWoG_}s2*!izry+}%11XO|41vm|iBmKzmEA|!n~WJ;B%Dqo3= zhTI+$!7l3SGDT{AOI=$sG0%VTPUCX|i%k)tM98H49yuB6p&mlyeEmd|pVSKxJ#WD) z7nPzcLV8YVoWo@EeatFz==1z;AzM&@Ui{8cLWb#+3VA8rf|+mNgNIP*%y)2Tm&U6} zAs#jnQCMjfaQgDc2kctVZ^)_Ey%e%iQFk{3zRCGVybBa~&boaJ%b`vY(&ixd@UDRbo?L(fRq>oQ!5oMP5UEVUQ*jqWI{#EH1p51y5M@yXPYWu(%E{n4z7 zV=!!EH;(M?X-o*DQB|M=j|W`cn_<~ZX~W|iZEoDT9fy1Ad%F)`noea>KLd47yiZPL zPO`9x)1pfk$3b%~<7!Obtb#4^r_PL8xdbw?S%S~AzA*NE08^9jC^XlWy7mGMIDes) z2Hql(xXbHu0OsCZ)Vj_T;uO_Mi0rTSPq38@7p`~MS=3tC3v3wc)0I@HG4E2oYznxw zwk$^;h(X!kHo!2If7zFO_Ss$HKzpaBOz|q`>+3=*4M;WNbwE7jp@7wiy<#=vnYCKA zaLN|>3kDXui;_UPsPH=<3Htpi<=~@j{qs*YQGCxl{MnXqYFL?*`E;w07yTr8vs&uZ|yGtk{a~}fGp(s1weZ5=M+xN z=eU@5CWxG%>c>MqNFtT(&_iqmA{`l_&vyYc^`P$%MF(25!t|mvxNFEj; z1uYFy_H-`S?Qe`96q>MTkj-fw^8#n(cuRVr>Csq7Pv>OLKhA8<^FzY)7kgRBIaw5) zgM?{MgZK`Fn9F|ToIRovpvx0Esc*qkd^fk6xEU9{wJ&Syqe5+B{g<+Bep2iVyI2E~e(mLl0+RNXH)1|R&$ zM~=#Iog!3iMjJ+z7p6Zl)jH|Eb;zZve8k21&rw0=iS7;e|H&@>ZB>VItBCA=wiNB0 z>$A&AMGHaOf;9ja@BS3e3i*`ehuK*Ol09QGYA)*a^2e5by@JT;Q5MieYa_S|PCO8!uSbhHVw zd|y7p)4>!s;y%;9@sHke{mk(^A(f<9mCU>-UzlE!NEoGMFxCP-o;1XgI`R~oZx$lO zHwIZ=aNSB#EJn(J{U*h#%c{O>k6SEkvdD8~uQrr(kypLc&#Rpf3FaSyNU8CIJ1{Dk z!TV>5i{+M2k5>!5nyi-`|FI?s-$6N|o7S{_X76+~ET?({-==?0=wUE?V5nwW!@K<& z9tx>wL~8YG(ki}o?pv6doD{pm24Sdjgo3ZEm&9M2ZyqX1$@xKz*LNkwEK7ts@Vw78 z#Y_$ga2(irBpsac+}ipzr)tM-8DO7p>w2&3j>;|T4ntIbVAfUsIv)b@P);+ov=O zM;^NJRU>lB<^d}t2WC_AhyS@nXhAiTG&%9cE55>=t1g#vApTOfS}$0rExj0FX|x60 z)Zhohs6>C!j%A1&+7a*G%HYQ(2k#r&@%GsPovAuNJ2L;wy`ddB9{i>q>E7Saj?xjo zX~z!v8`|+c-VN=T`uK)+{6DR|by$>L*Ec+*fr^TRNU0zV($WahDcvaDNXGz!prRlk z(lvlEq=LjSQiBLcHw@jKL&s3>IilBn-N$ps^M2p!A0ETG&%O5AYsZTH+v^P5eWd&w z?Kp4zu(^;g>u>wGDxunxkAuY`=zD0VL;OznnSPkTT$RJqZDmhp5rnZA{A+|kcDuvO`8lBzjVN1|;1kUQlUj9JW72BaMyxxi~4`;_~ZM121N ziKoo=O zw6y0Othb5Zx3h6{UJd2HbwWZHnsG9ga*8Y(%1OtydhBnIWSQ++@$hE0Tc*m`}=p@u>jR{hfheEgN zHf0hgE$y+^+H_9OxY(ghA-)=5H)E9zeZYE~=|D7v81<6R!{H-{357SWaNMl^Gw6?LVGEn!1Gv-QDg!PUNEe2>QZOjGoJ)~zNN}h;Js^dkm+rG=uC@i&_{cX!>o3$HG2&#T63VwjoDXL^bERQ1!e&JnR8W-D69;djUD!O_7Tj|BGAsdRbzr!=Z}F*3!btS zG)~-05;kgRmn9qCJCHs5Cy&D{)Gxhlb4gBT!!T#FR#peVr5Y;Dx4flLy257s(RN{s zW}5w}*2Lzg!Ao`I*ozBKDD`A5;NC9rFR7btlOvy7jibEnQ1>?QmHN& z&5B4ZqEvMcLv%dvbFvRHK(O60?!Oc#=S`-09P@q|@wB4DSYu+8>5aXu!{|O)zGm|NP56=M%;84Z5%YQyDSQDyto(8TaoiZm z4cz)Ug4ZrMgwgIE`9soIN;^M6^)q=?O_( zCHs*z`&t7?ffygV8bD)pp;tj*0jyj7-@I(VV7V9oRKcbz1E6s>ND#JD0Cw!xpEv+& z6Jx3YT*9>P{)G2G1)&0;a~IoOFsX)=zrCn{~gZ&nhs#*9|Zqa>wK{O zTM;%K^H&bPqE99FqeK6HyB?`BMcb^664_j+yWW! zfJqeq3aP#>5&EwQfBHkX;Tpc0U!>STT!R0a6LK4Iwr#KvJ?Pl4(dHl3>h zoaQSAUQGLeg||�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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 - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + createText(content) + + + + + + + + + + + + + JsonFactory + + + JsonFactory + + + + + + + + + + + + + + + + + + + + + + createText(content) + + + + + + + + + + + + + JsonFactory + + + JsonFactory + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + createText(content) + + + + + + + + + + + + + AbstractFactory + + + AbstractFactory + + + + + + + + + + + + + + + + + + + + + + createText(content) + + + + + + + + + + + + + AbstractFactory + + + AbstractFactory + + + + + + + + + + + + + + + + + + + + + + createText(content) + + + + + + + + + + + + + HtmlFactory + + + HtmlFactory + + + + + + + + + + + + + + + + + + + + + + createText(content) + + + + + + + + + + + + + HtmlFactory + + + HtmlFactory + + + + + + + + + + + + + + + + JsonText + + + JsonText + + + + + + + + + + + + + JsonText + + + JsonText + + + + + + + + + + + + + + + + HtmlText + + + HtmlText + + + + + + + + + + + + + HtmlText + + + HtmlText + + + + + + + + + + + + + + + + + + + + + + + + + text + + + + + + + + + + + + + Text + + + Text + + + + + + + + + + + + + + + + + + + + + + text + + + + + + + + + + + + + Text + + + Text + + + + + + + + + + + + + + +