From bff93d45dc43d6b22d6b2d54bdda7320d8a9d8e8 Mon Sep 17 00:00:00 2001 From: FengJungle Date: Thu, 24 Oct 2019 08:32:55 +0800 Subject: [PATCH] add Composite Pattern --- 9.CompositePattern/1.Picture/组合模式.png | Bin 0 -> 26856 bytes .../1.Picture/组合模式UML图.png | Bin 0 -> 26951 bytes .../1.Picture/组合模式实例图.png | Bin 0 -> 13280 bytes 9.CompositePattern/2.Code/CompositePattern.h | 116 ++++++++++++++++++ 9.CompositePattern/2.Code/main.cpp | 48 ++++++++ README.md | 6 +- 6 files changed, 169 insertions(+), 1 deletion(-) create mode 100644 9.CompositePattern/1.Picture/组合模式.png create mode 100644 9.CompositePattern/1.Picture/组合模式UML图.png create mode 100644 9.CompositePattern/1.Picture/组合模式实例图.png create mode 100644 9.CompositePattern/2.Code/CompositePattern.h create mode 100644 9.CompositePattern/2.Code/main.cpp diff --git a/9.CompositePattern/1.Picture/组合模式.png b/9.CompositePattern/1.Picture/组合模式.png new file mode 100644 index 0000000000000000000000000000000000000000..46ec6595cf19deecb97ff2eeb485b3d6e547079c GIT binary patch literal 26856 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∓A@3xeGB8$+4Dj z-R2)?3q$&5y5NQg)?6z}g`0@Yo9l^+Z!qBZkZ}=0e`MbU*`HB5{NE%XD*<~3(tn!} z1I9-zkR>CH0eddZm2xWI=%#C}@>H&|sn_<$E{I0E!Q7XyO=v-2xVdMt91K;uzRV)m z=%U+|LtT{r7NkJ0`m@=wzk?n1u`dw#0mx4z%HpAmkfU_=V9--!ZHSdiHv;n*-D|_e zA}$2mdW7>83pvhMr)+^4OO9$*`923gNNI zY=&IH7;vYXE?d_#kUv^?c<roA?~?M*-!HTirr*OQ|oP{fr-i<*A!I=OxE(9yQ`yu-nq7mel3ibO;cbh&N#D&;BuwEI(K+N9S4#f zwROR>&wK&Hg0aK%#&oQ*_Z-gSZ0W|LhqU|~sv5KOwMcQ{(JD@Z6 zU%q`HL8ao;&9|7LbU4$^3-Bz+G%WQFHl{X)PCE;_)Fmaan_aI^a{Bg5!v4`?!HJ#O`uH>{I=v1aO_>xtVLDKIKYHZB!+SoY7uTj)Rh9s_|r?}=p>N|nGe zMRS8(9of#4frK|ztKCNwCaYKu?tZ@f?TGhPb%mcy-p8|+In_q`IQQ_T_*8{t)6puY zg05}7vt@dE71any$OC+?0iV~zm{c&ks);rxL>h)oye(jb%P0<9MK0l>zVb;5uU)a%_xsr%GW4tQOOb$os?b>b^bM5GW#Lp@V!0>N zrxapY8Fwq>V2?2-6h$EREkpUYE~qbn((CpO5Bpf6p4gcbe+&aoNV_we4VxC%%=0T> zg&f_XZRmSI&wHnmc1l<$oU-M{!fKAr>D`eH!jKeRZV??RP%9L_$QsRZb&w_2_#Bvs zVm?veJ+hq97RBSIDD2A4u!1b*#{<3>TfZCA>lpV*4luqIQ*E4~n=n2u3}luh1oCpx z1wNzLsKF-3oCFLx$@+s5F<1QSNGRaT&nL>x9zb}78GlS^Bq|gSG+a7yM>v%b>jhi| zN7^Kg40ybf*R+g;@K|Dt`>G{y6{+|4vT#5t;}ZGPi^8E?V~{^rss^yzs-iJ<8-x`L zn@>vy66!4#1so8yIVKkI6Jg-Lg`@b`@4SW@T*LL!O+{jb+X_P9v953KX@hi>7322P zI~ZQl;Q0{I-|o#&QS{%4Fylw%ahT^bo6b|-fR z2xD>tdov6o5F(<+EeLB5)MF=M>NJ=N*NArWM-YpE)8?l~HXev;PWvN4eCq43NS4jfDEMX>=@XV@YHLhooMs z52?{4c-D31OgEg3HCSi+yq3b!{KxBh!}2L0qTzttjs-kZABq4?XGNc zxXPSjTU9SAl^sqP{2T+O=Oz#S40fw)<>E!K&Q3ppU4bFoII>Josr^24u{){A7OTZP zZ8xt!rW~|=i`H5W3Ne^=Y4#{R;P0Q8-TeEquN39B1`>19km6cViTEK4+X?{eLY7iKWeW44U@|kZYfq=5{+t?O`Az?G!sw33P?(+06@%}6bBRpm8_M3mBfOUT$ z{`BG9zbanBN2tfrGwp}k6o=m=skWZk;ZnJ6Ha=si14k~;OmLh01ED0&iZ;xT;6H-{ zFVTSL#(s@7@EVx<=8?-=YX_80bK_e$Ifd9OZILz>n!hq9=t{aJhv33!3(L1Vrwg17 zRaI4NI!AOIZ(eQ!xLwtn20VZKm2|QrJn^dlbpBUs404e-b?h!tKKz2AKryW|iqh#G zN)*!AzI!y+4!Z6(;SJa;8Mck4FXH_SaEuQ{Ec9ry)t z!d14o29@jX!D{R3Z5NLRXLX&VoEDcCiX>mWiv-%-?;auwLN4dxXd03(j3Dw1%S-Uk zTTloRWip+uW*`Anjj#SmOqVi*YHIwDE3OA}xIg;r+*g5&$c%Awt1Bwy$?=W&N2&mB zePFp)yeJCMceX7DiW~ctE?MOLollqLCrEh_a*l3}L(Hx)0vHz!GUKVtueS?OseEpb zML23-4U~EfC4n(3`Y=gBM&u&;3K1fza>9zrx#IeA!V_B)nl&i+@M;s^*{&;_>}^MT zThm{z$4il`yJ_}vuAN=?ja@&5cO$Q$dUYly~~>hj7mW0sLC4YGq<M3zVM?ju*vw#1|$@PANMkXhEUmF1ciTvlecU8>`%b08IWw6X9+ zi$Y--<3?2_O6QR7?jogJV`4@|joCLu_!W+~1;=`%UTE*Mjo$s?dcNj!n1+_8Qp%-Z ztGLm(5N-OROVQP$@{JS9Z_=*;*W~j|@nuFfkbHj#FBJX;E%+ihiZ^klOrZdImMe7> z=nQGikjoo`WD)^7Puqeah z{*x+dYDo}aUv2`GTg zTn|4yTv!-%mYS@WvZI&S_sbCGNZH@#Jo4Kap(Ub}F54R&OUPXrQz%M+Cki}h*Q5Iu zkcbasT(K#wC`Cbq;j>XetvDt;j%V$9uU^Bxbll^&bMSR_d)3T=Yt>-5W%P!# zx#FfB&kpyA7!f-HQJB~9ZSs3M(lx-^?Ge`6dhcW2eSa4nj$dYsqqL<@UFJlu;r>K} zEB{vkWy9IX@~`$pyY|N%_rl5$k5?njPIKAQNBk^n*(}maL)F@wVmE#!nrBL<9cy2X zSP3(c8GE+C7_sp3%U0u;!Ruo-gnP!E1^KrhD}7+eKg-iOAX`ED1xy>JfQY6QIo=Tr ztuFb|+KRne#<=gl?lZPdXs%EsX~)7Js{9lKh9Dcf3olcE_^F;Xmmrha$^;CYzf}s` z{YsN>d^uodPhspRbz(VdGqwA+cEq>q$kcdUBSmR@m9ACzy0YM^W`$<921)8xQ&109 zF{3|}#QOfdqHvT>fPA0aLR?*;q@AVQl-o|1)ey1FX4xN{}~XFt|$L127x zOK!4VIXbE_8Fe4TAqUrH54o_TUCBpis)JU|22JVj7S!#J=2LRr#A*i>uXZdoIeXpg zX*+eJ8pLC>@zR+71*%aBu@i=)Jn7_FTZh3Fv9YMHGm#zIYPN-CCF;Q%dJhF2aM6-I z_77E86IFr$T()9;^?Mo;q8Y>&7zlL{qIrsq)xnumDA|8&rNCn^msH#Bo4}--ZMCyq z_nOdllb;gzwOJ;`?|-E&3^ob3nPl&1?*`hIOLR~Tthicj$MGMTUL?JqMld7r6 z4;ucb?E%nZYZ^sjuK~lcVVdP`yK>%A>DJrwj;|@R-+{33Fi#u-kB7SS3?|g2kfv1b zwEY^-@Dn&XdjC|BGo=_2dl|;~13stu1kp=z3-1iitZwTae|qS1<*eG(tM>0(UaA4d zc#&+`$Tha%8{9o^pMi6^hDd+Oc^gFmlI`#5nJ1@qWQ${$ww?+2?Y`x+&ePML^HbTAj+2ds9x(pC1rwbo1bQbp4{XadI%F7( ze`s7960D39?axpl4i4;lz>Z+uS&`M*l4}%tO?z-hhp(3rqg>E)o56GYbf<^t+--B( zOE#3_!_i)WC;#+AS%P1a8)uW7J<3|nJ}nSa6a0RA5l{pXrWB{9fbGUFMc`r?f+Zz2 zRrI=ppzT%*j0xDCt}I>DP-;Oe*?xO7pYbmX1gC%I_o!I%nB#DO6gMG#m1`LQoCHvrnjuO@N60fX(nmUtHn{5)|y zN(Yz!J31J`@r{HB^ zAkPo0xvEkhbeGErr6W9aH!M9JdAs+?wFr|wyKVd z-piTR*sI=q?s_YNfJkqrA%`zt8h{f*kh2YwTe2z>K~lpr-4!wky>-v3BCucDP3alt{X(vrd5 zNB7ifTuV+?mOjyY{~}c%Yo;sq&|cL0wz}U;YY~#8n4!>ZS!=DIJ9U31le24kBd|g9 zeZ7RVZ=D`9KKI$(lOpUDY@Uo&LJ9{YVGjGq>ZnJ1b!r2y$37WcrMIj#1BFV(dGziJ zI7RU76@!TWe5(YiUUI5J_&MD&Fv`sNAVbKQ{zr)+U!R(#^r79OijnnJ=WY7j#$ewP zX~o@ht+60vmvIHcD(>7k(rbLXhLGJ z4UFX*=Nv$;XvegD4-Wr{8A6NhwY&4^!ps%H$pnI=7nu_w23eyk-2ci%s@Ur>kyR&c z^NU2z)Ou}yG!NRHd?oR=g(sEwUd-e3An{@<{?)+JRy{XdD-}X>cgq*u;Q+e(`ySr? zC#HoKK)V+fo0_{k?wf53AB3%p&BS;REu9)ST0b-P#EQ_XsvT@F*Ec_y+uWTzg*}{I zcoC5%`j$RHo^&t1?#se%k3i!+?}&=eDn1q-Yg)y&`_i1VC2#MDAS~7XQE{KZonp;s zH6HOE{7gf*UssaNf%+xm{F8-e*}+ODnXZp<6Dl{3B-rZ?75JXYH6ruHZ;OjV_*37~ zf=UkS8+u@2VWs~Qo!XTf_Zw^3wHbb9@%32-YpY*v1&UNJBw@-m9E0{Y~ zH|bfq_c*3)vB}#(MtjzxD*R0GO&}~g8Wg1d6g2;@JyrLZgSvQuTSS33)j6BT!L(ZU z+L*?u<$8(dYR_5$ssT~`P4I-q*>aK20CINgpM)T(0deh9V_w%(ft4znXCu2z#VEwb zcNV&?tc^v83u_@>%FF+gOmxB7!5My*PmRZX{?w(>;jzj)rQCWe6x5@dNfD9WOCb$* z2Co*K?RWYT9*kW#pIPYP{$qj`RyX_>3j#%_c3Sh0hv%&B>A8{7OLqfW#ug{6inl6#C})I~ePePW3-g;r0q&!%CLIB+CM6i3?EG6jQp~xV!rExPCLoP%7i|d^*rQSliwPTP60B4f!JLc zATaWQR>BT~e-eC)G9)JAb?`{L7Wx48}>_DIHLk#P6PEn=9iDF zU5A3|HjSuk_Qoqk`#rWg9F5*BLilWY{c^!)j9o8;i1&F`w>=KkPuu^^3t z`UXx2?}+vs$xC4t5t4uhPxrxr=RYc0_O#ipHLmMs+C=1=io_3kIIE3uBd8V2W)m#{8@y7vEl+y=PE`u}s>!v;Sj zI^QIs!u?fy{_6y3sNe+0sK(g~J3kET(#uHw^+etgT``;aF@1oyACRbk2c`3*6A)INB9 z*TQPb^M25*Wk*@?I}M;ygu(~{NdAaAtVIeWfLy6htArd06kRE!A)%{RCkAB9j4bPq z=v~Dezs>4I0pu6;k}3NIptJO^bV{X8+#3BAfN5t*Qxx+8WL+`0TXF&9$ssU(8l_8% z|3B-Xb1y0TXzWh%R8>66$QsboKx|H`cc7=Dp&}D-??Ooe#f*`#^og z@c%%-vET3G-y4X#8oNele%^jtzQv&!5(u&+4DRO-0Jt;N3(6)1?hypy{{i5U%bmEf z6KR$WXXVcBKUZ6775Y`~R(4-!?Z{%O-TeG+(i?~9FyEP6whO3nd`5~msBDF^f>``N z83n>nVw!jAD72`4e-UjG4ZrpZh|V8rKgP}9!4763swCjKWOcaspr96u9~bcqoSQt} ztwK-&A!GjuT1eS<6BjmU63e;b#g++Qva*DS`hmkTRBC%+G~zyjl~(Of7Ibew7;?P~ zpp&aA#Z2gi7u|kD6d8;FkKr#f$~B6agELs{XtQTP=FvAf6!j$_qM!ea`d{2au*y>i zff7I6*fk(CItgjTIIu&jKj%yc9N6>z%V0L0wsJ9mUIOG56b%4LiT{%HXFd3rOaJQ9 zzZUneU;5Wo{u@yK4ZHs@z)8Ls1br$NbN#gT@JCR?o_fRHBSCyDfWt(vCiSXhrW?I+ zxHY2W8Y$C-$nXLD$z=cBH*F8<V&;cN1Ur}Jt!N@#d_5Jcd$nBw^h9Q^gnEQ5{`VxOE2aAEkC2V7eK*m+ELOu}w@k;^C@Y=6D0pfHXu^5Rm;fU`3`>>H^fSW#Rr z=mzo%F%{+?A~sK^&g*5Ux5{bMCND_Lrbc;YK6 zuHxl0tz9|cr=y9_K$>#zX@ae=j*O7Ub|CaS6il-r9haLLS4&PY7vlU7yR!zF>rV8Z z;N=P90{`%5Sm1N;(FR|ws3U)J_kX-@SuY=`KIzPhS@na9-waRMA z3y-ENfvNCd{iD&S7@~^>eqLwz9w{VL57wqD#cxN2Urde|4o1BYy%>GOj~k4h6h*xz z`v5HW25Msdtp9;6)^>z4ILM$E-m1lGJ)lSQ@~Y4xo?L7dZYF`qzC%5gASWDu8=LSB zwV<;&gb42u1C07&(5uiUP!|_XQKK$74rJo##X`KIUuKB?MK5M(4xp@>le`!{D#Mbp zqx{VbjZ$t~wTm4*r;xYt`*itY_{pn&sf$O|#;)ycqgUh4LQ)CVnrh9DosE0y!FPYo zG=;e@N6|~G*Vk~v?n{fe4FtV*vlM~UVTs?xeS;QnIx>xo#yuZ<&hJ)JLy{Pb zTA~w4_*xFu00zcep@^iNi^S`~=`Fn~T6U@j=@(XSh#y2Z!iqC@?R5WQa zJ{zL9sH|A1O-RXC$W(m9^#GRW#TVtGq)V>eb+M3&t!u_Q4tn`y1<+DJIedf5p7nyq zmvKS}Zd?UFU7;{hA%fJGUoi`pbkFPKn2chdDu~QaQ<2vGG+=!-A}$uocM>`Q>iZv|bJBqfd9* z^rs&{H8X!8!fQ}pD{SDsXp!clK#PS@2pkvuqM;a$6NY&7^9THnptGiY_q}gaQ}L0q+D`f4n%B>o%oO{3Uo#-F42*aOtnGUaa$H<`M5c`w3r#j)$cWtaJJEX9kATM0W+F+o zXxMB85t~0VRhEtb3&6dYmjpj`@MhlGqdh@3LU=v>d&V{cuPcqqyFRDtMwh}$l@zuCAZ2$t=~XLFVV?vemhhE#X3X1 zA%+5XM~#g@u%7|GHcoo8$vImqOKS31lV zyN>v{XZ3loqs|6~vV0o-vi2I+nbK>8BeiUZ!RjDT$f3B+ZP3gJg4&RBIM2>uTce$R zm>l5L7jureav8wHukyk_@Gx&(`191zXi=tU;D;2fK^H25CzKGdZHNXTCz*#5U;ph0 zT@zB>-u-@B&y70<#H2|?B2>!P+g6zR*2TK9%<*$>j2AxZHidO}GU@M8W&G4fTj+fu zShaRr@vwM*yZc)+Grj2-!-c5JA}>LRLVMl-QK@~utLSJo{jzc4i~a9W`wFhEGN6yB z)P;SqiT&SB+V$0!tq;T(f$hGzw+)=;BDO?v+{t0T7^Uta!lJn#;mJwgf1^Ts;zd~N ztbHoSXL%7ob_q%FV87>tCR|lCxgaV$6UXa9GV+b0SY1yc7lU%td5P&ae>?ctW?^AR zbQniXcN1H4VgEpTlys!^T}kGniw)>_e0+WFmgGecyG?4|ofv%)XZj=}$L|yhUkrc0 zc>x4K6|Y>Z&h3IP!YN#DGqEq|VocMNlkoY?^3MihQ6RDa7x{ikScmpvtHz#c7vWaU zR6SiQ?l-66IPn4(r7v9nWaHg55wsjF-DW8q54~Q$!1CN8^?ci;|Kox7QF{b~EFlYC z#88u{5au;>c=?`i&F7sN5d%6dH#T|8U_QJ{U4R7bTgx?|dx=btSWa@yM=`_Z;lwc*yf?sE7YxeCWvQH4m1-r)tLyEy5Ul+c1}V&4=nISJg*t{E79^ zmm3g^G>D(9Sg7e$@~=D+fkBU*7leegAm{s*=lj3TPB_7By<1*jHqW#DiiRZ7hTp4% z1DJYy;Yy;)EldP4EV3SHTknnAnwvUet&`8XoF9+C#Y%}w(luxp7S?pO8MTEUO6}}C zMicxg&ncnq@;m}_S{o`cPZy1vf*@|Wy)pcW6J3qL)^J;z5wnIS0(5Z{_vaE|wdClK1>d8?9tVn-`7zFj-jY~I$OCjrf0yF7Q!zrKDbezxw|(82PKSj%OJj{P>-Huw2MJ6C`QIqZ^MmBJMp zxAXfVheLqkM@`O=kcGm-E>y9@lrB;Qf;JIOCB!32c#+73;ye=jKL_(VTFXO#*;7dSYbb$nlN#R9iAj2#z z+)B+H$1Mu#b}hNWwmvmuQB7$a1KCUrNw z4!Tco=$W?lw4!;wrnxyda8K#6S zqn{IV5b|u9pi$r4H6mk)`}RVGjX(4cI>(z(}+h@NKq5W^TVzsdFbV@oMEdfc(FD_NIj zYU0ry5J0X_DvZ=Y|jp}YDjxCX)b139cbWHgpH`DPs|gI%liTGW z2i0}K*Fd)IOgr9nICd8bKdK=~DHbxfd}wme{-B@|H|^x@H#%v0Q3R{LEzJfE9++xe zoWFR$YTX{|{3zx8XbfBoI#{2mx#v{^`&{F=F-k<_b8hi?FE~Nmut|@5>Wu`i_a_0Y zdDL{e*6gnsj|t0S8iTEuEXaLceKl7~&uY?k74>HfviRjV4h4~M=N6%JWo##EDdib! zlXhA={m*oGeb*HM#4=gA=CY!Y19q%vnZQ_KkjZ(rBY0ji%hc~+#inlAd8QQcg&;Fv z-E2}A(qaB0(v8#$sc5CzGq8x^ID;z?%MyVrp<;EpW3m)cFGbrc3&9WN7cU4F;znO} zX^%JX8o1>W(Q$Z>+H3952TC#=d9N58TlV6Q#fiCnbu&w!pQ{*1@SQOq((Dm) z09RpTQ1^}3u%SwTyunGQlHBt=PIJ7pSnPD<2**`uWaR6+Fv`a<(o@$XZcMo>tmXGL z1z8JqJrJBfn$+{H&@6~}YgaC|C<1w~aWybE4BAY{>?r^0Iuk>~z@#32S|ONczVwz9 zxi^?6*vp%bni!oB)4ixv8A(TCehhf8dR^{4kVjYbhXJ`t_PT7?=l4C>79oyi#2?ev zjBm;g8ZuF85yuBk{bv(E&T=4iSv6Qq{_Z?E*>2F;*r% zi3JYXhOCE>?=tL$g;$~sIJ($rcwhv1&dXhgT^=->l8JiXRjK&hX^fSb^JYea% zHhmR6MY%jot8_q?tQH-@YEPYRfhu(Bg!Rbx^M1n5pra+KGC|nkzRMxW7v1)PoK*Bn ze7u`CUAIl9Yxf4#7aC4~V9hWH9<{M}f`-pv?Jv}^30Vso21+gqF*8UyG%1Q9B#7p_ zfEyaV;^5PAYWTlBs6c&{HKKI?&S4y^OMvo9&XK64XN0HT$Yluy^MU>Sh2`UY#A+rq zt0(Z`2qT#*sTANsup!QEZ>Y-{%jJ6puf4&Ii7wpY$~3MctL=fRaq+#|j8BX}`=K!r zG1oi5KaM(RxrChsUjj3(OjxIjqE)`j#1pfzDZTds#m0(G7DtnIsS8z!@%F(`S7AEE z=#<*y{Y-yH`8DZ#2Bc6&`3J_UZMpXW-OVgYkO-XQ>v|#}Adx?V_>t?}LPES~2^8z|PF6`_me}MbP5M zKv}G%4&y6>=eoo_DmDqcgI=WMQrK2ftx}&Z%BTn}sQS7#O$f`lxF#d64Qbi%LV{}J zylX^9p-MiKkmBopb5&f_cIr1Rvw12OkOqOYyLInwzl+M4#z*_&qP-N46}6phQCIyg z9xJkrtxxj2V{Qo|dkqBiLsSEaRWY5a^b6BVFZH*@+Yoi+K*Mj9C^jK_EinVk>~ zksH#?vm;(Dhca4WQ0hgW*Pz_fmTPGlpPRa<*`E?xAy?xSQ-jJ6@tI{tgKg#}T}Ifr zEj#`D>^Bz1D~1t#MmMhcJnUlpNnVWR;#j zWJ7R}9=F2{C-oG}N8jwr1pFfs=j~T!BaOSHarYZ?v4of?*o2}JPuiO|4 zBq8BDBA=pwgzXJ21KmjXLOAJr(rifw%F?V7F9D!1_mDCA12PSZQ&m()xG` z?J2}>@y0Q|>Bb%h&Ab6Yjf86_=Q|{u4tElR&^+_ zM~NlrNk@4@3b8S=9F7~-q>9QX(H}$5PL1S}qLmPrW{h@Ki=eBv!UgOY>QPeuQ8QwC zKoV#%SmhG<6859C&b*$aDDm;bw~=dDI4ROV4J08=g&(S?ibfTi0;_rLbE?;vpZMU- z0n2i7m}ZlwFOU}16_xfmyT1Yl)f{(Mg}fS+au3raBZygfV@BLQ5f|!C4!)%3^2pW1 z$W8fdpGLGP)rseQ(yl5I_b~gn`6anV8y;Vkr$7eWsOh;|>{nH(@{wsPlvh>zW263X z$_9&bQCB!P_TxoX7=ZzgB>b?Ic1qaVOe?9Iu-i&9+e&*k8*t&lN%~N!b%~SwlBLI1 zZwDBn!w9;xlN&xFJNiC;Br6s!-44Ac=-ed=87teaB>go*XgqEE!}BTMvD1lOn*wMWWRY1TRdd`9&in@JK;42|7AOF>w&sM*39t zHjx@1-GHD#za>)=9}}17_w11|bN;kPQ$+2*dNr?99(seVj-Yh5iZZaO(An>Qyhj!& z^XJTDEsPk>?&dE-w~MP zD`Im~f9uZcwI{Cq>@tmO{seBn3+7WQZ`Z(^L`j? zpd;zGw7w!(4>sil_R#df5mv=-U5a(D9)B2k$JFhC^ZM+g+&g_ad*=V>{pU8*%jjCC zVx6O*K6nGqwXeI{7St2awFTy;yYQQw?Q_xS@*YS#x^GkQ5HHO!nM4$fBzY{Zdx?+p z*&F7p@r}CGb?&Wg>OWc~A|j0aL&NAt&>Gel5=HPCU0aCQ%VZ@!c@gF)A5`aK0`Ju9 zcb9K)D!ni#`NklxS&WOy>+fdx9Q$TdjS(e0>+4i)V%8|3(S3A?G* zLV-m8sGv;9M}E{9_t}SYNg9bYK{d(vdA_sasD&`Yq?82B~So}&}<6{+C+@$t}IkjMQeI8=`wuNIFgQjiF*XNS2iq;O$4&I?> z1H9_CpS2#w%qLoeP&_LnOk*EdFMP>vq(0mxGc-e^b$g!wQyQ`)_sz!K052Bp8}M<>xKL+DpMS%O%RjC#iZ~!dHzL?f${cn z>ARsR{#y?ACruK>1)9rh%N{!PG+%(BjktiKarurYF7g1ZM-ccUE!KYob|8N3S zovWT3Ey91k^L+)r+Cz$E48m2Uy*y;C$mmfnvuXpa5x2VMQbNLao9C{eQ$4zeGgZ?nXvMyS=&fhho!}zhNK35#G0f47SA4{{!r&TXKA_dS7}a15 zu6m9G+vineovK0QYL-8+h^vqrqp0Q6ur3-hyM;!P^ttGdzJz+cCh|Ij8x?q#+13QX zhXn|SyNR-Pa+iio)n;Er?3j5Q8M@7i^(Ch;$ygU5_Uq&F5vKDRnlKH&LUjm3iNVH- z%SUjz=L!7hFFS=AZI{P5C4z~o$nt81gC|ylV`-8K<|ljwr(HkW?+Q9gXCNiV#T6a# zVK9Q#IJ6dlW4vm)A2)Fii8mF6PhPN(k8JoAwc-4}=yc5gekTjUAWQj}f%R#$XvQ8% zOqsf8Q=jXOa_e&vYDy`Nk#8la(N+G(S)TiNqj8($Z!(|EzU*>!=&oJzcH06}xDyuMt?W`&; zuF2-E2!zcBz7-X-#{Ry#&uO)iTSG(TI)RbKUwM2_8=`I;?+v}A(C~bvQ@V- zs*53%-8E#(GMKbkvt-FKMhjuMmdp?{e&?O}Jx{m(o9CJ5J?}Z^{hsgs`5eg21*OaG z+q>WCG{?t+F4D%OhZrN!uO}uXA-QiR;KERZCIB0LZb^leD)9+38(nP{nu`;_IFUkT zz~vhP#teN^f1WHkMEmm80Xin2wu(3_v31KnFv`a4LG?+H_B6}J_W5Vel@#|hF8Z4c zMBqx`z^SR%%t<2C+fV;!js_k)DjU1q=&tpYDHQJgHcI2*<+H*NXV!CUpK6EXemqfy zKGSyLBHea$;{AL}@szOZ%A0nDSHmX@L9qd>=fT_jN02G{k2HWF)Gip5ljW>Pv2l+A zmj@;+4wlP_bgRC?fzxh9S}1r3u)UBM1nS8l*{_cXEbI@=f|)l?1#JABTqNEcK)u)u z^nHcgY{&>M^|;0y);Lh!q`-$8-9YC9Lj@z18m^1RM?m}=1Rl1=>FPZk)37X78 zcWm&|tv`mQ6k~l=0ISjQl{Vy>`N-nF3`z89`q;djqxq`GQ%8bw!`G-ONmWnu)b8%P z_jS3Ktx2}SIZcC@Cn)z(xM7kUDC}B-%9TQI-i&7A?@M(@mDLn~`%J!#A~AEQWeVRL zcsq4h@XJME-S1yc76AX?@2hvRz230QSCJG@yZ-L|f=<8hdXG)_jm?&qL4)H&Kj9@0 zLi&({s8@}b`T4)bXJX&0YaJ05_nK8T5(4_@WxisYf%kW#x&C|nE5y=swHHQ*8Luj#Yu zOFuxKj!BQZGDoAn_FFRv2UJ(7EG z$dzqIDjBa^_PXK46>lx)wi>p|iRLwN1;-_TZfP6UOTp5`c*qwDgElP~t(D>r<%|C- zs}F6u$;?l){cRQ3iNlAV08$AjBwxZ!W%KBL{Ql?=#=N=BgK|Fzqh5gha*A=X7EKnG zU^pK?RG-4|QFO7Dz*K^uE+48|>7}&l#r?4g=|akk-`k~XbdK6skGfW_r+k>JkY675 z3)1OnbozJCyAbfI?XKn_(B5KnUUwYf{2D&vW!YI;M`p@xCd3TzsQ;BW?D7ag2kuqA zrWn>Kjjt$D0#4UMC?$-l>N~2S2w51Au4h}AEg;x&?wPE2ty3RfSak0iI5$yZeBiD4 zPe%OM)`Yp11iLv!m(o%~eHd|w?>=pR=d4FvzQB4gJ#MH;+GArQZw(EbtvV8#T#co| z4`2T7a9CEMz>GVe58Ic2ufjzLU+fZ=T|RiEc1kcb_aO*)&V#&G9CzkNUZ~#m1QheW z>m^>6qUcLKhLOqDBN`EyQ|KDo4s}#V!)~Xt)+Hs-(VPgYZg=R6O0iaXI;QPCFxQc0 zx89Zq5QugLJHjwj4Xu{G*Nm}L`>p~1)JYXjjQ zS)8-umW7}*0Bitw&KC#Si zr$4O|BL{|j0xqKm8gCjI$M5~tx2HONtHZ@P+2F?}%c_^?uo7MSc;YlIBH0dJfh5+* zI@cOq9Y6Fn2Nde><$_$?jzkS_YgQKGmoC>46v9V&x@{YOjX*y$>p0JUBquxvdr{#e zm+#LKx0;g!giZLrJdy}raeFa<-!;9G*--1i?{OUOGm|Z6ydI6qc-LTZcv<@}&nZM< zRQsa0ETQS{4$;!bkyc$*2!skMFjuAnU62_1XvqR7qkB1E9*3Kz50zkkS4Pr>S+9!s zqZBeg2T%^SZ!d@GR(xR=F$dX(3bO=mQ>yzoOddB0(25JN&sUiBsIoEUOexlsv!b%V zZOJzgWU-Q<;}G6X;aX>fFu!DiLufQ6gN^wg9TX*aR|}-p1@x2^L0#mGg2;LA zUOg#ZRtn{pmde7KDCfGTZ2_W|3>z+&P%}^_fA%Hn=Y`_}=%M6Aq;HEiU5?UP>?)jI z=b7)|msKgr?Nr*n!{YePsd43AcidEti}U`u-XBf($K8)L1bQ&a-n1t@8N12I)_uYc zm8?YsRd;*-DPe%J2jQM1Yyj+M7FKr`uNmHFj0zCm7{gHW%p!Cb_rVPv=-~_3aoMZs ze^{6W+DL%ozflxBo&ssN`H=Vak5>4j!gTJ&@!K2cs_k1)3Kf)U&~h)DtZiQQd11A`&(q)Ctt%37m_=BBf}7ZqTszQS#!18H zbG|S}n{(6lO8fWX$XjahN@|!;S}(c>|J*NmXZTPtHZ+s5rDfbd;Qvs?AZj!f+kxua zNRP_N^^q;cCaOrf!$AffFqdzS?PC*=PjdmwXg0NNPMq%U;Ol?Wct^}!=4%Z`KwnwO zSmvG>M=R2zeY2MFER|N;Gi~=aY`eoV-q=+LNxX_@$H=s;T(~WJLMFO9CxVH~r?vY2!6GPx>;&Na5f-2Hg2?2xJi<6KsvvYa8}py`ZJw$iaW0(>S;jbRqVD zU(aNk*PweNbg}{g7Rh#3j!S{t1VTOuj^P7-R2mQayGSL(T9MMz)8U{o;}oa%Dhciq zwbGw8uX~9{N9rwlD<_4vDZrJ|;v=@=E literal 0 HcmV?d00001 diff --git a/9.CompositePattern/1.Picture/组合模式UML图.png b/9.CompositePattern/1.Picture/组合模式UML图.png new file mode 100644 index 0000000000000000000000000000000000000000..a10f61251f540e06ba3f2a14184b2aa3e06e92f5 GIT binary patch literal 26951 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 literal 0 HcmV?d00001 diff --git a/9.CompositePattern/1.Picture/组合模式实例图.png b/9.CompositePattern/1.Picture/组合模式实例图.png new file mode 100644 index 0000000000000000000000000000000000000000..abeb36a80efbb59ebb574778651b1c2dfe0de965 GIT binary patch literal 13280 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 Ql>^aI(^aidwt4)Y0H?AAwEzGB literal 0 HcmV?d00001 diff --git a/9.CompositePattern/2.Code/CompositePattern.h b/9.CompositePattern/2.Code/CompositePattern.h new file mode 100644 index 0000000..9834c2e --- /dev/null +++ b/9.CompositePattern/2.Code/CompositePattern.h @@ -0,0 +1,116 @@ +#ifndef __COMPOSITE_PATTERN_H__ +#define __COMPOSITE_PATTERN_H__ + +#include +#include +#include +using namespace std; + +//󹹼 +class Component +{ +public: + Component(){} + Component(string iName){ + this->name = iName; + } + //һŻ칫 + virtual void add(Component*) = 0; + //һŻ칫 + virtual void remove(Component*) = 0; + // + virtual Component* getChild(int) = 0; + //Ų + virtual void operation() = 0; + string getName(){ + return name; + } +private: + string name; +}; + +//Ҷӹ칫 +class Office :public Component +{ +public: + Office(string iName){ + this->name = iName; + } + Office(){} + void add(Component* c){ + printf("not support!\n"); + } + void remove(Component* c){ + printf("not support!\n"); + } + Component* getChild(int i){ + printf("not support!\n"); + return NULL; + } +private: + string name; +}; + +//Ҷӹ칫 +class AdminOffice :public Office +{ +public: + AdminOffice(string iName){ + this->name = iName; + } + void operation(){ + printf("-----Administration Office:%s\n", name.c_str()); + } +private: + string name; +}; + +//Ҷӹ칫 +class DeanOffice :public Office +{ +public: + DeanOffice(string iName){ + this->name = iName; + } + void operation(){ + printf("-----Dean Office:%s\n", name.c_str()); + } +private: + string name; +}; + +//SubComponent +class SubComponent :public Component +{ +public: + SubComponent(string iName){ + this->name = iName; + } + void add(Component *c){ + componentList.push_back(c); + } + void remove(Component *c){ + for (int i = 0; i < componentList.size(); i++){ + if (componentList[i]->getName() == c->getName()){ + componentList.erase(componentList.begin() + i); + break; + } + } + } + Component* getChild(int i){ + return (Component*)componentList[i]; + } + void operation(){ + printf("%s\n", this->name.c_str()); + for (int i = 0; i < componentList.size(); i++){ + ((Component*)componentList[i])->operation(); + } + } +private: + string name; + + //б + vectorcomponentList; +}; + +#endif //__COMPOSITE_PATTERN_H__ \ No newline at end of file diff --git a/9.CompositePattern/2.Code/main.cpp b/9.CompositePattern/2.Code/main.cpp new file mode 100644 index 0000000..98c635f --- /dev/null +++ b/9.CompositePattern/2.Code/main.cpp @@ -0,0 +1,48 @@ +#include +#include "CompositePattern.h" + +int main() +{ + Component *head, *sichuanBranch, *cdBranch, *myBranch, *office1, *office2, *office3, + *office4, *office5, *office6, *office7, *office8; + + head = new SubComponent("ܲ"); + sichuanBranch = new SubComponent("Ĵֲ"); + office1 = new AdminOffice("칫"); + office2 = new DeanOffice("칫"); + + + cdBranch = new SubComponent("ɶֲ"); + myBranch = new SubComponent("ֲ"); + office3 = new AdminOffice("칫"); + office4 = new DeanOffice("칫"); + + + office5 = new AdminOffice("칫"); + office6 = new DeanOffice("칫"); + + + office7 = new AdminOffice("칫"); + office8 = new DeanOffice("칫"); + + cdBranch->add(office5); + cdBranch->add(office6); + + myBranch->add(office7); + myBranch->add(office8); + + sichuanBranch->add(office3); + sichuanBranch->add(office4); + sichuanBranch->add(cdBranch); + sichuanBranch->add(myBranch); + + head->add(office1); + head->add(office2); + head->add(sichuanBranch); + + + head->operation(); + + system("pause"); + return 0; +} \ No newline at end of file diff --git a/README.md b/README.md index 4a86323..219b6e2 100644 --- a/README.md +++ b/README.md @@ -43,4 +43,8 @@ 11.设计模式(十一)——桥接模式 -博客地址:https://blog.csdn.net/sinat_21107433/article/details/102694306 \ No newline at end of file +博客地址:https://blog.csdn.net/sinat_21107433/article/details/102694306 + +12.设计模式(十二)——组合模式 + +博客地址:https://blog.csdn.net/sinat_21107433/article/details/102712738 \ No newline at end of file