您好,登錄后才能下訂單哦!
外觀模式-引導(dǎo)篇及原理
來看看司小司的新項(xiàng)目-家庭影院控制接口項(xiàng)目
家庭影院設(shè)備:
DVD播放器、投影儀、自動(dòng)屏幕、環(huán)繞立體聲、爆米花機(jī)等等。
對(duì)于的類對(duì)象:DVDPlayer、Projector、Stereo、Popcorn、Screen、TheaterLights etc...
類圖如下:
我們知道,這些設(shè)備需要遙控器,同時(shí)這些設(shè)備都對(duì)外提供了接口。如果一個(gè)設(shè)備一個(gè)遙控器是不是很麻煩?,F(xiàn)在需求是,為了方便省事。只需要一個(gè)設(shè)備來處理。
來源:凱哥Java(kaigejava)
我們先來看看傳統(tǒng)的控制接口設(shè)計(jì),步驟如下圖:
看一場(chǎng)家庭影院,還這么多步驟。確實(shí)很麻煩。我們來分析:爆米花機(jī)可以看作是一個(gè)子系統(tǒng)、投影儀是一個(gè)子系統(tǒng)、音響可以看作是一個(gè)子系統(tǒng)等等。我們將各個(gè)設(shè)備都單獨(dú)的看作是一個(gè)子系統(tǒng),我們就會(huì)發(fā)現(xiàn),這些子系統(tǒng)或許存在著內(nèi)部關(guān)聯(lián)關(guān)系或者是需要統(tǒng)籌協(xié)調(diào)工作的。有沒有更好的解決方案呢?
司小司調(diào)研之后,決定使用外觀模式這種設(shè)計(jì)模來實(shí)現(xiàn)這種需求。我們先來看看外觀模式是什么。
我們可以將以上各個(gè)設(shè)備相識(shí)或者有關(guān)聯(lián)的操作放到一個(gè)方法中,然后對(duì)外在提供統(tǒng)一的一個(gè)對(duì)象接口。這樣,比如說,我們先要準(zhǔn)備:爆米花機(jī)開機(jī)、投影儀開機(jī)、屏幕自動(dòng)放下這一組操作放到一個(gè)方法中。DVD碟片選擇、燈光調(diào)暗、播放DVD這一組操作放到一個(gè)方法中。關(guān)閉各種設(shè)備操作放到一個(gè)方法中。最后我們就得到了如下的類圖:
經(jīng)過上面分析,我們可以知道:
外觀模式:對(duì)外提供了一個(gè)統(tǒng)一的接口,來訪問子系統(tǒng)中一群功能相關(guān)接口。
外觀模式定義了一個(gè)高層接口,讓子系統(tǒng)更容易使用。
我們來看看代碼結(jié)構(gòu):
說明:
爆米花機(jī)、投影儀、屏幕等我們使用的都是單例模式。因?yàn)檫@些東西,一個(gè)家庭一個(gè)就可以了。所以這里就使用了單例模式來處理的。
凱哥個(gè)人博客:www.kaigejava.com
凱哥公眾號(hào):凱哥Java(kaigejava)
在測(cè)試類中:
我們調(diào)用了準(zhǔn)備及播放功能。運(yùn)行結(jié)果:
我們發(fā)現(xiàn),對(duì)外提供接口解耦提高了。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。