亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2527 | 回復(fù): 0
打印 上一主題 下一主題

Facade模式(轉(zhuǎn)載) [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2010-01-08 06:31 |只看該作者 |倒序?yàn)g覽
======此文從網(wǎng)絡(luò)上轉(zhuǎn)載,并做了些補(bǔ)充======
GOF《設(shè)計(jì)模式》一書對(duì)Facade模式是這樣描述的:
       為子系統(tǒng)中的一組接口提供一個(gè)統(tǒng)一接口。Facade模式定義了一個(gè)更高層的接口,使子系統(tǒng)更加容易使用。
       大致意思是說:使用一種比原有方式更簡(jiǎn)單的辦法與系統(tǒng)交互。例如,我們把一個(gè)很重要的文件,放在了第二抽屜里,而第二個(gè)抽屜的鑰匙放在了第一個(gè)抽屜里,我們要想取出這個(gè)文件,第一步肯定要拿到第一個(gè)抽屜的鑰匙,然后打開它再拿出第二個(gè)抽屜的鑰匙,最后打開第二個(gè)抽屜取出文件。
       我就上面說的那個(gè)情形寫一下實(shí)現(xiàn)代碼,首先我們要實(shí)現(xiàn)二個(gè)子系統(tǒng),呵呵,把抽屜比喻成系統(tǒng),有點(diǎn)夸張了(DrawerOne、DrawerTwo):
class DrawerOne {
    public void open(){
       System.out.println("第一個(gè)抽屜被打開了");
       getKey();
    }
    public void getKey(){
       System.out.println("得到第二個(gè)抽屜的鑰匙");
    }
}
class DrawerTwo{
    public void open(){
       System.out.println("第二個(gè)抽屜被打開了");
       getFile();
    }
    public void getFile(){
       System.out.println("得到這個(gè)重要文件");
    }
}
public class Client{
    public static void main(String []args){
       DrawerOne darwerOne=new DrawerOne();
       DrawerTwo darwerTwo=new DrawerTwo();
       darwerOne.open();
       darwerTwo.open();
    }
}
由于沒有使用Façade模式,可以看到要想得到這個(gè)文件要首先打開第一個(gè)抽屜,然后再打開第二個(gè)抽屜,在我們實(shí)際所開發(fā)的系統(tǒng)中,有時(shí)候客戶要實(shí)現(xiàn)某一操作,并不需要知道實(shí)現(xiàn)這一操作的詳細(xì)步驟,而是簡(jiǎn)單地點(diǎn)擊某一個(gè)按鈕就可以得到自己想要的結(jié)果。下面對(duì)上面的代碼使用Façade模式進(jìn)行改進(jìn),建立一個(gè)FacadeDrawer類:
class DrawerFacade{
    DrawerOne darwerOne=new DrawerOne();
    DrawerTwo darwerTwo=new DrawerTwo();
    public void open(){
       darwerOne.open();
       darwerTwo.open();
    }
}
修改Client類:
public class DrawerClient{
    public static void main(String []args){
       DrawerFacade drawer=new DrawerFacade();
       drawer.open();
    }
}
輸出結(jié)果如下:
第一個(gè)抽屜被打開了
得到第二個(gè)抽屜的鑰匙
第二個(gè)抽屜被打開了
得到這個(gè)重要文件
正如上面所說,客戶端client,它并不需要關(guān)心子系統(tǒng),而是關(guān)心DrawerFacade所留下來的和外部交互的接口,而子系統(tǒng)在DrawerFacade的聚合。
    Facade模式主要適用于以下幾種情況:
1)    不需要使用一個(gè)復(fù)雜系統(tǒng)的所有功能,而且可以創(chuàng)建一個(gè)新的類,包含訪問系統(tǒng)的所有規(guī)則。如果只需要使用系統(tǒng)的部分功能,那么你為新類所創(chuàng)建的API將比原系統(tǒng)的API簡(jiǎn)單的多。
2)    希望封裝或者隱藏系統(tǒng)原系統(tǒng)。
3)    希望使用原系統(tǒng)的功能,而且還希望增加一些新的功能。
4)    編寫新類的成本小于所有人學(xué)會(huì)使用或者未來維護(hù)原系統(tǒng)上所需的成本。
Fasade模式可以用下面的示意圖來表示:

由上圖可以看出, facade 實(shí)際上是個(gè)理順系統(tǒng)間關(guān)系,降低系統(tǒng)間耦合度的一個(gè)常用的辦法

本文來自ChinaUnix博客,如果查看原文請(qǐng)點(diǎn):http://blog.chinaunix.net/u2/67175/showart_2143541.html
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP