From 16a1e2ce10994b54599d412b0b9784bcc6bfe72d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B3=95=E7=84=B6?= Date: Fri, 19 Aug 2022 16:18:17 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85=E4=BA=86=E6=8B=A6=E6=88=AA?= =?UTF-8?q?=E5=99=A8=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 设计模式/image/2022-08-19-16-07-29.png | Bin 0 -> 64701 bytes 设计模式/拦截器模式.md | 143 +++++++++++++++++++++++++ 2 files changed, 143 insertions(+) create mode 100644 设计模式/image/2022-08-19-16-07-29.png create mode 100644 设计模式/拦截器模式.md diff --git a/设计模式/image/2022-08-19-16-07-29.png b/设计模式/image/2022-08-19-16-07-29.png new file mode 100644 index 0000000000000000000000000000000000000000..609180966eddb039c88777379d916e4743f5aaa6 GIT binary patch literal 64701 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

0m z4CFIK=Aw4A*n#*FaSNDBYxRH{n1@@T1-l7!fZSpIWzbocOsPG)n)vLgfPYMbH%3G( zn%W4fDK)hM9|{#aG5PU?+!)Z5(FR-XIvh8Y>X6b^rKGWi3fJ@gu|e*izLDbH^U z#o#1;Wbu!`dfg}re`*ksHQ_l|J zK0|M^tJa-2wG}q`N9ub`{&@YeIXJ+;|?WEd!pxFjyW@rW~O z&X}+T-Usac>%J(%FytmPCnZnQA#9Bq$V0PVJxzP4zKseW%3dXT~h){(s!;fzg+ zh@E*hlf1O!E-YUeQ}+y;%nUz<(*DP{q1i`DI1Gyq4$H2}n8-0GVSeG;5&au4?+C`b zZ3)wpD&XUarWt?!jd<$jTns2FKm_r`Xn*U^5iW`eE2{0)>xSNgqqg>VqEAg z7@7(~4e!Ay35Cv4eP}o`i>IgMn6T;jBFfaJbyFxb$#FfsgI1N$FFD_JC%0VZA-cZt z1r_I!lCM$3lr!e@c6=KV+!om(88aD7t*WVV6bndlw!A4yWi^y3_NUbE8BB!?+eUI> zirulGF_7uU$2c}SNUeu;YsC1WZbdY^z9vS1ma0-o<|I)J8GjtH<7ED(VDN7Kv|wXL z*fKoV?GUU{@*{~uFf*e}g56NfQatc4?r(GVOF@U*%!~9j zp;9=K>HKy4HE|V^(4IDEABQtJn@MhwZet%6kT(ZI|S3dG-aHyKJ+-)+Apx;ZFJ z;II@C*>G&n*w~d#zE9tLv>IW!#V`8Ns$+zGFJ=dY0v+Edm14lhTv6LXKxQA2w`)`r z)Vc3cJr|eiQ-6&B)^Dcx0|q|%=R|5$dQEnMh#PdxQ-#;A21b1vQbSo&TjlvFjHHnE z@I|_-+DE?3SpmBV)&eAJ`jI=6^%dg;a!D@OlhouqmgSD$1iIQEs#;F!&z6u0K9 z2{?>7hycOnEnq+v)2+nD=VW<+T{;E%_9Z}>BX`}ri@5=l_}sA-aQxogXTmJ@f*{H- zK5G6@w3%16`nfC-Bmh_Ov0EA&Q~Zu+!)->1(I9*#Bz z%+4^))0|71`8(`33g^(a#KIB6O)ypJk+tlwBy|}Ypm#tSg5Q0!JkN34muYiN)Y&mT zMcBh~8hZY_%wcta(9r%sYS(Nfr)B(QQh_>ekZ9K=?B3q9{Gs@uf3`gSMkmt|4Ocre z;X|`BZ84W(3t-$zE+D2ysLNYT_Qk8{oRUoNv#t_T#Uu)GPmd5lbqUsb@5%=|-vp}8 z9k<&a(R3x{u?&?&zrR^yw&*nf_Lp{LGSg^Pz)4L;?sAy?gk(iz82B&Wpcq&-5IM#f zn%WHE$-goq{iR@5jrk~Q3B2FO1mq0U*N#o++;ERC(Nm6ZJx_4I^ETNr9*Tj=BF3PQ z!VwKSe|W`b>2dC#C4Qqq^FDOYmQ}R+I^)}O zS?0jAeQ5aV0b@UownV$>Y2JUI!SUCP=vH7VY1i;UtE%_(ODj>l@h@3F3fnW-FKga$Q72?!gDX&}8roPQ&BW*{pY%K^dSi)yQU{J)X!ch(DC6wZ- z@^aY`W-R4+l4>_K8sx3nCisfere*G)DL?X|x(M$p&TWFoHmXyH^$76(qWu^R5Q)C& zLpy*`67dJ|l0Z6@Mf+c?2nZic8T1h$3Ygnhu~Bon5gHM$%d~J&YkDqkJZuLxL&MUk zC_Zw%_h^UTuJ{<#C~FgZFRPsHEmPgINVlCijl>$vbsuiHL1IG!KPXZB~jk5vI zkKKc7n9eZ+O+>*m?}lwdlSvAZyWc;P=;-%$fxdg=6^{jl`B_%1H%`hf7dUARIaI)I zAb&Y{8{zyiWoQpXf}r06XCW69Dp2rDig-oV3)n zvk>09G6H89>3Efa+-toKl`$7&sgD-$^c3!rtS+=Greg2rV<-Ddpl_;Q|6R#I&;jG! z7vhXcx487eWiqo1S&2__gBRomv<|**-X+lx^atfHFBBQd&Sch`IjBnuha+w|6u`-5*JwM4{72Kw#h5{V17eLVQ+Xzg4Q7HKayJ9&;I@D*+<|J}bB1>w+ zS5+k^Sie$-qm*Qct9YE*40eTUjG>guPGlckVb_INYFVTSlHXJZC4b1OH>{W*q&iK| zPWlt(M-* z?W@NmDYi|}Pm)(fRWol1pq9Cy-vHP^9T9yBeLd5Kg*L1RJ-qAm5hebOKrlPlGym=_de`fo!!XqF z`GD#npX$PpNccX^hlSG=9#K>~_O#3S(;K!PdZf!Rv*=@tl6#ACk>b0xi`!46vW0|(=~Bs`WYq{YuMW&JO<{oZfyJS>cZv-mF|&wAX)Ybx(^0a(YSg_9zs}Gg}!2{^9!I%4J7aJ};a%%fBo_ zYafo2_KDuiZqjGgNK24yEwuj&&e= zX5KiuJHj=0Kw^v>RP%O?HJE)Be{yG`RxKhq9zdKEq$9yljmP4YMjg>w<~j(bC`@rv zo%)KOt!oZ?-{a3mzejvWNS>9I18SRMWA`q}cg&M5oWZo8ZE*&{bXa)>)1ewnZRbs! zbl8<z2}{=U-Y zxcDd$nlVmq7X4i>I%fT3iQecG)-nlYS+S2$7NYHVfQw9&-wiykGd~DJCKvF3Ix0yf ziGT)|maH7>MaWC5bwj$p0bAwIjAEU6@d&<$U0M@R&7wN_(JH%WxdO=vL;=0XTr{L? z`PVYBP2D_FPeOo;Mz9lXTjb}0Fzj^W#PO|FG7jAnyj>ONrmPB4EgVzOU0=gjKnS#&*y!Z=@jvd9*(h;+GX|cyRRIJeIhFR zvlH5Ohl7%Loc$Tk$MoG0c%(J=YsLK#1s;{Y?tTxn( zp+on((`+7<`#`hAL3K7fB^6>Pp#s|&F;a=) zV?+W$!^|jDD}k><Zo+Caa+n!ywo_{-#0$mrgQ?as}C?vi06Fs{Yl2Si( z%*Dkjno@w`ShuyLP)Y^kpwGDdpB2{7pWA$IPcsH&LQmxEbUH1fJ9+8>;M_?mKIhvO zTstiO=?7L&ms55L_~-t=EcP7VNY~1rx`jjOf^dH~CQysC=L5jreL~1@Yg>zG;o6i& zdqeZ%&`eVi`UDngXVXX0g7Gc4SRj--XK%i6*Om7k)R5f`b)$t*gkiNITSVpzPdb`qMy6~~qVl+`?Zei)t^dImT+^(6n z+EnXW%to6=F)gbzEO6)!44ONHZ$+kJgQS)|GR;wGmq89q-RY$e)Z=;VpqCsoh2j%d zF%g5H8oUz&?OE<1%VlA_&>dKlq_5`okEhKu`>m0*5d(qRs*e9x+pLe}Ogz>h`FuQ*@{bZJKr3%bINNtv2f#esdZ_ruObQjLNs8aGG@oZqcL; z$^|!@%(euamvez2Du2Yek-Y#z{iNo%vSzGuD42&z`lJd*6}Q;7;@kwW&H$HWikp*> zPm?lEsNyY$h=Uxd5#w=cv|m(brOTsszz|vgan24DUpS%~?hZ0V(%Irq zK1WlUdq_A(p^52NxzZ>A=~f?I{PlMM)EL?ONulI0pddpwrhzj|1%QuV;q>gE$a0xh zYNCF((V`9;{{%ZIRZ(+(3x+wflkvXf7PHSiejG1m_jK+h$53DAj}|cm!49vGa}z*1 zd8Tw4kk3!q7WV?Mf;)d{U?EK(#+zR(uFT$&<{mQQA$Fsl5sBE}JMrjFGP zP66x36di$IRKZtu8!a(P8~jEG#HpJw$I7iRG5@WWoAW7jJ}y)&KS>6GPF+&I6y?ie@+To`JdVffeIm_(JYV0RTkZvG>7fJFw}o zRkI`WW`=!1!iveNI8TJ~4fZ0aKCe%pJdvN!Q0Y6_G=!OV#>L<|h>L@Q$7Z()ljy_2 z7mE-s^z12ZxB0T=XHZ+82MN=HvE9J?H%=g+H=!E;2n`^mMejJZAU}=XfELzsc`1FG zHGH1+!7sfFbjeyBLb>zBc-^CVro)r-csU3kRP2kE!MarHCdKbCd1DoFr9`m9PrWc( zjQ+ab5fDtI#pZl?)Ej!Oh9{l%J{SlUg#$sd`ij2%irSf?T1;_oF}h#N&K*~OXejiO zT6d&dPZ@diU;RM&wc%HTqh(tM${oEgZ%flV&yOp&C?DV6u7vX0OM0}^icr}7uk;w! z%_>ce)~1WwBELmfwp`pzX&nm_3;19sa$^6lqNA&a$B;<$xMAl_nH%yQO(8qTdD)-ui&Ts+$r$eIIOLlHEYGD7y8#npD3^!aG3Z=e&`j7PB)@WO?8s|d;5e8`mK}4e z&QP^#nki{`7WC(_^JM?k;?j17nQ?qxK2ua(9M*x?kgo7zl#q?^g(L2v zp?tnSstqK3Ci2slw4?ytYO-%}di&?ww<4KQl+g{47KL1D<293(iX24`MMm6 z49Plv-C^*_5XR}qdDu9RGvw<1EJ~vUSE={ zT*3Y*zzC{sOHyhX6G=k|vQ)aXA?jLv-eC?Wl~I&MUJQ^ZQjS6{-DfPUW)~K+Fh(nP zd*1S27K@FDJGO;WkoN2NHnE=o1ah_~L{LU)^ISagrhzZ9g}V%jJK=K%HB{)t*SlVi z?qPko?SBDaud(nrV*2wMJkH5Br0UqF6sgqZR`_B`ip`dbkrfV7qMZ``1U^@?zUp~7 zkITEHbX5}M;U7}tw4+21hg)gSx3pUOEw7rJDE2J^U>r6n88HvD;JqwyMMSl&p*J&( z0;b5*Cuu7qF5m6MHP`?0Y#-mP1U!TTV+2MRpC*x8<(JOe0C=>u5{luJ-=mWTDrL;L za~B9dH@Ng(l0Ap4Ehq)cW`83f=b0>+oRDmsZQ;E3V{aRS*JsKW+q5i1*g#jwMd9mr z4oD_RZ5<0sq{y45p8l@>?_J+}uMMmn?Iv~Bg8t?>CDy6yekUGDTrdK45ER|+x+e;I$h7kwP?G$inX zas0%Okzou!s>dHxYHoKMp*T;c9^X_yZJhn17LI$aUba_0&NX$;`o3~I`z)k-r*GK) zM&yPRb9gBD)?!Kq{D(^XYraW|e2~;~fZIVwpnbbX0dm96l~&Ud&qw>y#t}CL8OFuB zB(HhepKJQdOF^cXk6z5)-Q1+3T-?eh>c5dXrbV@`&=TCJ9 z*Hn-Y{i?%i(GG(avSW6^pyP(x7uch`o#)Z9LKk62#@TOke{v9vdSXZS_5Wpnf0!jG z`xUQV^-)sjjoqK0KT1BJcK)R}wGYILb-GnAwcA~ZxyM}jgUprO=1%qX=~2t#)8v&c z3C;K?qz?#+hhCcE&_vg+#}!R>OnD%vC!;USd#)}g_#4J~K9={#4EKw~T$>xP_RsF7 ziPz_@*W2NGn#jSr+~=cz$+q>vyZqzlg75|X1;_6-w`f|VlxoG|b$qtLJ^+8mu0w_X zRcXMb$lxyfbGJ10*Fxy}4eX;zFbffjq@5Z(AAlbXbG_%dLNf%=&ZiArB04vjJB^>X zR1&LO{s_Milre=CBja^Qrh6)F3%U1x0sY+=`p1x5h1YK|jdzqt;iqMu{F*LmM|qAhb{|Q! za_OO80jFCULc=5Ez(a@`p=x>ggrcluywg5@-Dq+M3g)@0Dt9p1>MgwyahS9P@rM{E zvD#JbkxFeVYBarpakzWD^Ix-8M!PHJjtMkF-yZ=+cC7MQMsWte!}=mi?BVzr@axEI zbyJZN$2OGFE2*Uh65rtWr}%`rR|u<3ebU1vScWRdYZhv74NDBwzp{LRtwX~_!n)5l|B{G{+J~P0 zk^ORBb&v1ixZA>9Mu{~V6H{y;1F0Y#QT|>=#z(}S8<$UjbliIV{gSX~g`G?xuV?xzZ5W*3CI0ZlL^$f!m+DX5$yP>K zyBuH@Y-b)H%w`?Bs=+CdkUz3Y>xCW=&P-Sxo=n{bW*iClXoQ9qX6#}e9N(Eq8v*LD z;x3VSQm1S;H3T+@lTr5td^VWf%0W%howjRa)&-jU<@yAaeRf)%S*V1H`H&p=Uz!|f z`d@y<;?zk z5`nk!aKDOGoo8X5+!t-iRho~=R*c!8z3*(!_P_LcP>|lA7l4+LK9-&f>P3{#Vn3&u zNz-Hr!WEj%lKej0O>yV=lZ=0f9~LK{?Jo4a+LAn&4n7qd&O|}LAy;rGMqb7HJFMEJ zmRkSFgeAdDAtJ(uQ={O%!}O|DvQWQ123!E5=2eO6oaCUSfM^wS=s7= zAA=%vLTBHu>QxzjoH(~@d7;NtqXbn6pa9hn$^CqTnh_r27B86NDBD=?)LkXjqU4!B zqQ3!bZ3W1e13v@{om`fv`BLhFV|$;Y{YuV9wZTH$A(~2(x8vet#qdp|1VI%>Nr4*=Bt3J71y1;t&&8d;8;1ocxs-0qHazYqu%Ixsq4NQwuqb#sZhs`K0vWG4T zP;5Fl`|-A`!pPc#2JH4L)T;sMoP*_5(`ZN?r6r^m0XU~l6RhEMSd#dp{M`n>_qJXS zb_vN%#>*tVz}c&}TF!Rj^}_Z zz*3s#Cub+cB#Zj_6(-&rKL5K-cpn!&8fF#R`_iebnF!Ac2!!0s^2!uC3DOPEvU$qq z`7lCPetx713{KoX>lhj=?m-W07Z4RIHJx=e1C9YD?0~pMPQ;tI?Ve+n*7X2=0xu78 z(4AhXF&OOd&EEN)iKXobtVBzIb<@~>e@ES&n@9Hl+aM&q+?kD3-4l=x|vNu>L#G+*rzmL;vPH$Q1!?gU%eLgZtmxjk*o0;+p?Etu5P9WiV; zL^thbNq2O7t-C@B$9^%Y-)lb5+qYZ(SqnUTl-<)MM?ojv}H{oFC zM+Md&2Sx3?`O|8fXKJId&2Gy^`9h30ylg2(?Lp99D<^{dz`kR@~ z81))Z(l`f4SA{DuRf1b}!g_7}q~s*SOY?RiuvHFqLkvtED{#)<4TR*7c0p-m&VNDN zeMJ6bN4a^YES@~+u<0O%Chi96JMAN;gkVx)9Way1Zk)(;Kdal7om8buKH~V(!Qb-0 z^S+&WJox$LDXjb7KV%Up?@-7;ZTo-gErdPz*ST&Mz-cC`#$O7CR5*(ux3hUv-IcR% z>P}~8Im*hJ`swZfsD&jZxn1phS&|3DUONy{%L?fUa??flLzN0gQFub+#|_yD;;z37X&XL(;8$qK_={s z-h52S3%KTejvJe70%wzmr|DaWkqUhLK+y@?MG<1e)kjwY_$tI&^Knl{{b1XuZk$q; zjIC8S`HPg-431W<@n$*9Soy42$sXUf3-@>ys`q9}o310RJOA>7A!sKww2IEO-m}tn z260cLt7o~hR%X{Ig2lc)2G`y!=e{7nhLjBAlDeliz|jD;zKOH#X`f62Kj41N)gjX6 zZsiMRvr5Yh(A(T_lTV<@D~v=YkFJE_uv0{VX<4Jw7gFo3wXda~1{z44kaM(*TGH%3 z{Vhh(9NN6yJzS3+w^%(2<>(Q$Ko3D5=a$vzros!avj;@aW1_N0#y>G@tj!c%Ap}`t zB5z=-(9-#@*6x^aV?m!LqY`7qxX&zp%UtT-bKe!-E&qEeOepzwMOGpdKQbu`bM48l z;g8P#GMkb)P8T@sFHVRaD7V_6(AH&GN7C0%#~~3=<^Z2Z4bd2I z2S@6+(wn=_Iy1%QlV)24OlkuU>pdxJ+5|=fjDMdxL6nAQ;O=)q;DN9o`rN*^13g_{zYTtntiz_ zDPZWe1it1XD2{6wD!+l1t;8`-UT(qJ6f*MKz^(_}Fs@++?SR-{nitcR?*c{d0%5Do zPxi?y%H>jjPrQHlea0U=!ANWbacqdC=IJH>%NxYXH+b6M(D`)qa1Xmm z)uX9%EYvl-n-sD(-ue{uFe7|Wi~B%pr-zljbnXc}a*}8lnBDvOD3bqbXeaWcC%-&1 zpiTZ&*Awvkt^lrllbMJbGxt2wr;Red*2KoBR9FmkFu^?`sd5XP(i@eGAOy|25d(|1A!%m9AN2-tfrYclruVnbW$7G}kEMBE$9zstw z>>b{H`ucMEIy(L|diuP2x?k)ua1b~*PtRTKG9&CEifA`FOsd7BsaR0IMica=lCnA@`%V=mEpfPmTHo zo1J}_4Mu6Ipcs<;6de&`$*B1*1jsiV>RHLC4%9O}!vAa2l})3;SKSO|<{OESz&AjT zfzq>)4x(a=yN@}Ez^DhF>W%*?&FlYWh}N#FT+=mLE~l)=oPnD+kC_7g8Mj{%0?Q`9%ll;)-WA>@Pktf%6G4ss87FamE+k zjZuvcO@#1r8pOe^(l{~agtuBkccI^eLnqHq0+lWyB6lRas&B0RC6hR2;6mfo85T)t{SjEk}{MdU~Kx@ zW%tQ2;=;3}NTR6QQY7>m_L|HnWq(V6eMj8G2g;z)*)z2EGB;3r*&V24=cIPU|BJAJ zbImYCRAZ%5JtIl3emfrpix09gMJCuM7uT3)G_J5j-Knt}ZH zX?!LBelUZ5l+$Kun(jGfIUQE`H|Rq8NZAfBLKQiC2cs&V>-T2>ZL<&D5#W zqu0{_np9tYmkmt%%jdx@v7QjXE7^J-UqVgkJ@Hj`!<(xHo#($lf!B>JnW- z?iz+L89*q=t<9Vm2u0XVj8c+gHB1!-QJ?6}$W=lwC6?S`F)Udy9I78G*GKUC_bT|AS%1@qcu=$R zi=K!zrEmbw&+bGIr{>y}UV)IYzObmOz`$F7l;6!VKS zpjdANaX|eyZ4ujcv%<&4s+CkVh8D%xiv7zc`SqTln!_Le+Gogc<8veC4s5^}WfPe& z+{r&q5-cYnPR5mBT7zHaILlg57CV)iDa~~{xuYtY!LoioHv>zX=G6Xc%8=2|1~J zOD6>jd9IacXZauI$!Jpayg%H3i?D^2H8xfhhd=%ec<}D+aGeq^{eA4r<1d|VU^ ztgxQq|EuaPgW~FcXxLu!QI^g1b2eF2X}W#umJb)yzjkV zee;8=p=xSo&YrW^+TFdnOKGvvpkoxi@1`{rG(?xWKX%YifBQ8wpM|>B5Y4BGCk3Ak zcWLkqR1}={51*}NGJvh30hVVZp>U_rpzbT*pcZh|HJhjvw==VRTxG_ z3zvKz`lEwF=5iM#4?XZ*K%|wL-~)gf!B&391K?Jt!F~WFNzZ*u2VNnx4NS=V0n)Po z`upwS2gx&w{_jRl%89fKq2up@GJ@zZ^;9Cw_R0~thzYbE-+*oXxq-8V`t6;2d(T4p zOr6?sZfo!TI0jU9z@rmOa2u;CWd7;hOXAaKb=#KZ#ODI0C-O`u@vbeTuAY03LHSeP z$l1jsz!TEGBJT)b>6Vj*ZduH2MTkbQ*U||jP!|)uE}>4C>2BqwkxwTFXRVI*x-V9$ zjd>>_J>!lUE26>FP*qh1vC$z2Sf$UwfF_bHhr7*p(%iJ8`{#B zn0sn&of`J+|G2??k&5C(e4n_BjisDthvEs$+}j5oEl_0E%DG<&rl_7b2%a_w?t=vf z5>j+o3zx@sn$oXR{ehX!6hJW+;v#h}+dA~SINWKs8Zq)TOg9Rl7^cPyP7+K0 ziBSLHHB#vMv*0e9V87%d0N}>FQwl7Zb<#NE^AOi06&n#7T$}(*L?v=rv#qSh{P5z1U}pG7Imftaxd>xh(k-jdFt%RR&wD=C z%-`u36?cP|X>xr6iK8L`soy-50 zD^st%iumo_BMrze6PoRP)=)#b53AT^Mu;^mwSv4a|7ZSo27uHJIRj#)tV8xMi}s;0 zd5mV23EvqKasiGAYQ6v4%ND%QhajgQNn9av!S!y6mXo<{y9_jLboEPP4Mt8|l+ui> zr6WuScU6c6>f`m@6k(wpc48`wCB!-5{ojvyJvDSVc~n@3g12@e>`n7O*c7W()Jg=! zzOuJH;O?2Mbh5EMc`-{EAc6R0yHC_m~~G}@)(Cmq|7(i{jpm=&Ih{hT?u#+ILnyUZ!z`HzCc!|rkbHurZG4)vn;ht_rx<=BPFLGv$AoVBcO&YG18Pyb>ljath11sp#J0U+Bp^ zBaFzY_HX}lI(NUm3spcfdwmaXx$_@T_X*YIxPQ(4YndD7cG>56nj$`!?*>&it<9FF z=t0v3p))Y>*QwXy^wl9oc1;hZm0cJ}uiU%y3FZCG3m=o*i>y(hEFA&Iopwk1P?f0X zV^E281R&@Q26$;01~5+Ah0A8yaXGU}xxkP^EEtx4%&p8Lk}{>8h4~G?I{pmrhwx zqELYHW=GhVl}GtJCmac(`eWy|(BdUo7raXLPYLIz@f#$|Rh3S~1u>=zBniU9f3hm6l}SI-{{qN|4#vu2JGSKQ)puxrjAP<}si9;63*jg3FZ z3)OmM6U=LYue`fMt9J1q70k`;hU|N0@&J%KzlV2JCiGmzM=;F*^;B5RrPa>DmQ=kt zPg4E*|27D9ULF7c1_5Lqq@CSU)>%HO+L1tgOyE?WfUd?YT@&Ub*zi#KU~yK@n$|lu zLhC}nT#6UqDnlk!{>2a$D0dF(nA(iV^V80*3bEk?m>e75V0ViSVfL%9!KR^t2P30& zyH+Cvk7T>UBog1V2ziQqj>1!ADV-KT3s;+|OArtYmNMcZDwLDQh>m`yZj_xtbPd)m zG|o6o;`zT60})zXz-E?5z;tX+0Z!?&Gh_>ne(!AF*P#;=##mk``$&90O`hW0FPr!% zm+^BHQ0hWZlI0SS+98gq4u1rM`1#2lXx=e`;*jgFPU2e>7U zvJdlEEuhk-=jkkn3~v@m*LIYM#+D8N-vF2n0Itr%{KY6s+pNESCpqqg{Kd{V{~X+^DrSUVb$88x(Vp*t^@gDLlgy6GVI1G_UeSwZX9I z6O`Dt3(6?@a^em$pbE1q8zvHW&X@{B1LRmAmLWGVZ{<$aPm_1DA+PO0Ufw3Ik(^XFMlzNVMs9PAkVMep zSOpq*sxYQQ1a742;oPsI$Ppy|zw!xBVJkji*6#VQHv48?w)~NmdW;h9IThHb?Ar2$ zBvO3au9j5);0{;XHpELyvEiLMnc~+HH>yhLjC7JE@U2SxkU5Fvce==xJ;+Q&x#gsa z44ra@r=lOGm&Gre9PQMxOFJL;h#OvRAY4`fUu!@S z|K9;WVDgxVQ$MqIk*^%x7Isx{ z7o=_8#S>8^o&@k}^j3ALwWi%vvO+WDENy~$eiAW`Ucz&a*Sw9UmB&~=F+x>sQo>F) zSo|#_*5(~;ho3dj1L>>I<=7i4S@{da)gCJQn2ChiX5DumuJ=y6i}TsSll{s^K^A{B zJ>bEUz%VWj@+_?S^&cxopP8xD@z|7`!*^i%lWk0ST~-xiqMF`n8-kb#P&yKc0ecI_0@&iAACS~tSl)%oc2;h^E;|3%-3(cW*Z-F%#Q-v7nuqQtjW z;_XxEa>(!IwwhsTOonZPDfycIftaRnjEdQ!n_$Dw(sy=j?1(h&-j{3*l(c)W z@D1Nt5wQ&!fJ7f~P}m7`Lqo7Sf|XiWjeVH~67fD)cZ*#i`Vs&9ckqJ? z=7c>IoOd4$H;07wDmCYU)=T5SJOwYX^yhh@6S17UOKUR-W{DsX=V!h%z@|xi@)aye zfA5#$Mng=AUr;u8H?l zrlm9974Q)rpFYS-jh2;1*tQc+@|LMjOV4!1PSmjNv-mMV3^^1|^e)_dCEE%11QD|D zG)4}lQ}|Z5pjR7|$fvgDt{UV(Ey;Mt+*wd{vD!aa^1EtpDy#-oZ0mNy)cpI)bbiym z6H09%v?=>x{8mJs`;`biTl-Wy;Wh`&{gglz`{)b<-YP7aCJt(L;L%tdC84Un7T%4D z;AffuL8)-oOl3$!IAD4A2<_sMU|D|{KzqT3viq$*i1wLqCQpZ1mw>k!L#=S*XvqDm z*Bt-ksF#PI3|QzaHpePQsB9_Dq)1xbC1-BGDR_nY!|u{o*XV}V-CA&PhKD`VP8^G0 zI$WH36bfXJ@xOW_PHygyA;(#b9Uwf6OC+AqK0smOjt-I} zI`;x0Z)At*FqTzH7`oGJF{{XVv^K*2i3Ia%9`B^7prAvM0G>?4UN+UdWOULU{OSmw zb3+eZ#yV7)|0%abiK(H#8KLKQ2!P@n5L8Z2p;c>mMFA(B10vLubLm5kf5!q%VcoL( zt$n;IW5tt2pqwws+{?cK`6(9>s!4zdoOH5rfPy;nFmUagcT!O|m=jgg;`;uFiusRy ziG8PIID_0G{vR$a2#}%6L;J%2qZ9-Nm^sO>wqCyc5RebAIAC+tOGK|xviEtTl@_Ga z14t6XeW+}6R%1tN>h?A=9RmxGjYriu4`1AkN=-p=!)&)3h$%zV#F_~Tk*QC&PWsdjB&i6UkNmI?i^N|^d*k2jA}PFs+kQALuqmT6((?(hfe}V8rs*uFxms| z8t_Zjz6Q37Qw@NfQ7@w?nKJpt8~zBxgq9T8k-66@PX?mmt0m7uJNTh$*`j)FCk-2M z>(C*NQOCCX`9QvRb~#*LI9Kee<9hIFP+`@foMJk7SxkUE!`N?lDRiD zxq#Q!4TE2SZHL>3q1lmS4tM)I9TaY0%Bux6g;{D74%Ms*E#Z(3OZ4MGIt5WTA4#?# zxZS5@v7fisV5~8^ez%Afn~7RJgCi-l=7whArKR2y z)E1r!{?nfi79!k9i^GxIym*Pi5rb|(L)qf>3k=I#alMY&gsgz|(Fk|2yz^1B__)9W zThUS&ev|^o0noE|2vncLWe?G;Ah)NcJu7CU*fqMz;wEAHW-9Sa0^En!qK1x`8?~1F zwq2+kDuL+@)0!3Mr zWP5_>e^&NoMoBdZ0tz(UrYlI^2@KJtDz4vMbYH$2L0-?RXFMac?()~Lr3Up{rFmXjrBai~~ zME~O&V9Wz$4%~DT^6_?(X=>>8fTj5r@AY5T9L&SL-|NxGs5#$IE*dJ*ovu*r(t8X$ zEkL^bkea<1+W-g5aI4mPH8zSK{~a3HGaxt;oZM*zi{{Edxu4I_@+UveYv8f{2ZvO{ zQ0o&}dncFPPjub0c&(y8I2CIW|GkSh{XTtM#K0(MQ0?(M91&xva}*-eHBwrCu{26H zBvwtnGc2%M^=AhxsctY^4)r^`I6cUnY9IVObW%0{d*dfc1_CzZ5WIl?V}|cT%|*^~ zkiQ<6vtx1(0}vO>tx&V6fND4d05EvdD5d>9{_2H9-CUBf-C#>{->IyPZC7jd& zU7LFlo2#LF!XCps$#E=EA^714cD~#IZaFXUFF%C-0*8@RI=V?kibL7Zspjz7V zQ`W#vWOPVcXn>z`qhG>}k9Iq|q>6#CTuT>p)PN4_78%bM%p9&&YI)Cyio7AB@OLh0 zri`eUpQFrEFzr_>Z?4{Pu*NQm{X6S z+b0>QBQh3m$0xDX_O7jn2w1Z_QDzwicc)_#AdM9yp=|7R4N%#9bz(RD~ zx&09GKu9{b!}G-X6b=T&q z8{N099K@4mndjVN3yncCvo(m~=)zbfP#=n1=Mc(U6RqH=9*oBj%J9L-yoPr!5RPqY z8j+t;FiktPi5GFu1w`2b8%?P7wiacN7<}AFLCM;ah046=C&RS#Hl9oT;LhSsbWyW%aVG|pntq95OY9sX#R}tXh9?+^*;h$qSA7TOaYszQiHs>Cx`wD5J zT-7?VxAFBqjMo3&J=T^<*niR7H)ReOald=VH{S)jqbQd^_~O4p_~;y=m(sUJ4W1W( zYqb6Oy6gWh-hUg=0%7 zr?k|zBT1l337YSb*t^hg{9B>+C(kVC43vq0WXtgx(fdKJu9>72W9sY&#?IEC!S}^k z9XIcjS}6#C9Co zzLTXaReT6hd;t5OC?fWCKfAxhk&Vcm_?~KS(oVjEE`z);^Kl=?pD~O3k1zsP<9ZTR z?D$;Jn(}0B-$CK?5nw6*#c0~>q47XCp{BvgQ{uD>o5&Zs1$qU@?K8UWy{7C3e-?Ti z$-R@wHPLF;OC&HwwHz$9(2#jhN`IH;eygP40aFuu9g)%DShHGVBVms~Q;TU78fax} zcuId9<~EY;CVlt^&;XPyhDvey`WGS(fX4XlJ;WVXppv{?SJ{zP{gFunXB+@M`k#PL z8U6k#ne5Oyk`V9S1H{&u?A^7d;Mc!_RafZ{z1_s@>bDd61w4o>R$ z;25uA<1B--A}aYK=m*)~adSa1Ex8?{=v3|NNo~RQs`fjOA4k7}8S}ypt8J^sN&jWU z37IPO_s)nw+z3PZ+|caAED!jCz^>gnMbz;Kl&pEYmC_1}sJErKq&be7GaGrPk-m~4 z%|jA5C5pYHm?{rjYpIil$K8E$CXKJ4_4Gw|3ivJeuDu$hNMilez-?0r1C!Y`)%~a{Qa^ z+TOCJ9tk~XHj;FVcE>oA4oNKDV^3%l`R`k&D5>RdVD>kON&Aivx30~&VNBC8jP_|sE3!AmN!zo@rT=%`tfo%IYG1< zwrNjb*pR8We^ZL*K3^OFr;6&^qJF;_MPs;7!laZf(F!-0>5KUJYYw>H8#~_GD2NQi5T@lc9 z7dmt2qL-_^F$W?4;4>KvRyChLsF-303=UeN;C0eP+VUA1us4$MMdwp; zOM3t;E>wrM9Yl0o`cB$=RY24_MWQi>KuT^y6mHAajZ3^Gzp&F1I!=Ac5hd}cSKtwX z^CXcSU8bXRQa2)xcFIyHtaJJ6L~~39>QD}K!C@>mu39f-OkUMKNZ)cRgNi()rlUc= zVp;szJ+KxPj_${T17c#%VoNX1{}n858(7?sKwC9#K`jc>_E%%BubjM1*FL555Oa%- z9yAK#b8s`YxI!qbV`Jfl_~rI_{|~BRY&N6;MPF$ zU2tpGPNb*5jWAEOiu3o{;XI;eJ*r1jh&nx7VI6kLM`fv0lUao zoknExBzJ9u>Nr(0C|?GeJr2|!B4c-1erSNzCGg03omu06D0g*XE`|OT)7pzH*u(ZQ zA`(3ATH9$1u#!pBmNiw5!Zb*T9&}Jy~8? zDLO;$5!DK3GPZZ}zEcYJax?X>a_2zJb$(F`l*yYyt+>7FUtkjnYP@zB7r9#Cty`iL zgple_n&gNJmg%PjM$M1&>P|mJBgcP!?0`6{AGV}rbj|V*V#wBZs8(=^>wIN99mYK% zaKkx^?ZVvogeH((vi&Y$m?hCaJh}G7Atx<-*qDW_E_^eIIM(W%+2#NG92aHN`;$V% zrRZE*$ownYm;R$Gh25(UM09LBhsdfRbW?m^G#lZ3h-r1#X z8N+|26>;FL6=CfItf$IrPj&n8E$y#wx71F|>36Sk{#aqD+9kDE-aqQ2D?f;deg2Al zcSD>FmRpq97Wuw?P0EXq?QA>b{3i=M zBQpvTk~3D5Qrh|kr(B3?w+akzW@0vQJ(bsT-TY!o^m&J5nM{yt+t}h8>hYps;^Nj(St^wYJ*%;CW(vUfm1sx+zppFdP9H%gb9g`0NIh#ey z81l06sTYyFp`!j{8_8uNnTdA}x8GVnTmS8bwr;Z?;vFB?MJI{>zeM$>)!lMA^fd;v z)|RB#_&;vpau)7|ZZmK?OuSGDeFO5-yRQPUiubkC zwgs-xdYki5&0A6@?;6JW^&i~J>UZjpRfEDZNl2imN`K~uR1Gs$o1cq-TO)q z|EZ2y|2z$v1Cdm#LxunA@D}kmCdE4#*h6xp{Hpx%c3!|C`V|{I6Q2>)u&%1u+Rt?W z#zFP(I@^_XGezwR`aa9HrSzF~t=7Hett7UF{7v6Bd&z!A`{7zsd$-B^e0Jeg_X}AK zll0%!Y`=168=@0-tX9u|7F}uF+VL8<=^qVZ(uqQ@2}o0w9Kxw(yEAwnEKuv=cwtxL zN8+BvMB(x_6cMI0g@OYbfYW%UEJpB}IQkn@#vAB7%a}-GjltUmUPRlAxO4 zG!Dq6#*EFUS6k?=sA#t?xHdv=NYv&~8zpSlpXO7{UkWZ-S3aI|C=4v%`J||_8Ck>V zea|stl~Ew^kB#UqjJ}{+;L46sD?8A8_BJnpQeY5qcIUMYjDJ~y!%*@A#@{yBjvs1* zY7b}fEZf+-+OWwPKa#_{M~8z-YTN(v_EcqjASOVKKl0dU3>P!r6 zL$|*})|+}m+GU8qP%+PpX*Q{ zq!bo*ea#vwH?QPiWKY)~EjdQ7d|GZg^~E46l!98{JxMd;PTn=xGpQz7uH!QAma-#PYQFMjMY2Wv$CCae)&{3{( zbsaIiMg_jq>OUMD+jl)4v|o1Z3jY0^>oaSuo$fJGHTFQxN;dy{X~gIGytzwHi{2k; zD;Q01+DNW7XjXWaT5(f**PGe2vVFnpw;<**TS}|iQ{u7($5-hFfLFb z1?vy17BX8o$x3bk(6%G1Y609fHKbKd6?wd9u4eLWfQcu5$M3j71ko!xdQ_3iuS7CG zO-y_7RK(SByUmgNsZ*XHmdP+181-OrqRB!EE184hp+1Mh9|k^hyAp<6f63!l>s^zz zo8u2ckg7YXykyG|RZrbcodRLX%{f}c|5j{1h~83aXly>}8AMQD?*Y`U_9jG|cIMiJ-N=Lc(M(-eQORRKB`lipu6f9i z6`0&ay=tCp{Mg-iiA3G~`eZ#J+Re8AkyheZlMzPSnd~T<=_j63`(qz9{q-n%oqQp&kr1*wOnkZjKA?!B^%G0TlCQ^YcafWz{fE>im0w{Wck zxqnHh2orkNW4Y6kK(~Gppo*-7)7P7=#K2-VEjCh0AmfNozZTssOWv<5UQx+SQ_A6G z9@VE0av>y(BlJWhk}@KuMQ?C|;H~Gg9igEE%)Aw1lkj0(t%~OzluOWuW(epcwnHF5 zClTY!+)j?PGWBslaiBz2>FL9$N-M!M{9tyi|9avr_}wcCmMU=#^u?M&${Qo5X}}A_ zZzakYB+5>8?#g4GQ<~uuABcG-_+dFsTV(c^CbZ#!D@^=_m>zVjfTYZ%rKG1FNMWgk z#r(Xo54=^eCGc>V>u-nU=3IMWr*nT7Ri`MzgvpW3Pzf%1B7`OqNneHg`?th%v@uJ* zA#|0&`o;&v+ZDF*oY~jBOQ`1$AX(P6FF1~0t7x`B#ZNiIw zuDvuj|F5$)Ug%Xr>@#_zz#9OHF=RwNa`?3@WoqRxtqyTXtlg_bi7wXWCyn$sy^ZO2 zEGePbJ91Yvm8y{OZwNl0vBfQhQZ*|Iy(CqIqr+bMwS1+9KeZhhuK2~dFGFEljY}?r zsLdxuh;(?Q+{fWkiQbpVgF?_dQ=WOK^hYEr_N>I|F-w_r1IgCo&mpWrsNNjim-ZWhmFspiDvP(fe&AP z(`4Cx(UD?m{bU(6QRlNv8;yiV9BaFfViuJVh4?F!B4{X+a!Xoy(hMa~N4$0W<1niW zEqrN*1F<=Ai3zG>TiX~`cs+I0<)DMo2a8#YKp!0O8S&40$sddy;RTUjQEWoLP8bmN8}RwA*~v}UX~1bQiH zdW&8CfF`2HQJZ4uq_qu8T$_!{o5*Hc`^$puT+$)SG|h10)~Cy^d-=-?(ffTZ6wkJX z+JF>eikW5Q`rfwcr63&`%axFo#R|kmtftBmf{Wi27U!!H_IS%Fr>xDVV*|JgO)iy; z)P3HUorkvJat|jITKP0hl$B^yrf8Vp>ZDg-L#@bWyQS@@Go1;D^;nl$DizkV1Np4lSCf z?;dBD7K@9%=p5B0Ul?Y`@c3eBjG_`Gxc3^=i=CB3H0;f4%A7^4;O6xw&qxF zmkO*EjxZB#nd(#-nIFGTo{YiOc&cqsM2I2;V`~;xh?i^cn_OOtC)LNF)k*&g z7)MOXk)T*0J_UtjqsF3ejg?`?VIpuz%+Wweb=KwtL9;C4{2?;1vy zIOQIffy=S6G+?Fn2qb3|fhi3uw_}E>q(g~3{>I%pg@NCj2&Ladk)gT;VQiL%U#&Z1 z)CQv~;-1&dKk*kydyNGH*|GJj0w{vSQzo>`Y9@$NR^g__=`-4B#CfEQ6KY%q zFdd_j?k@Mw*}+8}g>#vWOw1<1jX7(18$vE)6kU1r06GQpqE9hqYR>cKiH9;&0tRsw zt!1Td>1JJpZ|J)}bmHV4J%9Q2v6!b>J&p{zG-{A!Yu3(y!?A16=CfEE&q|Wkp($WJ zrpTDSd{FRhiZt`kGJy!C`n_;D0D}=-%rBdxa=5rNJZ6dD%hNJMO-%%=NX3;&>B58< zz6k}UYb=CZ&K<|P;k*E?;dof%Sa9J^Dm2+QZ2v@l3EC#>t?U1p*%nz%43-jJL?xt& zv3-lLf=jHXh_Q(<2ALEt7@d6i$(j2&pFf-X$v7%4DfP!pmeYJKWh-T^fXG(I?^(UM z56?8gsjl+kk^(i9F5~LvDvV@Tln2ymzWA}JWZDtsxIwx04T0!N)Z9d7p|mKR#x+Fp zOy|`_X<%)(EuAo|b@}{w5sZp;SkYs178$l%{xCWmpL#p zH>Pj*R*5ZDbS~zgZhDmkfgv=^aeus|#`UEu_}J(#LtB z5V-Rq2eSS)-4CW}T{w&CBZ8mQ_}Rz7+pbW)s$1UDvqeYIwuRDKVBbi1^uLA0B&k9gd#H*q^k3e@q!iqyMT1lv zIL6*ho}a}VWFg4Pp24?8<)mvb!l4rw`QcIjEVWu#d6lUtWzD#g#q^x=0{XM5q`d7*&WU zOAr>SY;NQ7L`0?tHLJDpwK?9rya7G(E>v8|9O9okN2@V`S;^-H6jZepT<>!J6F z9|rv|f_37i+g5kq>uC!$c;)bjp<0!*!@&PCheOitS@`Q zQguK6)DHWOs?c}kkQ06%NCk}GM5E#yaClJhCT5b})B<9{wuG9#L?*pOsaZUgAb?8O zw@43%d+x`3vi2~lyuJ-7;g`nU*t_o2MdJ%+8ix~w zBu2>~?^~9SG1NOx?MqA920k`aHlXm3(wLc+Q%d-}R(7n;G9ychu|pmvt=zf=$Lf&e zIIM+W8svnv@@6e8TuD{Joxy67LshQ{{-vrHx)8|Cksr9OuA`!u(~(eFXIy!DGa@3x z^OwJ8Z@+PBT1yueBcf2YN)2`=!ai@tyeE<50z$1n>j(K&GaRmUtR8DAO}=V$uCo95 zE$Cs~DMJfZjF2fv`vz}a_SwiKy-F$TzytP|<+ziwGgpuLRolVkq}=p%8s^@pguN2o zZThFojGu}wgP?k@5))GGFH-KAb-GJQaE6LEtY?QaCW>4zD+OMfv0|rO(M<4G1W~@x za;05np!9mb{O&rEd6KtUn2*0{1T}ZC*^?CH6N~4PG=E4h%!Hf{4O^%|UaEHB4(i@2 z?_ncYd5UL&qJ#qp+=C6}Zj`mYAJT>U0lHYMZ}db~1xY!Dj7+if^lD9Jo-_y;Fr|`& zQiPQaCNPK(*TOJTrQcNKU>-?7f=$3aW9c@5StqUYDq`OVShD1+Dcli1-Y}u-?>Lk? zA?#VF1!bNSVBCx6L(`M{rH}n0c+3#(!4?fusFr^9BYR(;B5;Zi^3CHZio7M|JK zLS+ZMp$@zy<{Epk%X|j{EeyxSDQn<1m`MiCs3zUL)}9o~M^;7`aU`7|t&ubHY1vY0l=~Qs zaq5I-Eue;}4s+iWM7{dcPQg_AJ4;tg3Kn=$UdD0_-erLboj}yGCA4YJc}U6d$@Gsb zQFK0Tav^vq0fo@V!k92UF`RiYS}s{Y627Fa4PKJ?#e9wH0D+i8zIyAou^jg>sQz>1 zcFYe}==fpq1I=x7fKU9zl87hqI#Uo&%|)$?Z*+YtpRJ1UP%HWsBwO4#H=XktizG~a z&{-r0;ULASdj74J@9wD@XT`YySdr!XdO=nYHYUE)Fx)|VV76Np-to(C&FGm4#YgKr z<1Z6Ayfs@YPSDw$R3Nbiw#AJnw$trR!`U+zSa?kl#_W@on6tP7?6U9>*@JNO0xoTO zFtTE{XHKXP0>dNrJ_0I_vB3J8l%a8s6>)DubjE-dw5hXx^joFWa-uJVJM0ChV*+&K z#rx+k!L2RTl?r`q|EYeh(XpU!7*4#o1TvDx-9ytAIzD7v3q zUZ->-ywBg?bqxnVkyh!huHMEa2ej==eRa4Ega(`lLjsRuuV`9kbIfzva)bJ+>lGzZ z|8>AdE80Ro!V#x>n&4U>O{}k|*D2dvSV-N29l)96xlZA=GnTxa2vM$D1=R$h3Z6y+ z(5Rnx@ef=lY$X($LCq%=)W6_vCVX|xw$yw`@99VMC zZ64Ko#L{AvUmRc^i3*kXtX4B-Gty)l=@nHFLzdsA1-ruM+r#3Rh zz*5Tg3qKRljS#ay!sgKC8XSK4WBGuKbq*39jg~2V>Vs{KMh3lsTFe*MlVT-J|E2 z16ec>dU~z=4$>bEs-L>khw#xD3U0#8Mhvcv!9P5<`=pqT$Mj_1(Z%ppOVrp1Lu zeRJ^!+qpm64&lBt)%N86SU0d8>VFqZFYwu%cFEe6?ef3n1G>pj&>C7Y9>_&;6If2* zc}>rs_y3&!Y)k)ti!2Iz5k86p+gAGjUgZV*3h(g(DvLZ{{0#v-WF!>CYeWr#{tu6x BvHAc2 literal 0 HcmV?d00001 diff --git a/设计模式/拦截器模式.md b/设计模式/拦截器模式.md new file mode 100644 index 00000000..cef302bd --- /dev/null +++ b/设计模式/拦截器模式.md @@ -0,0 +1,143 @@ +> https://blog.csdn.net/qq_26899109/article/details/113838471 + +拦截器模式应用非常广泛,适用场景一般在框架代码中的固定业务逻辑,这部分逻辑通常不会变化,比如:服务调用的拦截处理,拦截服务的参数,参数国际化处理,拦截服务的异常,记录服务的调用结果等等。 + +之所以要讲这个,是因为后面讲SpringAOP的时候会参考到! + +拦截器模式有三个重要的元素:调度器,拦截器,业务逻辑,只要充分理解这三个元素,拦截器模式就很简单了。 + + +![](image/2022-08-19-16-07-29.png) + + +* 调度器 +一个业务逻辑可以有N个拦截器,这些拦截器是怎么运行的,自然是需要有一个调度器从中调度。 + +* 拦截器 +拦截器就只是负责拦截业务代码,在业务代码前后做一些操作,至于拦截器和业务代码的关系,拦截器不会直接调用业务代码,因为会耦合,拦截器在处理完自己的逻辑,会通知调度器,由调度器负责后续的操作,是继续拦截,还是调用业务逻辑。 + +* 业务逻辑 +业务代码这一块没啥好说的。 + + + +## 一个非常优秀的实例 + +通过调度器实现了拦截器和业务逻辑的解耦。拦截器只需要负责注册到调度器,业务逻辑也只需要注册到调度器中。调度器会执行拦截器。通过地柜的调用实现拦截任务。 + + +既然有两个拦截器,自然要有一个拦截器接口。 + +### 1、拦截器接口 +```java +public interface Interceptor { + void before(Invocation invocation); + + String intercept(Invocation invocation); + + void after(Invocation invocation); +} +``` +### 2、日志拦截器 +```java +public class LogInterceptor implements Interceptor { + + @Override + public void before(Invocation invocation) { + System.out.println("LogInterceptor before..."); + } + + @Override + public String intercept(Invocation invocation) { + this.before(invocation); + invocation.invoke(); + this.after(invocation); + return null; + } + + @Override + public void after(Invocation invocation) { + System.out.println("LogInterceptor after..."); + } +} +``` +### 3,异常拦截器 +```java +public class ExceptionInterceptor implements Interceptor { + + @Override + public void before(Invocation invocation) { + System.out.println("ExceptionInterceptor before..."); + } + + @Override + public String intercept(Invocation invocation) { + this.before(invocation); + // 实际代码应该是try catch,在catch中做事情 + invocation.invoke(); + this.after(invocation); + return null; + } + + @Override + public void after(Invocation invocation) { + System.out.println("ExceptionInterceptor after..."); + } +} +``` +### 4、调度器代码 +```java +public class Invocation { + int index = 0; + // 调度器管理业务 + private BusinessService bs; + // 调度器管理拦截器List + private List interceptions = new ArrayList(); + + public Invocation() { + interceptions.add(new LogInterceptor()); + interceptions.add(new ExceptionInterceptor()); + } + + public void invoke() { + if (index == interceptions.size()) { + bs.perform(); + } + else { + Interceptor interceptor = interceptions.get(index); + index++; + interceptor.intercept(this); // 传this(调度器)用于回调 + } + } + + public void setBusinessService(BusinessService bs) { + this.bs = bs; + } +} +``` +### 5、业务代码 +```java +public class BusinessService { + + public void perform() { + System.out.println("服务调用。。。"); + } +} +``` +### 6,测试方法 + + public static void main(String[] args) { + Invocation invocation = new Invocation(); // 直接在构造里面就把两个拦截器加上 + invocation.setBusinessService(new BusinessService()); // 加上业务逻辑 + + invocation.invoke(); + } +``` +输出结果: +``` +LogInterceptor before... +ExceptionInterceptor before... +服务调用。。。 +ExceptionInterceptor after... +LogInterceptor after... +``` \ No newline at end of file