資源描述:
《設(shè)計模式 - 外觀模式》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、設(shè)計模式讀書筆記-----外觀模式前面介紹的適配器模式(設(shè)計模式讀書筆記-----適配器模式)講的是如何將一個接口轉(zhuǎn)換成客戶所需要的另一個接口,它的目的在于解決接口的不兼容性問題?,F(xiàn)在這里有這樣一個模式,它的目的在于如何簡化接口,它可以將多個類的復(fù)雜的一切隱藏在背后,只顯露出一個干凈美觀的外觀。晚上睡覺之前,你總是喜歡看電視,在你進(jìn)入臥室的時候你需要完成以下幾個步驟:打開電燈、打開空調(diào)、放心銀幕(假如你家有)、打開電視通過這么些繁瑣的步驟后你終于可以看電視了,但是你要睡覺了呢?又要去進(jìn)行繁瑣的關(guān)閉動作。這里你就需要一個外觀模式了
2、,通過實現(xiàn)一個更加合理的接口外觀類將這些動作都包裝起來,實現(xiàn)一鍵“看電視”、一鍵“關(guān)電視”。這就是外觀模式的動機(jī)一、模式定義所謂外觀模式就是提供一個統(tǒng)一的接口,用來訪問子系統(tǒng)中的一群接口。外觀模式定義了一個高層接口,讓子系統(tǒng)更容易使用。如下圖,是使用外觀模式后將子系統(tǒng)的使用變得更加簡單。在引入外觀模式后,客戶只需要與外觀角色打交道,客戶與子系統(tǒng)的復(fù)雜關(guān)系有外觀角色來實現(xiàn),從而降低了系統(tǒng)的耦合度。二、模式結(jié)構(gòu)外觀模式包含如下兩個角色:Facade:外觀角色SubSystem:子系統(tǒng)角色三、模式實現(xiàn)場景就是上面那個“睡覺看電視”的場
3、景。實例的UML圖首先是四個組件(電視、電燈、空調(diào)、銀幕)1publicclassTelevision{2publicvoidon(){3System.out.println("打開了電視....");4}56publicvoidoff(){7System.out.println("關(guān)閉了電視....");8}9}1publicclassLight{2publicvoidon(){3System.out.println("打開了電燈....");4}56publicvoidoff(){7System.out.println("關(guān)
4、閉了電燈....");8}9}1publicclassAirCondition{2publicvoidon(){3System.out.println("打開了空調(diào)....");4}56publicvoidoff(){7System.out.println("關(guān)閉了空調(diào)....");8}9}1publicclassScreen{2publicvoidup(){3System.out.println("升起銀幕....");4}56publicvoiddown(){7System.out.println("下降銀幕....");8
5、}9}然后是比較強(qiáng)大、干凈、美觀的外觀1publicclassWatchTvSwtichFacade{2Lightlight;3AirConditionac;4Televisiontv;5Screenscreen;67publicWatchTvSwtichFacade(Lightlight,AirConditionac,Televisiontv,Screenscreen){8this.light=light;9this.ac=ac;10this.tv=tv;11this.screen=screen;12}1314publicvo
6、idon(){15light.on();//首先開燈16ac.on();//然后是打開空調(diào)17screen.down();//把銀幕降下來18tv.on();//最后是打開電視19}2021publicvoidoff(){22tv.off();//首先關(guān)閉電視機(jī)23screen.up();//銀幕升上去24ac.off();//空調(diào)關(guān)閉25light.off();//最后關(guān)燈26}27}客戶端1publicclassClient{2publicstaticvoidmain(String[]args){3//實例化組件4Light
7、light=newLight();5Televisiontv=newTelevision();6AirConditionac=newAirCondition();7Screenscreen=newScreen();89WatchTvSwtichFacadewatchTv=newWatchTvSwtichFacade(light,ac,tv,screen);1011watchTv.on();12System.out.println("--------------可以看電視了.........");13watchTv.off();1
8、4System.out.println("--------------可以睡覺了...........");15}16}運(yùn)行結(jié)果從上面的使用通過使用外觀模式,客戶可以非常方便的實現(xiàn)比較復(fù)雜的功能。四、模式優(yōu)缺點優(yōu)點1、引入外觀模式,是客戶對子系統(tǒng)的使用變得簡單了