From 66b352a4d12f1009700ad4e2fa13f9707d4ec325 Mon Sep 17 00:00:00 2001 From: Ilkka Seppala Date: Sat, 23 Aug 2014 20:13:47 +0300 Subject: [PATCH] added abstract factory class diagram --- abstract-factory/etc/abstract-factory.jpg | Bin 0 -> 58082 bytes abstract-factory/etc/abstract-factory.svg | 131 ++++++++++++++++++++++ 2 files changed, 131 insertions(+) create mode 100644 abstract-factory/etc/abstract-factory.jpg create mode 100644 abstract-factory/etc/abstract-factory.svg diff --git a/abstract-factory/etc/abstract-factory.jpg b/abstract-factory/etc/abstract-factory.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7204c4cf88b6d00d07b82cc387bf46727b478c45 GIT binary patch literal 58082 zcmeFZc~leWzAhX^ML>wiBq*dEQ2}WML?NbHQBe>hPACXzMPw4wwjdEgqB4Xzt*CT^ z5CJhFU>cbOLn0YSD~-%VK*`jKOj4x~N-}V(&+dKhcXpq>zPrx-?^|D3wX%3qsj7GS z4bSuZGWTXqidyQm@4!CPy!rD`-y?shxlbsgUFV2rLr@_o`0e?TTz{PF(7@W+u+=<}DUY2^(3b@tDG%|q$@=aBuk{W3=SHGjbZodvpo z_G{k!*grdNykOy~EsK`z^3^?a$z=7`>x)fy-z=(X)?4Fr1T;JQW2e6PT4&ih=+CbG zN6-GxI(FlK)U*HW*#GX=0BVWOJY@28j8OnetKCqXj{4j2WI3ED^vkPHwRZ;4B+6*_ zcRdp|Wt*o7W}|M$g>8aaql_odOYbleYaf-QY_EM3)tmSA!L9x0F0YI@X32R6p|#1> zMO4|JXKR$8#TkF4k?f<{jKgX(q zXcRGr0)HaK?-Fy`mH3G!3-4a-%MY58aqhs0Z-X?9_RmFM*bMj9FXW%uZO_$@W-hF7 zM)~eF{kMnTIz@b|%3&eFhns)!d81g3DK$`qU0^<|tLtM27JZy)C)$*RC!9OK%~h;t za{AQUwLfls`M!F!qVfqwZaF9$yrP}V;MibV<+>?`C|mWKMzO|}XgPZE&!K)d3)fUoZ`F#Jf=SwEQUTiplTF6hX7+uGTm+_*7#>8E%IUhS zD7kya`VRA{(c(`MzPK)KysxGEb;iEub-io%Ruyi1s}rj=eix}tcg;iwL{~OBhx+yy zmFHeb?c4`3v?%q?In)PzPBaucftO9rS6_mLd0dNd%p0uP)(+y zarPt?k7CzLzBGr@&yn?DOk9XY;WkU4-t5{+QsnUyG=3bDR@{fRJLf_-8uPz-gGXIH zas&C!%Is4yM3d3kee_^z!o_*h!~Z9vMoyDq;0@^ULAkZT3yWD%<|npo1+3r?nf0-p zeF!|v(%?GqxG3Wy!@Fx7OO)HO7QPA78rJvJKH6NNb}ffr6PLUpaSsJJ8pAQH8bd!H zZiAe%gWBxH(NWui1fgLhj|=9gk3v-5qy-+FIR$2CNa<+}vrEoUFEry#r+3V&|izfvQSRh!g@!)|lhp6KL=?El7Sd05@ z@>c6*A3ieV<7dnx{ewPQtY2|xUx-XhD4eZ=dUjRtv! zPqlNXy(?O%unssghx&OFAhYh{ek>ui&!JEhn>o~%g+TzAt7O0%A<^NU8dge>liMd| z>BtFx^+3!ViiSNUb02Isia7c*k_j_B>Y(hz`#y5KLC{-4M*u0G|FZ0(lUL`yybNbh zZ>NC=%m7t_*`^QIWh`rwyTDCZU{kWKs5p#b+c6y#)Z(z_^mFiarNf8(Gx3+MM%v`c zeQJcj^zHgus6={H$EJcTwp*V(> zTv5-VW~W=o`|6-4OexxGL}FN5>B{FWC9>^U{v_L=zVZAcUC~t2x8b>4!u;=+oXs{A zmKHwf`|^9T?RSp?CmfCayS_*79@>c>(Ym}K18|uXpMDr_RJ_QOiO+zxboD8aD-lkHGDB`7dyb%do8Qm}w~V=8{T+I@aMoO?O|ZyIK^Dp7y|?~$_Z*V9Ff zcZ)*g-gc$kf7F8YNw|Hz+;ff@$V^|rZjl4DwyQ-1YV#@1H`-3h+HO$>*@?eX8j2`hcOu%dk7ei z{AUClTRML>D2?St@;KT6p06(-aedQSl;hi7%&pDV!*;)5{7RefD;`i^K>R}PUg&kT zV$wvtMDtj^N{(Lf5(1>jxk)%zm?0-5k$sERK$W(=OTC$4!amq|x2!ze|JPiFV&hR64WT-mxdw2xFpiZ< zbiU5qR%L%BXj#Yf%NmW7C*7|*q<6aM)CK3j%?7_Qxjhat`?0Zr|5$-s6Bib2`z6e6 zX8fw0OXF5cu03Js)Fi!okuobV1;}})8P)obfGwuN1*h-c@`uKABu7xs^B3Qmp($}j^N%^YiJ zf;-_Pzv`k=O~muNN$1_)od=9Z4_u9s8QQdq2HqEzEvhWzGhtVu&9~`aj)1hJ-=600 zzV5Q3w+rjY9LtNnfwfaI{%?%W)K$*J*E!VmN1YWikvgY+-W=-9FEXlT%Nud%=}F#83rSJ$Zdie?#%VKcw2V1sscg+R1bdhS4e-vUC~pW03Lgho&B^<>gY?A|UXPgoj(!=S(f<^Z;xCuU${C zMNgu;=TK?)(ZAp}Yg-fLOaVHR{zs8@@QA#LQyI7wzL9meC{ z&7t&c7@Be=0rsXK4smh)n<)vP0$w9$rDJNZo_Je2JbotR(OWoah`jgSNjOJoj@;*L zd}}12CyKhXu(SluXooYRVr^5OoH;d|C@?g&F}>BYe&qh8AriTz4G_G zRN2tT7g7eku5@H^&NRRA?<93I!5!rg)v~L_QIMCV+?VXP%IBH z6(z6mw6UkDei&pWoABpQgTu$W4wjP|8A|8f9pPe|X)stJ;;{xSURZ?+(TNnNZuTW< zmjBq%?uqI6WiQTdI^n~wt8!XJnEYjYn)T9HTI51rb5 zDmIQeK%1eB%%KFGNA8UriXP=fj~>lQ8tKVMl5KzP<&<>mc8Enu#sOxD2lGfl#1G|O z4>om`Eq`6$^<(BpPtqO5_CpRWzPG|#e50H{70{E2bEq?u#t{-sG(9V?U6jvV8UV*C zTFDWhGEwe`vJMtl;qos%jIcT=Sz=Enx@H@XW6d7=OC~_!-5lAwt%KgAy9wv{0&#fc z;+`yVVCL8xqaAO0K@jr$Z!7OlQ7kuW76hMdJzM=6YX4%ELTi|lJbM9>K zOxk9)Lsa>wo$Psm?Jh8h5q@_?*16G6UR3E6!+;`YRJUiTcY) z7!I)crG!-YfiJ97xx$6$MdYw;16>~pZ}P~LC6L4KZlU=V5mwPbtItO=^l=R#E9*B- z`TcX`y36;~nwR+B@j7xV$E#wUPpy7V$+p|KqIOqqx?M_4Dc#XLaQN0yuO_RJSIH5_ zODxPb9x2mL-yB^gzH!m;!SKGyO`Ujo>4}29q(ctsNYy&6FwS%QIct=%Dnn4H2bqm? z7I$OkmA1)%>smcHuxuMWIANjYL#2GuINUF8GL0Q5PlyNv_PbSzm9Nuet!XuXaFB(0 zDrTekX9wRZ)o{(_BPI% zp5oq$XvqTDj$c>bm-FU@b_4WEqTVgOXv?PY8i6D&>z}(7_m^#{c3B1W{zhCt68=ab z>cdH~lMjN>{xfc0>sxYHv90C8w>Y9p#u4N81b$u}&<{zpQ_?`XABc z|2F9VdIonrRa!e^^#=j;naunQpB-xXBB&zo)8vGJ(+^qB9pQfde^Bc%FI>B#rgu!V zGmIEJX9q=B?J=C}cMnL~7=LvtwC(v5H3r7ap%$8eeiPPFNXWE|+I(Of2&2E5Y@wRr zY)N!}BPN^e2r-mbpvj3?(Bcs6!6JVHiUdA7NGyv_nnR&0Tny$=^9JEjKU4F6hm%8|jsAQ<`hNS7*1|LP-sR&X2Ogg)J)TJW#3Ucz|32r=@>jk| zBk@;X{ZL?atP1Fx{A<+cuJ5>jwuy?JLsieACSp~DNN$~oPeqf&iU$;X*cI~7>LWgJ z;Wo{kT$#OO31!8{z9B2nVq7GfOdZ+=q5$Tcwmcq_AW~ z7iMd-5D#=~Mi58)ow|@JeITjhreiNj1HvfI=yZt%*++$>^38j+Yt-JFZ2F6KeK=Ta z+Ad;U%iGCD?y6m2NX3IfI^E@Vw$gh$#``(6u07LbO5NrhW*0W67s%Yth;=B48|0u zdiG7>XuRb^aW}Ia7nkhLDf5ph$|^1%kv)<}2t7x09yJ8}Zz;91uYx;@&#|8gYxpl1zhw;52$ z{l_}8AwH*2HE~)uZa8KDqr4A~sjSrga1^AFGgCMY;TUTm7!R*)pGYnWkK^*%^_o-6ro5Uev*28DwvOJlY*&-Caspa^ zY8boE9lgYjUv?<7!1Km%vS()I)reBxqqnW7O_YC((La-4brEc!)elzr!rT{_>b@c< zS6Q2=JXhVr(N~9v&%h<6l;0a2h5dhyC|bsxNQ0cDWPVeN>9pAF)~3 zP4?EL=C#6NKgb1VD%yQKyoW_Q9{%cZX7G}8vK<~PycfEkICH#FlDnB@ z9>zxsHtr#b9LubZhs&U?B}a_QHoktSZ?>`J;rxdEY=386vD7IXfP%<`TUDf405i9r! zPMpBN>m4VYRL8VEg&Se!Bk~X2#*QhVpTP@4Yi@Ja!rznpc(YLqIuM0H!uZws%2c={ zviwxoHml0QJLW&(Yz98sSa(cDVVB>8nI{@(d(uA)2`3sZv4Qj#BC}1;?wJnh-!-pW zZ91H)yqUda5N)RaEaK4dwG-_NE6u+~s&;JLp!}YcqxZA7p4Il#WOKK=P1!av8)XGM zyce3;@45F;{`gUMI_16RC$V?F(P(qa5zU={!C5NiQ2%8=g7{+Rzt-D7-QyVWFaGnI zEsQ{&YrnjpD%X<;bEtz?T>8b9phA0K_}Uz5{2<8H{yZL8{omq6|A`~9$K+*$(wBqX z0^A}XH=DdYvNQ5`&bQ8GQtQ34{eS!t!&p?~+q%ZXW?W1!x4C zT``B!hCI^g!1Yef&Y_gYzp7M0WLH?^C?fP@l*RB)aGK&gM0ssNSXtv}sA$0OCMvnTxTPJ+Iwi_8 zNs>#PLoC;dw>cRs3DMnsxy&d2^vl&txFmW98lPYO)R=!#?! z^pg!xeZ~b28diu*ww06xsRJP;L&iw;7tvylnpc5L{>#UKfkU2u0E@Y28G|NBid(}S zzY5U^F#2j4iNyoZKyamw!a|5n!&p+5!-L*n1;L23kQ6Da7i}Q#pvs8L;9vzliF`__ zvc6i0HMu`ZwZ`d^k3$Y}cvzS-ViMU{dxtiK(UiyuvkN{_;lmOHTy^kN($lCPO^W7F zG7l<38q~%gdzNeIX=v|YzggcjWJ#cl*~&l#-tx%N^2PO;lu`B>vvqbY_pAxwzB{;! zSo+d(c}Zq@hUhgrH1W~kUBiudokON0UI)I4vks9|uf_PQHJYwC)Cb*)E)&}Lu- zO?amK2=B*W>(STFV{T=dE1aFrUYA~d?)D~4xG&;|WEV59Z*N^DF61>_(J@OD9xl%u zZVumfkLmHIc6!OS)3=N8hK9$NIPBQb%!}Ey<5k7uy^lQqxuK3FluM?O{a=p6+JD=2 z+D^z(Gd~(oZ$NUuuXkC6xSu6ZOv|J`so=7hKhQBY_V6uz(yz}2tWTX}f2Xw(ABl3> zmu=ozyZ7$?+QI(P{dp~y)`(2tiwo}VJ>s>moA=~}o%ix}qIdt6)|w}+hEqfbpjd%H zYpKgda#Fh4u5yR7s4OXd(LSAb;a10|YkvHcmhs)^iqYh?VS*n8?V(zeKwE7B z`6!YkIc9Oc7M67?k?e8lYe4>}8-Ea4gUM1>#MkUE$}!E&3Nqn7yqQ2Bnpdb26fT2+ z>}ZK`xLE8~&)-jWl>WxqbedG++o%0D{6s86AM3O}iwHU?e1v`Za)MR3TUkBq4cU+` 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 WLuv|K4Bvs38{s?42T+au|C<2*fdKsg literal 0 HcmV?d00001 diff --git a/abstract-factory/etc/abstract-factory.svg b/abstract-factory/etc/abstract-factory.svg new file mode 100644 index 000000000..b30c0260d --- /dev/null +++ b/abstract-factory/etc/abstract-factory.svg @@ -0,0 +1,131 @@ + + + + UML diagram model + + + + + + + + + + + + + + + + + ElfKingdomFactory + + + + + createCastle(): Castle + + + + + createKing(): King + + + + + createArmy(): Army + + + + + + + OrcKingdomFactory + + + + + createCastle(): Castle + + + + + createKing(): King + + + + + createArmy(): Army + + + + + + + « Interface » + Castle + + + + + + « Interface » + King + + + + + + « Interface » + Army + + + + + + « Interface » + KingdomFactory + + + + createCastle(): Castle + + + + + createKing(): King + + + + + createArmy(): Army + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +