軟件的架構(gòu)與設(shè)計模式之Layers模式

字號:

建筑學(xué)的設(shè)計原則也應(yīng)當(dāng)成為軟件系統(tǒng)設(shè)計的指導(dǎo)原則。
    第一種情況
    這也就是最為熟知的情況??蛻舳讼虻贜層發(fā)出請求,而第N層不能獨立完成請求,需要調(diào)用第N-1層所提供的服務(wù),第N-1層同樣需要他的下級,也就是N-2層所提供的服務(wù)。如此往復(fù),直到第2層和第1層。
    第1層可以獨立完成自己的任務(wù),它將執(zhí)行的結(jié)果返還給第2層。第2層得到第1層的結(jié)果之后,便能夠繼續(xù)完成自己的任務(wù)了,它會把執(zhí)行的結(jié)果繼續(xù)向上,也就是第3層傳遞。如此反復(fù),一直到第N-1層和第N層。
    圖12、在有N個層次的架構(gòu)中,請求(Request)沿著層次自上向下傳遞,結(jié)果(Result)自下向上傳遞。
    系統(tǒng)的客戶端只知道第N層,它向第N層發(fā)出請求,并且從第N層接到結(jié)果,客戶端并不知道其他層次的存在。參見下圖。
    圖13、客戶端只知道第N層,而不知道其他層次。
    第二種情況
    這第二種情況代表了自下至上的通訊,稱為通知(Notification)。這一系列的行為開始于第1層,這一層通過處理后,將通知向上傳給第2層,繼續(xù)向上傳遞到第3層,一直到第N-1層和第N層為止。參見下圖。
    圖14、在有N個層次的架構(gòu)中,Notification沿著層次自下向上傳遞。
    使用過USB設(shè)備的讀者知道,一旦把USB設(shè)備插入到計算機中的時候,USB驅(qū)動軟件立刻就會發(fā)現(xiàn)設(shè)備被激活,并通知設(shè)備的設(shè)備操作軟件,設(shè)備操作軟件便會啟動。這一系列的行為就是Notification自下向上傳遞的過程。
    在第一種情況中,請求首先向下傳遞,然后結(jié)果逆向傳遞,形成一個環(huán)形。在第二種情況中,Notification的傳遞是單向的。
    第三種情況
    這一種情況與第一種情況相似,只是僅涉及到一部分的層次而已。
    首先客戶端向第N層發(fā)出請求,而第N層不能獨立完成請求,需要調(diào)用第N-1層所提供的服務(wù),第N-1層同樣需要他的下級,也就是N-2層所提供的服務(wù)。如此往復(fù),直到第J層為止。
    第J層可以獨立完成自己的任務(wù),而不再需要J-1層。它將執(zhí)行的結(jié)果返還給第J+1層。第J+1層得到第J層的結(jié)果之后,便能夠繼續(xù)完成自己的任務(wù)了,它會把執(zhí)行的結(jié)果繼續(xù)向上,也就是第J+2層傳遞。如此反復(fù),一直到第N-1層和第N層。參見下圖。
    圖15、在有N個層次的架構(gòu)中,Request向上傳遞到某個中間層次就停止了,Result從那里向下傳遞。
    同樣,客戶端只知道第N層,而不知道其他層次的存在。