From b556436fa2f738af49fec8f6011f56e0ef009b5b Mon Sep 17 00:00:00 2001 From: Dominik Liebler Date: Fri, 23 Sep 2016 10:19:17 +0200 Subject: [PATCH] PHP7 Facade --- Structural/Facade/BiosInterface.php | 17 - Structural/Facade/Facade.php | 13 +- Structural/Facade/OsInterface.php | 8 +- Structural/Facade/Tests/FacadeTest.php | 49 +- Structural/Facade/uml/Facade.uml | 47 +- Structural/Facade/uml/uml.png | Bin 8371 -> 38086 bytes Structural/Facade/uml/uml.svg | 977 +++++++++++++++++-------- 7 files changed, 698 insertions(+), 413 deletions(-) diff --git a/Structural/Facade/BiosInterface.php b/Structural/Facade/BiosInterface.php index 8f1aa01..ba6bdbe 100644 --- a/Structural/Facade/BiosInterface.php +++ b/Structural/Facade/BiosInterface.php @@ -2,30 +2,13 @@ namespace DesignPatterns\Structural\Facade; -/** - * Interface BiosInterface. - */ interface BiosInterface { - /** - * Execute the BIOS. - */ public function execute(); - /** - * Wait for halt. - */ public function waitForKeyPress(); - /** - * Launches the OS. - * - * @param OsInterface $os - */ public function launch(OsInterface $os); - /** - * Power down BIOS. - */ public function powerDown(); } diff --git a/Structural/Facade/Facade.php b/Structural/Facade/Facade.php index f199600..bda8b46 100644 --- a/Structural/Facade/Facade.php +++ b/Structural/Facade/Facade.php @@ -7,17 +7,14 @@ class Facade /** * @var OsInterface */ - protected $os; + private $os; /** * @var BiosInterface */ - protected $bios; + private $bios; /** - * This is the perfect time to use a dependency injection container - * to create an instance of this class. - * * @param BiosInterface $bios * @param OsInterface $os */ @@ -27,9 +24,6 @@ class Facade $this->os = $os; } - /** - * Turn on the system. - */ public function turnOn() { $this->bios->execute(); @@ -37,9 +31,6 @@ class Facade $this->bios->launch($this->os); } - /** - * Turn off the system. - */ public function turnOff() { $this->os->halt(); diff --git a/Structural/Facade/OsInterface.php b/Structural/Facade/OsInterface.php index d8171e4..1b3a93e 100644 --- a/Structural/Facade/OsInterface.php +++ b/Structural/Facade/OsInterface.php @@ -2,13 +2,9 @@ namespace DesignPatterns\Structural\Facade; -/** - * Interface OsInterface. - */ interface OsInterface { - /** - * Halt the OS. - */ public function halt(); + + public function getName(): string; } diff --git a/Structural/Facade/Tests/FacadeTest.php b/Structural/Facade/Tests/FacadeTest.php index 0247aaf..8c6a0a6 100644 --- a/Structural/Facade/Tests/FacadeTest.php +++ b/Structural/Facade/Tests/FacadeTest.php @@ -2,47 +2,34 @@ namespace DesignPatterns\Structural\Facade\Tests; -use DesignPatterns\Structural\Facade\Facade as Computer; +use DesignPatterns\Structural\Facade\Facade; use DesignPatterns\Structural\Facade\OsInterface; -/** - * FacadeTest shows example of facades. - */ class FacadeTest extends \PHPUnit_Framework_TestCase { - public function getComputer() + public function testComputerOn() { + /** @var OsInterface|\PHPUnit_Framework_MockObject_MockObject $os */ + $os = $this->createMock('DesignPatterns\Structural\Facade\OsInterface'); + + $os->method('getName') + ->will($this->returnValue('Linux')); + $bios = $this->getMockBuilder('DesignPatterns\Structural\Facade\BiosInterface') - ->setMethods(array('launch', 'execute', 'waitForKeyPress')) - ->disableAutoload() - ->getMock(); - $operatingSys = $this->getMockBuilder('DesignPatterns\Structural\Facade\OsInterface') - ->setMethods(array('getName')) - ->disableAutoload() - ->getMock(); + ->setMethods(['launch', 'execute', 'waitForKeyPress']) + ->disableAutoload() + ->getMock(); + $bios->expects($this->once()) - ->method('launch') - ->with($operatingSys); - $operatingSys - ->expects($this->once()) - ->method('getName') - ->will($this->returnValue('Linux')); + ->method('launch') + ->with($os); - $facade = new Computer($bios, $operatingSys); + $facade = new Facade($bios, $os); - return array(array($facade, $operatingSys)); - } - - /** - * @param Computer $facade - * @param OsInterface $os - * @dataProvider getComputer - */ - public function testComputerOn(Computer $facade, OsInterface $os) - { - // interface is simpler : + // the facade interface is simple $facade->turnOn(); - // but I can access to lower component + + // but you can also access the underlying components $this->assertEquals('Linux', $os->getName()); } } diff --git a/Structural/Facade/uml/Facade.uml b/Structural/Facade/uml/Facade.uml index d6bdd03..8835df8 100644 --- a/Structural/Facade/uml/Facade.uml +++ b/Structural/Facade/uml/Facade.uml @@ -1,24 +1,23 @@ - - - PHP - \DesignPatterns\Structural\Facade\BiosInterface - - \DesignPatterns\Structural\Facade\BiosInterface - \DesignPatterns\Structural\Facade\OsInterface - \DesignPatterns\Structural\Facade\Facade - - - - - - \DesignPatterns\Structural\Facade\BiosInterface - - - Fields - Constants - Constructors - Methods - - private - - + + + PHP + \DesignPatterns\Structural\Facade\BiosInterface + + \DesignPatterns\Structural\Facade\BiosInterface + \DesignPatterns\Structural\Facade\Facade + \DesignPatterns\Structural\Facade\OsInterface + + + + + + \DesignPatterns\Structural\Facade\BiosInterface + + + Methods + Constants + Fields + + private + + diff --git a/Structural/Facade/uml/uml.png b/Structural/Facade/uml/uml.png index da5097a0b68fbafa013429026a8db23d22bb6c84..fcea5f2fc58f1dd62ae8633e9b4e1e7dac35b02e 100644 GIT binary patch literal 38086 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 literal 8371 zcma)iXH-+$*0z)b3P@2=5hQ|*j!G{9=}oCpq$CspktV%_ju0sVQl(2*dhY?GO79Q| zMGy#qKqw*f@CH2R-uvA#zIVJolCiVbTyw8kp1IaDcS6)v6|Pd;p}2JE(p4ozS9v9amCfSdd;TDI$p;hf1c(cSxlia?*cs`rR|8k)kby-n$H!p(RDLTqefR zk`h5K2lxR=rCOK+{+HqZkosEN*+fnUAX4>%-NMmd&LS@*$2p>V>EvmQY0%5?WZJ(k z5?I2STbSX!W%GVdJTF0vdApj%+{XBA7@YCW2WyXyeYfeYmew9m#4tUKXEo*U1C}P3 zffw(mNj?!e8ju8^{u)S5m#B4KX9*Ep<$gF)d`%Wjdhw{R@yzv>8948m%jQZTWjZi6 zv(JI;?&goB zG3Q6|ikVd2B@U*a1N!f)=5@q=`LYzzIuxK?Tle)VEuG^ZL!Z-~_6n)a*7_dBkZ1R& z!XTC@HU=C$L(L~;dJmd?+80X4kVuvF?||2iGLS8m~3D*LO@NQx~s^d+N@M(!ni@}^AjJAtjdE1|9aYgG2p|{eO+?JL#M6Vu) z+$a*X^RxtkW`|fUg&u23D=SlQuBK)Ls#3T*Q9OJQXMhsdOjcp9Sh=Cwv$&|9s?Key z{l{E!IW+7j=XWPbZuS^?coeA?i5wzRaIr2Q3vU+Y`*Ar~4= zTNaZ!zJa`*zrd%cDK1BAO?i#HfPJ-EvGl_7HE)$>)1G*bA7uKTHP8X)ij?eMVPy{Q^&eTX*G_ z84-~@ZYigbu4P|m&{5_tT46(hN5hniHJ2Dp0ujNX{sHFbKX}Yz{Tq*JQn!JBmLL8P zFz=XPFA@#dB-KV)M1>w^A(RC4_CsRGWjLQL+W_RZac{cX7fG?I7%cLy-Sz7THoAG? zQfPR{>A@z_j;E^V#Afve#+K$x_+{o*&tsG(<3?)&HJT;MM6#&?2gq}q@wMMsz~sHj zl%1Aih|LkynS|R^d$v&!1+^sfA1zSF3P9u zY;-vIxS84ey=^#ZPsvH^C927&YI1&+{yKYGI+9U_VdFXn850kq4aC}!Bj-z@YE969 zpOT_KVKFRdNuY-BnNXXiz(i~#q){v0eODG%VttHka2s7;_|6WV#9isO6^y7zG^%vM z2`+H`T5KNQoc1HkWk-XH8qNx&zTYWOnFCJnsGKahr@jkf#ra6YLT7;4e7_8$`n z)5j`%C0VFu{`int<5O~|k3*$)k~D*Aq;`pSrEc;PqENfFm?Lb|>N_Er%%S&ixzQ<+ zNKQ=CtP3X9PJ5WA=lRrx_%vq%79QfqjS?Znvl!FJVO>+pR7Z=<;@nDHXO2-kiJOjh z30ZuQ|K!UsGr^TS_5-u#^-pzidx@P5_8SK@ld6OetAv=Pn)`6rAj)FCSIF0R*-5{Viju5#k==%#fkAKYZCGJ1%hITQRLR%xwpWE&t=8!Qk8O?klm4R^i zl|zossBILv1@a{5=u&XFxZ&RRALbAYVZ)L9f#7ZOC({I5!K{C*&k*jId!^^)0r%_` zEOUGl>TJE%66Adv`_Y~WF4NiWQ*PF^kwAmrKUvI52YZ}sYG1P*LLi)CDk;ID1i%HK zzEMD=W@$yvz4kc?tNDYc#Wl{GX=lHSnadPLD7k*vAcbw2MM-fj63?Me=;`Ov65X-5 zjxNcDLJk7>dct59$H_u*U@pz@0j{1@F`v<9#9y?Xv0C1AyOLrFo zTrj?B>Fy_^VLq}9Jec*k_%;1arS5_3tDX;cK7D{~ZIvV}fInC=^!Z(a%b2v|C)&5N zY6gHSbB1Z~`9_EPqshPTFOm@eTtiI_G4ZWaa1pCi#dyHe>YGk9yojX3W@A`}5%v{a z-$xdmH-I8|*51ClR4;L63ABiBx8+OQ{Tt4D1??=lPRK!HWew$3c@jbiBwwZFgzif= zImTC>uttj7p12-G*#u%|Gc?R?7hk2b$6jf+`D&)eF(Y8a9{yr3rWawa6`aHA6vPB^ z4Tz%7e|82SORFA8m%y`nu;bM#YKS0gjc{Kvk)5}PRH%`I_fFdMwuTjeSlg(k#8*Gk za*tSdSr3!?2EC^+9;2N52y83pX)A;x{08plQ!4OulBsRp2-h@`FYCIVQS<`(6;TRLhL7kSwY@U2GV<`U#XZ> zLRtM!lOYWNo<0drr|pqdV<+v0wuWLSnKpsXxb`=2K|mR!`n$zSO#z_9`P`2&yq$(l zF5^l~H^e*Y%&G>`(Sx5sIR$t*!#a#SgQWK*zdkgM>dtW`6We#2KuY*?GpIZ3N zw;i@gritQKu>}vNzt+SGPt|L;fmielVV<3+)Xed#@9yAzm?;jO7xgy2ermveeJdUs z11@dM+pX}1=*S=2MdG|gYmu##spkmUUy=##_-~xO|MDT|(T8E?*0=wzD^XIuHPE0( zrO-tRh~8Ub2;0DBw@_42Zttn1iIlF}F)>6D3|Hus=9AsOyiF&HYIDV>XAZBG-880Q zpgsPn_ck~H2vG#R%U=ldLj5k*2ewn7Sx5+_hw`QT*RdH*l*|39hS;Mw900?FxM&GJ zUd9E1vcgNaD5A2+@St2k1Luz`TBdH_vE8u@#@mmH7f2UUV|IQDPqu%hfXk4zOFX-o zL{tin!=!$MWyUfce`K5`fv^dd5+<)qmmyOtyi|8cj3dtraL91Q5cXM3EQ9`0N7|1< z!x63i5NinGAQQMoOII;;1IS?>98Xl1aO#I#PY2bWOWwDbC#QJ1Is>z=OXBp6pis6?_6 z+ukM2gtIu2s4UtO0+bfLLG3tbk-v*?|62o18Uu8aDQ(r`~y5%KYX(-_G`4g09U3%o9W zZpY*di|LpO?{E#tEv7xf8HQ%){P!RLr`JtR5Z&4kCEFQk!w_~qI5~oa>UYlL({5Tf zlvInvP?qq8J^y93=?#diIH@qv|CtE=!;}7Zy7Z3}!LR>Kw*K#&>%W!!OPBUo;K#@z zB}+M(x8rOXreOako~slPe(0l5*En#?m$RV7r3y}OM+igq(zk)mLBJ%L82Kyo$Im_t z%jm+hMEI>@)h}4tzh~t%nVGfa!YsMkni(axhFM0oj(BKTP(Zll>+Ie-tssqIy+r5C5Ir=ww zCbE5Y)d)5{mD89+Bc%IW2@Gw9AZ%9CY=vmZ4EO%b%CXL=AekZzbHt?x`=WxWYy9s#xnTFWjwf1;yYy z1L}j}%iki~bugjNa6zG~plQCd!63f*RLeE-u~Y+nJ=uHHX7Fs@{zo|q!ARlM zn_8x(nwpx9K`sssZ=IxwY;Td#g*>90l{T2j~F{v zK0mZ`_{J)dh;i&*VTj1GyCwtU?1A56Yu!O)bj0!HHHmS)%c^r-J^4a7&*{wr=)#sJ zBZZmbk50U%2R6Pe+Z4r0gV}Pn7&rOs@}m5&!5NaAERD@yfByV>ve17p6>RTNJGbKj z)V}g?_VD{kL?d-Fq+Uu40i6Y~EGBW4#IV0QNqNB#zxHv`sS^A(dy+ zAR_YgX<6&qlEpN;_vd7*mrHFnHE!x*S47s~WL+;Yipc${>DmtO*e}NALm(|_X%KU& zszpCLdnMoZ6#L)$EN3e!95by^NEXJwIWHYKw zswdfBOZ*ZxXxO3~PfSD;)>Swlx6S{6SzbTMy|O%C^n<4SRU?xU6W@ZE$~#67#5a|8 z)$^pO3xz{$e;sVZP|l0WY1@{Rr7%Y4st3=_Q-73mJivTw7JLk?9vyX4CqXYYPvMj9 zsEMXSliv+?D=nHGR}P6|b+|Z-WM@F&iNSQ)8A$I$iQ0Q8zhn?UGV{srucO=#d#Gg! z4fVB)|BjsFbe=G|Ky^8Jr}FvZMMB{yxXS^6ugk8vv(md9*zlmawBC90gwmAN{4E%L zE$q$HpB3c?8#so6VXzS_QZt|LyT|G}a@2ZtJ!x8A#4`BZ$mnQHbdS|EzpVL;IgG=> zz63GU{8RV&!guAvj2m799V|LDson*eS``%)hcwGHS@rV^>;;8AZ~`U;Q1&B`e%?rleaY48tB__5fmlliY!&SdPs&!@ z&$ITBQAC#fFci6a%2F%(>QKy!cR!0CA zAB3JWTUXSnVzDwcF|oTxGdnx`+lr-B&NrW)_>>ebF)C5<@q8+#i)59TI)&;dPV1so zo{pWDsoY4o_{7+8!VeNKQyTtgwNGgG;!va5a8AzaTbWN^UKCoYc@1@q(%GrG)8x6P z^*|Va%Jrk^$4E%Y!IEn!d1@Wqk0!F=yl8LlF1Ik;p4i6GdT z+7|pNDiAEPg5m0$lMsG3H9-;O2RusNE^8LAMXqd5HROShw^M#^j^Vqj<8Pl9Uym-} zQr%o@CGHa8rvKgoN>|9V^;P+H`@Jyvi|+5%Kd(1YUnha5qc-q}&)>yVx_pF@?v9&F zJ?+MF8lU;wa`E*8VZ6>pn;E*(5qHM@@4(-sXNbcd8cPtw5w~;}p$0~+$6KuaLqc-mhaO)r@qLlx)DBw<-TxY)7 zP+#9Bqg4v>r=KWO5nr&j|@s@C&O=W(&B!oGOD zY$5gBD7t29Wcga6EcDEttoXXWF7w2LMbyN4VWF^gfzOA+sRMcX75f&DBpjO4e1+uF zx=2r*=sH<`mbac*cvI=w>K0tA?X(2r-BeQ6R9L#z^J}gH*s#{yv&r3O$OxFx)WADi zrByy_RCvw!64owAYtTBVj@h15!KL^;G;7jLi+3#fu73$VE+IV^D%E%D=Up55K>GA$ zRe?KtldPvFumv@QhCT-W~C3u$<`}+oApsx zMXt1yv4HAkxA-__Pky~4Sh9Gz-V&Qm?kJ+nmk=0Kn&7RF$h zvw>|iFZiy5TCY(UTaS3T0R6t4e}RW^31`r&y~vg-7(U{`wbPgMkSmCtVNj!Zc)Im* zXlno>-bk`f4gVhf1l45*1pv}L9lh321%kPcyQoX_8qNt(g8SNDRS!qH>BB_ZkpkY} zVmIcg_V8z61<$A(jBGk|OqS*Avyto(abBl)l}L}0*V;?RVXa-FkyzPZC~1ePXvsSB z-R2^rNaUlmKDB2+?`7K2m@IOPegj+JJ6kE9GFgp-SrAkq6N$eGZbks6M@mN~@y!Wj zX?-unfu2#ajM(^VkCTPEcrMkds1ZAtsCDbTgsJE#w4Et># zfp%T|q;_Rs;YEjy%1)s~vLeJIZ~L!QP+x)QVcjRKH|fc2RVKf(^T_Pen;j#CWD1Og z6%^;H4_ywN(MLEz$RvavmE^#owbFTHrc(2weWj zg}+X{%mfO3YZ}!Aqu_l$*sL9O!bmgeLCSd;HIRU%Lgyec`$136QX=LzSYRbfjN>YU zk#JLHLQ*Uqk&C;d7Sg=fiZO%~`Tum>jA>8|5O)-z^|4tBO(1l;7O5e&Ff6|pdThV# z{Ry`NQM%)AOw6Z1UvEmZ|Ea#{hiZ@~T??p@NMfyKkw8{;$|fgNcxT`$05{4VokK+l z8geuX&Zm-nJRD8 z5$giZ;s_D3O@maIh;}E`%`8k4==JBVk?V)CB1olMhp`~f`~)%^CAEck_NT=$Q|Rxt zGbRrKtw@t% z$$TJ$+Rn+7@mF_R)ShQwJdjW2XPsM}qbJh=m+PEhRtNNoLR4H$EcyEtmGFM(E}HV5-wcx7hLoE_}XC?N&(~)I=RGnwSr>!-3LP@UU{7s{t zKyqA^RB7aw1kiKzVFtX9ruC5^Oo+0re8i=uRS1_K?Da!?^ExCP7qxvZmB#-1T_ATl zw8BO(k5VLNT(!ahuM9GcL;@gB^F}lVEth>#58vC;Fx))8?12iAm>QvU!JL^bRDCGM z0eHu3tAPR#A2XVAM;CNiG)+faG^iGaHQn5~-HecND2oQ@@WQ^dF%ud9+dCx8jo9~U z5;rE#+X4U4LNYS3ckRM$AQ+RA${lyI?-J9|5UDQGK^z*sWmlG!J=O2x0A2&LXN=`) z_tU;%Lo4yGRD2o>FRVZE^fUlBiwLCp5?*BV##e@OP5_vO+o23&3)#8+#$g(Q1nLTbs(g2zV>^4tusk7u}yw)?x*}u z$$HAD;PN7an#3N?x5=UEqP>GHoNOG$h0|<0AU#8Af#aU%AzUOm-%QmQ-rB2zBy81{ zJ>(vGiyqH}Di7M0_F(Uo=>j=S)9~-6e{!LxTW;GiiG4#4bNZ{1He$`CUzTsJ&s5tc>xmS!>jv8*4AY~d(=tN6^C6@b9TiTy z?SuWCTkZ#Jqy5oafv`0V4efD(D(wEFD>S!cqJBI+%tzU*sCiw>vC}zp@;~5cd!dw2 zLbWI$*J2HMikv7im`YR>&-j*0E;3!fOrL5E|BHJ3k11V1z7Fyp=v7vs|e(yGH`sL3`iY3z+M_W%M#Q z-)94r&c8Bhv%oA?0UI21t!J+-aMTwz21LQtEp`kaSXxw^EE4-yI*wD3auoDWR(X2^ zePev>eEi)PUOKsp{#B|;(5dTSTOyplva)j0%Bqv+EI}+q)|FONR`Jkon>hJ$#z}Y# zddAC#f1o?=Wq5K@Qu|-TR?GPeaB0y`hy2Ay`rY>L>~h7Ow=v8gMh~rhOzsXq-s6;M zu0h7LG9^Dr#1^?d!LzV|Hb+MD9CvmY@7xJggWfX+>}D1?xbD%t5&b{D!k3y}JtN9| Y1hjIyLta7nGr}b$IaS$WY2$$Z0lF;R)Bpeg diff --git a/Structural/Facade/uml/uml.svg b/Structural/Facade/uml/uml.svg index 2e7b400..a14db50 100644 --- a/Structural/Facade/uml/uml.svg +++ b/Structural/Facade/uml/uml.svg @@ -1,324 +1,653 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - execute() - - - - - - - - - - waitForKeyPress() - - - - - - - - - - launch(os) - - - - - - - - - - powerDown() - - - - - - - - - - - - - BiosInterface - - - BiosInterface - - - - - - - - - - - - - - - - - - - halt() - - - - - - - - - - - - - OsInterface - - - OsInterface - - - - - - - - - - - - - - - - - - - os - - - - - - - - - - bios - - - - - - - - - - - - - __construct(bios, os) - - - - - - - - - - - - - turnOn() - - - - - - - - - - turnOff() - - - - - - - - - - - - - Facade - - - Facade - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + execute() + + + + + + + + + + + + + waitForKeyPress() + + + + + + + + + + + + + launch(os) + + + + + + + + + + + + + powerDown() + + + + + + + + + + + + + BiosInterface + + + BiosInterface + + + + + + + + + + + + + + + + + + + + + + execute() + + + + + + + + + + + + + + + + waitForKeyPress() + + + + + + + + + + + + + + + + launch(os) + + + + + + + + + + + + + + + + powerDown() + + + + + + + + + + + + + BiosInterface + + + BiosInterface + + + + + + + + + + + + + + + + + + + + + + + + + os + + + + + + + + + + + + + + + + bios + + + + + + + + + + + + + + + + turnOn() + + + + + + + + + + + + + turnOff() + + + + + + + + + + + + + Facade + + + Facade + + + + + + + + + + + + + + + + + + + + + + os + + + + + + + + + + + + + + + + bios + + + + + + + + + + + + + + + + + + + turnOn() + + + + + + + + + + + + + + + + turnOff() + + + + + + + + + + + + + Facade + + + Facade + + + + + + + + + + + + + + + + + + + + + + halt() + + + + + + + + + + + + + getName() + + + + + + + + + + + + + OsInterface + + + OsInterface + + + + + + + + + + + + + + + + + + + + + + halt() + + + + + + + + + + + + + + + + getName() + + + + + + + + + + + + + OsInterface + + + OsInterface + + +