From 9d0baa8d7101ce79183b161916db1dbf900e487c Mon Sep 17 00:00:00 2001 From: Bunny <1319900154@qq.com> Date: Mon, 3 Feb 2025 17:35:00 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=BF=AD=E4=BB=A3=E5=99=A8=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../设计模式-v2/image-20250203173419155.png | Bin 0 -> 14082 bytes README/设计模式-v2.md | 97 +++++++++++++++++- .../java/cn/bunny/pattern13/Iterator.java | 74 +++++++++++++ 3 files changed, 168 insertions(+), 3 deletions(-) create mode 100644 README/images/设计模式-v2/image-20250203173419155.png create mode 100644 pattern/src/main/java/cn/bunny/pattern13/Iterator.java diff --git a/README/images/设计模式-v2/image-20250203173419155.png b/README/images/设计模式-v2/image-20250203173419155.png new file mode 100644 index 0000000000000000000000000000000000000000..7853e1f14bfb39301764686139baf9021940a080 GIT binary patch literal 14082 zcmcheWmH^Ex96Kc2oT&|f)m^cK|*kXySoKgcozyGdq1vv>6Btj$r0DvMTDXIhjz_`6W?-1U+mMr`K zv;Y9e0aBu0RNOO8);zpb=9YNR_g0sZO=uE)(Bj|_tjO!&0^kDj8da>;WW;=Y8t2Oz zwN{!dJJdiA%laor+T~5Q!5@D7`0%U74he&m3Pa?#T+)z9s*nEZ1B7iT&XmR}baZU@ z3UV&N-g1}Wb?V`M%D$H+V>ZhC2DLz>dgkMH-L^uSMlJZbqs~P_=}eQm&pnKR z=$m-|byXQU98W&xVV@z2K1vNYs+*X(R`qGH%h9~9r3(UJV@6&m+QK8sd|Z54k77`h zR-9cZnAo6atdx!Bgo$6<&y*{#|EgH5VS+8Ig~-F}A_DPmI->5b{4N@&-#OPiqN~uj za<9E2GUjHN9GlcE^&$p?o|?c)3^7>5gB^fiOvc{~$zu>pYGq&2+j7#mgefBA>@Z9s zSm+BEyF9qVPmgKJ^d7VP4&(noM9u8wW)7RukQ9{%{AG&d)Use6DN;1VB-hEa_A<@w z!%s1_=o;kt$0zkdCPRa20#tvxVW-{cIRaK5@yx7PAh<6dF|_8@o6(xj)B6x1?V?o3 z`;{{8bq&l}_(I)pZRn?jWH+l#IBoy5jPmw}8Ewy;mGa+f7uO;Jf~FT!fFik~i1uyk zNFDl&gaCafsdo?TRl<9v%VUtl`M8$#sI@h}wabl`3vAgPs3_-mS@Aj4-W_prZUqU|D3QMv z3+EYEH7UhEv{%jMuog6%gGJP?TRpI~X15cvZr!E^pf{Xb9P4tHokv(^U{YfrrpG+^ zjq5xc$SjR4M~vxmd1;V^ZA+C!HT*c6aJZ)Xy!$S+lb$jzKw`r4x~W04zWcQPFxdMadT6&pnUpJsB)@h=aU-0+0)vKj*%ar#Z^w)^1zeYFUMgg*9g#Y3^b)HM4smF4h#;+k|i6}_EyI<6Z03FqFWd!QU3 z?01f&UxEtg`fYA1JmwqvL9XK5ucwue@ta%(!XZ6?cZE2BQ5fOmJNFrUPEg5Q9+39{ zo9}HS9ZDB|fl2?dvr^08EJ}O1a{Ym%@um--W4C2J^vlLeaDF&K{V4B_i?g)q!EM&3 z=Jxc*)!_ooml*{ITfiX5^6bXdU6= z8#xhh0Zc00I&Pd+n@NY)?ob^$!TQsfw-kfCIhzJf8v#%K;~_kR@V=+Up&{sRmqJ#Q za0!rCzze=ELpGN`w+mBQ7?CyW!jX)&VFe?9zVF)Q3etd;pJ<6WdY=>dnNVB=_6UhtyL285Ot{l{c39>xB$DMwHR^OdMcU2 z7K1yCHvk~Q-gbCv+A->S+?-LNGERpwnG4DH+jWnC3OF|Zk0wK&MV$KdZ5B6=GPu9- zc34{(LIcr>=RflqBoP#A#P;i5iQ5h(xP(HtIk`PD&A!h3?9wkh%vg=5J>jyeAsv}? zK^c^=e?Ks>e{hYshh4UdDKSIcoa*jMR-05I?>jqv^Rj@NAgZL2aUGa?eo(Z_bnB zIBNaq{m$tp6hKRP7CSe|9FO0rUypFv@T>`o@?J&FLfapGe>}aBCdhEMUc$3zfYo66 z7=N@u%j87``N4}S{X~@s0)=foWU?y8Z6z?n8okEu;rIEXOE}cUkG-&>ajxb8xDn7o zA=9KcDL^ajox^#vWC};u=&Gf+Uci6QgU#U)x4F4l3xBUE4^2U%)144YKG{NnPkHwhUjQF8b4 z+MbY)cX9J!CWchNliKRT3*wELocRJ}Dvt`*$6XB>=OdDG7l~UjMmJCW2$LSRXhdqA9^a_g&lVlm6Pyf9)ad zRlvM;?k^3sV7Q<>wE9u^i|$j%`r-w4ekU`btb2dZzjUR4?{$Nea+A06R+EWEKL7YX zeYxby$L)Kn-;!AbKViT9GIy$JUp4fSCf?GS>R%an4&kpy#qv z$#&F`^_#Ogu4Mkj_l~;yn|y`$NTxdN_;`Vao2{F|Js)ZQCYFdEZ|k&(ayS6hrs3hr zlB-Wn<#V3dDMaBHDC0{ZVKBe}HX0vvNM@IQ*PYU-{qPJv`K#tUTHv4I@UZDYElu`M zjbh7FFTV(*?dn3~3)qKS-uQfVTe+|e?S=u=@ur%6|53!*t##mJxkNXgsGZ?^hOE@l z>9SJT?U$$G45=(t|45>(e^x=>d!uaY@YsHEo7{A;5~_==8-R$1+@4+;-r}G+dTk;V z5yiE?rmueOecw0&pHD~%ls@fXDW9FanHhtJ@Wza?{br9>5ob%+d9GN_ZGI=%;Id?` z+jP2I)y6dglR`I;q(VRb4U?KVY-!Hg74;bLOVi^rJtmI(HZjuBk^f-FLhLKBxy<+wHiIREXfqRe1_y|3T=vFN#VP9 zd^WybvL3)t8>*igXOBvu+e3PznD|LZ;GFhki8~am2dbulYI6t(09|J2=06UpRw|_2 z>BX4jVB_KplpyB*oc}6JZUE=K4f7&RnoRSZl}?4II@>K`xv5E6ajx*RJ@grCDvVbB)mHbclF)5l*2%hhz~<-KCc@uBR^9OF1Mg5a3TG zxO!hY z>5t~CHnqwp9CC&;`P4Jfk^{NgSzSX`T04t)IDMF6a7&GL7#$1(8Z^uJ94A_eU@mM* zc&zE`(*r66=Nfl%YM0*vgyXs7*Ah9?UA&v*n-73rSvhu6(`PS$Z_rzmfPA!;##PmM z6<3vxw1v)|mb)x!^pfe8D}$|>c;2az%4FIMsH*G`kL?lfU`_Zcz;|e?@k(312a2K5uie{@?>0|1pZrDH~SZB0@fAt2oyP9nK{`5|4_i z%IQk;0(8hv=mNwe-)3uWQ+hQ6tG;#7f>;$pZu8=N*6m^?O$HhAgSWjGQvnsvp9fQy zI|n%55iFI_U(d=#1|zpNxRO=6>hee=y8Tw+)Lr$J)1KIwZ(p;5xsA+3vExL3UL8bT zYsWSrvX#*^VYT+sf10Ci9+HSpHtVQiH5sB|2qU;3`yQnO;I0nPP8h65Bti!7+PXr3 zDa7{NH~esl(#0%NPchS%u@GEk6@KQr6h!KHy69HLF?Kh*UyXh$4}QOVx-<5ww2dnZr-B8 zPnu4RRJXh3eM~q5kzY8%hORxzYYIdQE$fL)!AY@cKG4Tp9V1XLuFBIvqoV z4{vA`lKwl7b6NaGXLn5YOwfK^Hvo1ajmv6pH1leu^Em{Ay*+TaSlmzH0pNNSuza8D zQT27_G-r=Ks3zObrjtq8_a$Qq|Il&BYN<*8Va6&xo6i2kz0so>gAwmj77o=~C&SKC zA~HpvO%vJj+=Z=I9Fz#|SX+?&v#ai=-&*!JdMg_)Ye8yv1KZ#6m3Yn*;h1D}vOcZ^ zFw&KoNees&a;-GyCt&|@BIKa12g+pMN|{#kmdAG-Thz#gYguV!EwlplZA{m;A{|ix#mafp~v!Y`p(B*q_5H$=+%sRmKl7Abu9}tiZ z-Ncj(j2fGXS4)Q^`nCDog=oWUBrbrPmXC?m2$|r5l$P$28FcWLM}Clj9}P>VxHlqU z{t?OFzbEV%Vufxe<3qbad3j%8gm6z3UZ!ol9uWM;()2)+*eAD@!rRFP23_`IQD z&dl#1kw>Bv{6`Uqnr8=`Jm?<1+eudIId~UHkpK_h%hSC$`pnAw^N{@{awluROg$DY z|BwhZkRpwB=-=Z zGdr(9$u|&Vud7DaV!q=DaNkQbwl#-C^ZM3z8xxaj+&WO>m(Po&$cST)oH#TEmi)7} z9=DrlBAxi5REe{i%BiCHZL}3WLvJr5R)z+Hj=O9ObT4>eJFM`By;Y7KU9F0LF8k+E z_UHOEHB4oeKWnHqj*Wr)=%AfhK>%0L9h+PVZZ>v*!G#nw@-mPe2Bq7pt zf6Fk%A|fLPJ&6VyJ<97p-txrWsO2C6zEWd@*A4i;?8WrnI)?s*OKELic_e)l^?KH@ zA$<_5ibxM57Chvgu>F7E z`@e6&!>_l(>v2mfo0-M=68-y`s#zqR(a zE$l&1I+@3xh)|n&ez4Ojd-2UjUcH3q^Gu7-czRI=pP(RU?^0Q@40`?(_5KfI_}fCzC^Hb&^sWb`GLdSr#I^AdAl6qXPUUhdAJNlztO0ple+8wYms3Ar{l$y zPP_nUQh`H_jkGiLN(YWUukBRLw^s}jRx(UdaWET+ivk7bhvTQpf1+)HaHfXXH~T(3 zTzf^yO039r>~b~&{8bW5hxCf{p4-}YQQQ^|N@h2c{}mWGxmex2_L@0iv6*Q`11+XR zKDsImSLkHdDph;kI;pE5wHf7;aCEy;7RH0lMi{tUAkOt){KUL8^8O2Uph9W)c0Di7 z^e@4ojsFPsW!};n$=l+rwDE4%m4|qo$paIRhtK({6>vxaf03K1*DvweXCu|kEy(>W z>7v|IkPI21h5-P|rk?*~r3{bBYV+rCOVBbEn~Dyay4oSg zpD^PH`DkdNt|YCDq~z;rQ!#AvR5z|+Mjd_-v9n;xk~x2I9cl&%!;+=y?rp>|HZ9N$ z!RY^8ypDx{m&?gbQ>Z|vsKr0=%0T6emDm0V?NoUVTU8heB+=P$y#9HsH;Nd7tva6( z3u{VP#bpr+F_Ogo!4rsK?>~BcASzEGh(N#f)?DxaAb26MHhjb>i(VLD=UUeHF*>-_ zFUy$s)oKHJXbWEdF={czt${i=R**yfYp{zE`T&M#R6} zY#$Uz7D_Cy8lv23Yc{yStC02Ti~hYT0`Bgjn8jtO4S zGDx$G&x*HZS(mo*($xgkct-ya&uF|Ez3_^GyH|DX649dMiBNPIC=!Q&y{Wv{cf(-e zXV%Xf=j$k`QMjFT_5Vp40REWWKQ;?)-cGB$<&7H0l5kleT+I36xQJSxWN8Ls@&m6V z8v$OUhxHan+wpj5#G+$Ds{MiOiFVSWHWJQ^iov9o+wqB@O^AXa0mJlTv(deg*PYPb zV#g*4|8L1o6AI%umSedW5O|!LaRWwCuI$@Ks=gA zEuR=z)zi_IL+@YS;CMZJ{$86k{TU*s4qS;ym0HIn-WuU$#yR4aJ)IeUWs?7&ichCh z;Cr$~vk&SK)9>SLCoW0(tJc@0k<^L=JY<$L4^CM+_8&Gfv{mD-C)uS8h8ms=B&u-d zvrav){7dDqoz8R#)?*^CiDOxeu{gRhUa<=K6|}i{Muwe~39~`v{s;wguhF2!ZfIks<;#d(02*<0bQGa;z7vV=d@|2`pM5VZ8@l}AomCt zXZ-1Cr23Ve02Vu(7AVnP_Oj$}9m40NxHAdQ6Wq=mx9LfWjs` z+Xn9XkX3hUt8hi=aG2BSYxR!#PJ&;OM^OW}R1%KO;{L)YR)~OHm6|4%e9K9Qckz-4 zg8zvq#}mj4%Qnr-yO9(iENxTWHZ!;A1!s(mGH^l?6FULY6xn}UF2!|{Ybkw$=V=@l zpE_5*snn<|Z_VQh3sd8(cLceCgg3LW3c3~X@S!q#v-0tBpB>x25n<@*3C8&BDqCau#7A1}NBg8$KxBipP_Z5p0y%^VaGRe-!$F`JV?P#C4_4ME}BHd1> z^8}&`u)m5vl229_RjNN*)Lg0LDU+Tpij5k*?7^2(-ZP{WKHQ>jy=!M7uSfPku1PJWnMeKsx_JjCCL} zUv2pXPwe`Qi|Jc{wMO2o+NhOX1%6@*0V>6H@~ zQi+VY|0*wr@cs+|>e|We^^pRZX=r=Eh`_W6?qBOzY11<2VgQ~d3U;P zSp>w_ma7xw0a!RDd9{v&Ry`en1CQo`f{zJMWQr)`(TX6v|W14o`eG0?Fy;uGMcBSzNi>*!D^E1YP$}^T=21wTC|h8m>Go zS2MTB3dXl_UIhnJ$Z#uu8SScGGTweu;}M#59TTU*fUaj&b>J1eui5!Zk&v0I!72f%wBne_Id~Y(@furM z9jnU5On@CP@_oou`s5?E>;_EoJ8n+NTVDGqrbYL&&lNkm!Q$^E)XMF@kx(c0R;~_S z1hO476Kv4mRQZ@^T1Ctrg>w#m2dj*r3Mg7uHgMvUM?~f*oP5?eAl&^Xj*kCj)0LAj zg<4Z-;w=d3NB_TBlto*=bTNZ>vEbpS+2hWuH=2l>Uk00DsE<;oy$jFt=8jl2$@PJ~ z`(?zaBIIQf81bcanCZixH#)!6Q0WgJGHw|*{RZ)@YNZo?n3jCYNqwe%PJ7a*RddAw~lcNWY zi`=W`dz;4NPIy1*JFnBuc(7ZZv*Z5MpF_}R^4P}pGLM;fUxaO>?7ur$4Ia=A;j zmL|{a28oNmBd!Pf@*Fr|Sywu16xQJs4$0uJjL?S2_^A&ZC4!xm+n#btyXiB0RHvCV z!TH*qmRL94cGD`3x%eOjdZQl<)t1( ztla*)@2Uvbihb)@c~ZBolt$*uNkT++qKQDV$$iDZlo@Tf<#1!93IRMM`<0vpMb&`b z&07!(PXD67=y&BM=GSGoM#|KaE9Q84;17Hm5)$Wdn^PVr%75IQco&5`p^0%bwF$d8 z_U`+Z`ECnpA}H{dnBsU(f5mPDm@Q<^9nz|Esnv9%{&JnRO^c+%uV(|cgc}KtF@Gy{ zS1s+~O8phVA^jxO)unBPbX$lH<|!!_IaW9MUjL3(d00yuC0!noG=-?nLbKlWcGY8|;~bX~cuB}1O7PUHZS>^lXr?{}`$=k{%u~^-hc|eUvHWa=)GnBI?G<8vDDR$EM2NY zAAwbqX_oD_7>H&nnI~Rw?yeP`tWMTsqEI5ro?ILnY93C9<89tMYv!u)A?p*WwZb;XBg5u+JxN{%SXNd6=g)VwYxnYDfGP8noKc8UnL@;7pNie(rx4#2 z_JWU)urMj0VtXn|YqrGf8mtvE)<622`vEETV}|Z$?0I9C*8u*Lh7%(Oy0q!Kewn?l z1gTPK*IkSRsBXJ0n&T#gzj%dii#B>7ran2M=|tbzURO_%(>)BAyDq|BQ9|=oV}1tr zw%X54biwiIj%OprZQ@t!u^R1^M>yEJuRyU-9ZY;wDV%RIZAJi4(k=3-U7cAxKD_YB zSBg3ttwqiJm`2%$K^QKTZiJ4EIFC4qgNX>lP6FGxGKn_5G&o6vo> zyq}imKC0`q8xKAS=n4q=?&nh9*1uZRcCPzoSa;t)^FFcsw1vZ~<@;yX z=Ji+StR!liPVsbCx{K;`w&me8ttzCS043|^156sazC5X1*>IRhE1rjjBkjZ|J7MaN zOECgNJ!H#63o*V`F{|mNmr3u`Y;5<{=y8w2Jy{Y6y*QZ7m)I!!f0A3PJj==wg5-vh z3VIwH$Xjt3;_DfONU9gme!~-9+!&HedvvY?I=vSaQ!i#AxW>d25zreBd9ll?{|s%W zHe4@91_+B?67h`tzJP`v9LWzC&%kVZEX{qzw{i}246UC|7{(@DN(M(fDYKOlp46fz zC96}U>!|guWCO5a0l@@^v1JW&B<(Zwt|^(Xh15&aYc5~1FgsYJZWd4}0iWaZd~4`` zXWX=V&#&3YHNT@1u8`cnbpIShCk7|L91B_pq5?4+RTyu7!Q+V1t4bEsR+P_th1f|O zh6ytn$db-WAQY-FV21nXjob_1i~d%2D|v|@M8Ou7u3bE7@_btc$Hw((lvD&DOdb`T zY-WP6shUR`x^hU`Z^oqjW11Wm_vhF# zcF`2Z5K?oyZ3F_vI?<%BRD`(;yBEKztkoBp$W9%8J?(;xMDu_e`=<`C8E~%|b<%Qi z@)%)U(#>Os4k#Yp$v=z7hAvfgCKZu93YE`PuAdM4lOpBb0HWA$|Gc{-)3JugF73!j z250~Y-|McOg7c1d(QX%E8u+8ve{65#52-GtaV8!M%i6)IG!a&3C)9$NB~vd%iUtmD zp{zP&_Ag`@^>;W;O|Bi?9es$S+?q53{y1eGrtjT>< zP4J*ji}eOyFXnVnZhtf&w`fq-ocXmsw-Y997eM!)q}Y&tJA;C>9kwn!;wNvhY`W`En~_b7c)&F2x~ z+arx;g=c@!wp??_JvdK%-G7|15Qc|x^NF*%FW@Qz6NZSS_TfD_uxxPR4L{yFLs>N)lSl<0J zyX2Uae?>M~*{HaG2a0JJw{F%4+XZT&575v4zH`ZL{=nGXPg{0O`eoD)cN?5FsX29! zOWtYx9cgOb`qhBc)|k`M z#go;jOkKRrNuyVuQ12Zt8<+b1-k$utm+0GOM(_K_hOb4}?5aW=#;|m`$q7K0h2BDvODX*}P=CtYCLHJ==GYNS-wIDEO79V-9vC+>EDT{mz zt$8^Q9cJ^MOy?tHbBDvOA&`z~XR5#ULRCQjOaS`B;*>=+8qL?B<=K|Ta&xr*V-nNo z0&7vxaC>&*901Ta#2!3<$2|3-ZB*H;)5^!K4L}hDpfhF4L63qjzta{lkNUmbj;8Gq zbsRrU$bE5LIng|v+4FUuJ;0Uf1m$iNmoo~1t%}J(kQl}>^*JK66r&BWca}# zY;y#93HT|-WGFsZY<=z5`C(*n3>gdm0+)5wAHg#_;NVEcOj`ADO!-;eyxU3-^JiU# z*0a&nu4<^p?~4=ms)RLHT8b_$G=k5aandlK$<^`LLONaf+Jn#!pM|Yj9T)(B-<%_2 zNtNPiOc=0}%J3_hQqr;@UHRYCx+An{mO{gdJFJ-#&YunnGQU+rDw@Dz2=3*b$J6W8 zl5ZztZ)i|h8Q5R}fC`yC-0l9-B9GCVn5xc(C}+J9^3UV0k#v4~I#o*=3*ZYO{y^Dv zDGJj+cOA;?x?3~4_l^ryGkeYf^+YX_e=arOwOXy}^;^8)k?1C)Sn&)@V68TIO3 zK4Ig^daSq@o!TZ4lfh$o9v66@JVy+E_~Nnf`)*jW{#)!=IyR*x7pfauGB)KwZS=k@ zA?yROPjMr6wmkW3LYYzRfDPI)TJ?erJO;pDw89X`v$qRgyeqcNrbHD+6YgpO&0L7b zTz>m%JVGT9{kq1I>(4rJdiOpUeM#wm;K6;J6yY!*?XQC&4YT?aL$`cUAnisFJ4=HTL*m{j9W#ger*p4(uHBB*bFvU6DjB3)wE z`|>eWHs%dMiD|?2s@U`opO20*fe4p)vXC2+RHn}IyY*Wn6=4KUQum!RuB!-jMs44t z=fX@b{X`#!!;E<;L|!J<=SXfSgj;+;XSA@odSCH9BiPGKc?p6aepKp%WoO%G@@Z4pC@-y zkN`um7bS$|$-dsowTyw9dmAr+zIJ-4w5)gROV#=Jj4VG!9sGOst!teJ*ToxCy_>Ni zNBTnGZ(Av~n-0BIu+!?R7pnUvP5)NWLG2}5X$QFwD5CfM7Ag4_O2};EHYk+BVBBFC zXqBO-{_R^6O{-nQwpoQyh&1L4h`d-u6vmrGu3DZh$`}AR7UWiAmWiMO;KRcO-M$<( zqgfhFJH_tk<>z%hHo&8O#OV)*0UR@{CFV)ew98<=xowK@(SCVZ-fhRzv6Sg>nuuMP zfCGr=@ZUKPRt`Tc8Hu$az$r;7TD};Ib=(OZptfat+)hV5I7-u-u#7R{9K_yahvZfs zm3;gYgX73o2n?%w0aplBt0K__&!6UVkDV;gZ38iDy?bGUJM}3@8dQNjqeQ-!y+?S( z%M&Ln*Ujq9rW`P<9nd+u??He`l{9=(C z9lE@5#M*=nv9cpR9KkL>sw>)`l+pkI1m5*ZJCNV^Qz7M2qOdW;)pL=5S8U*PeI zLkB1_E>`=K+URJ+ZLyLaPgQsA%g|&0n^&(e7!P3aiBii@e z_bD3TPkmLb5LCb$Ci7*qiP6Uur!+t4#j2dlI*Ne^6O*~%n)7WR@U43BZIO(+&(&7? z45?l=blEf4zm6vJ0-|o^<^ta|+z4&3+mgrojP!=u%EwMdrX>_kP7=Yz`oZlguzB3w ziTdcx0N8TTadDF}$bT!7Nmi)EWI!_X%rK4 zjb9C;^M+|(ha!L$xx<#|Jg7UPL6L+>j=nEUENa1+6f;{yyr96A5;CBRixQ~x!7NB` zUSL1Yw3#sfX};M3hXaTit+8S6l>s{t?;ixiB9rf!9`a_YB$zp2Medy%1$=e770#Pd zx`915cz$(C5yL#pYk2vyqvn3ZPA{5^ZH_&+J0B<$FdV4Y?66^lN?(XsDB9l&B8CV> zS(kr6iM8+@RH<@WAZ(-7th1X4KY(tp)YCHNKWr0G7~H@K1>e?@Zt%kN~tt;#cH1=*_0Z@`_U-kK)Ql+cI&PEn1b5Fe~v55ypd35?TcSDZUuj;8S zrh8HzLL#kIz=?Bg&m~MRhp*}DuUEK~S(@CO=Sf~KOLhFSM7iBxE2_PjV LCt4+9@Z)~~I%SuK literal 0 HcmV?d00001 diff --git a/README/设计模式-v2.md b/README/设计模式-v2.md index 7592b24..b2292ec 100644 --- a/README/设计模式-v2.md +++ b/README/设计模式-v2.md @@ -1098,7 +1098,7 @@ public class Adapter3 { --- -## 组合模式---结构型 +## 组合模式---结构型1 --- @@ -1106,7 +1106,7 @@ public class Adapter3 { --- -## 代理模式---结构型 +## 代理模式---结构型1 --- @@ -1604,7 +1604,7 @@ public class BakeDemo { --- -## 状态模式---行为型 +## 状态模式---行为型1 --- @@ -1817,6 +1817,97 @@ public class Memo { ## 迭代器模式---行为型 +**定义:**提供一种方法顺序访问一个聚合对象中的哥哥元素,而不是暴露其内部的表示。 + +![image-20250203173419155](./images/设计模式-v2/image-20250203173419155.png) + +需要角色:抽象迭代器、具体迭代器、抽象聚合类、具体聚合类。 + +### 简单示例 + +#### 示例代码 + +```java +public class Iterator { + + public static void main(String[] args) { + ListContainer listContainer = new ListContainer(); + listContainer.add("序号1"); + listContainer.add("序号2"); + listContainer.add("序号3"); + listContainer.add("序号4"); + + MyIterator iterator = listContainer.iterator(); + while (iterator.hasNext()) { + System.out.println(iterator.next()); + } + } + + // 迭代器接口 + interface MyIterator { + + boolean hasNext(); + + Object next(); + } + + // 定义容器 + interface MyContainer { + void add(Object o); + + void remove(Object o); + + MyIterator iterator(); + } + + // 列表操作容器 + static class ListContainer implements MyContainer { + private final List list = new ArrayList<>(); + + @Override + public void add(Object o) { + list.add(o); + } + + @Override + public void remove(Object o) { + list.remove(o); + } + + @Override + public MyIterator iterator() { + return new MyIteratorImpl(); + } + + class MyIteratorImpl implements MyIterator { + + private int index = 0; + + @Override + public boolean hasNext() { + return index < list.size(); + } + + @Override + public Object next() { + Object object = list.get(index); + index++; + return object; + } + } + } +} +``` + +#### 运行结果: + +```java +序号1 +序号2 +序号3 +序号4 +``` + --- ## 访问者模式---行为型 diff --git a/pattern/src/main/java/cn/bunny/pattern13/Iterator.java b/pattern/src/main/java/cn/bunny/pattern13/Iterator.java new file mode 100644 index 0000000..176ec3d --- /dev/null +++ b/pattern/src/main/java/cn/bunny/pattern13/Iterator.java @@ -0,0 +1,74 @@ +package cn.bunny.pattern13; + +import java.util.ArrayList; +import java.util.List; + +public class Iterator { + + public static void main(String[] args) { + ListContainer listContainer = new ListContainer(); + listContainer.add("序号1"); + listContainer.add("序号2"); + listContainer.add("序号3"); + listContainer.add("序号4"); + + MyIterator iterator = listContainer.iterator(); + while (iterator.hasNext()) { + System.out.println(iterator.next()); + } + } + + // 迭代器接口 + interface MyIterator { + + boolean hasNext(); + + Object next(); + } + + // 定义容器 + interface MyContainer { + void add(Object o); + + void remove(Object o); + + MyIterator iterator(); + } + + // 列表操作容器 + static class ListContainer implements MyContainer { + private final List list = new ArrayList<>(); + + @Override + public void add(Object o) { + list.add(o); + } + + @Override + public void remove(Object o) { + list.remove(o); + } + + @Override + public MyIterator iterator() { + return new MyIteratorImpl(); + } + + class MyIteratorImpl implements MyIterator { + + private int index = 0; + + @Override + public boolean hasNext() { + return index < list.size(); + } + + @Override + public Object next() { + Object object = list.get(index); + index++; + return object; + } + } + } +}