門面模式:
在外界訪問要訪問多個內(nèi)部系統(tǒng)時,并且他與這些內(nèi)部系統(tǒng)有著復(fù)雜的關(guān)系時,我們則可以用門面模式來解決這樣的問題。
門面模式他只是提供一個可以共外界方便訪問內(nèi)部子系統(tǒng)的一個接口,他并不會對子系統(tǒng)進(jìn)行擴(kuò)展,他只提供子系統(tǒng)所具有的方法。對外界來說,他是一個子系統(tǒng),但是內(nèi)部的子系統(tǒng)并不知道有這么一個類。例如:一個學(xué)生要去圖書館借書,這里有3個表,rule是記錄不同的讀者的借書規(guī)則(如研究生可以借7而本科生只能借4本),publish表是記錄過期未還書的學(xué)生,passwork是記錄圖書館所頒發(fā)過的借書證。如果一個學(xué)生要借書,則他必須要有一個在passwork中存在的借書證,并且沒有在publish中的情況,則可以保證向該學(xué)生提供借閱,但是借閱的書則要按rule中的規(guī)則來進(jìn)行。所以一個學(xué)生client借書必須訪問這些類,為了便于管理,我們提供一個 FacadeFactory類來處理,這個類提供了所有client向子系統(tǒng)訪問的方法。這樣對于client來說就輕松多了,也便于我們維護(hù)代碼了。但是FacadeFactory不能夠向client提供內(nèi)部子系統(tǒng)不存在的方法。
由于一個系統(tǒng)中所需要的只需要一個實(shí)例,則我們可以把門面類設(shè)置為單例類,如上面的FacadeFactory,他應(yīng)該設(shè)置為一個單例類,這樣就不會發(fā)生多個人同時借一本書了。