1.定義:要求乙個子系統的內部與外部的通訊只能通過乙個統一的物件。此模式提供乙個高層介面,使子系統更易使用
3.理論基礎:封裝,有可能涉及多型
4.涉及角色:
門面角色:外界通過該角色訪問子系統,該角色是子系統分友元角色,即該角色知道各個子系統對的職責以及功能。一般情況下該角色會將外界的請求委派到各個子系統中。可以看出該角色的主要職責由隔離子系統的訪問,請求委派。該角色不建議涉及任何的邏輯。僅僅做隔離和委派
子系統:乙個類或者類的集合,業務的處理集中在各個子系統中。子系統並不知道門面的存在。對於子系統來說。門面也是乙個客戶端
5.優點
1.減少客戶端和子系統的依賴。如果客戶端直接訪問子系統,導致客戶端強依賴於子系統。新增門面後客戶端的依賴於門面。和子系統無關。實現解耦
2.提高靈活性,基於優點1,客戶端依賴門面後,子系統內部的變不回影響到客戶端。
3.提高安全性。由於外界是通過門面訪問子系統的功能,只有在門面開通的情況下,外界才可以訪問
6.缺點
1. 違背開閉原則。沒有辦法通過擴充套件的方式修改門面,正能通過修改門面**滿足。如果我們將門面角色定義為抽象類或者介面。該缺點可以克服
7.使用場景
1.在系統初期的設計階段,層和層之間可以採用該種模式
2.生產過程中子系統不斷重構演化而越來越複雜,採用該模式提供提供乙個簡單的介面,減少之間的依賴
3.新系統需要接入老系統時可以為新系統提乙個簡單的訪問點。減少新系統和老系統之間依賴。讓新系統直接依賴於門面
4.子系統相對對立。外界對子系統的操作為黑箱操作。
5.降低風險擴散。降低個人**對整個專案的影響。在子系統中開發,通過該模式為外界提供乙個簡單的訪問介面
8.code
抽象門面,定義了訪問子系統的方法
public inte***ce ifadace
具體門面
public class subsystemfadace implements ifadace
@override
public boolean visitauditsystem()
@override
public float visitfinancesystem()
}
子系統
public class auditsystem
}public class financesystem
}public class usersystem
return new object();
}private boolean checkresut()
}
客戶端
public class client
}
注意事項:
1.乙個子系統可以有多個門面。當後續門面模擬較臃腫。我們可以按照功能將門面類進行拆分。
2.子系統可以提供不同的訪問路徑。在上面的例子中門面類提供了對各個系統的訪問,現在只需要訪問usersystem
目前有兩種方案:1.採用現有類不做任何擴充套件,但是這樣會存在問題:將另外兩系統的訪問點暴露給客戶端。2.新增門面類。該類中只提供訪問usersystem的介面,但是盡量採用系統原有的門面類。
public class usersystemfadace
}
3.門面類不應該涉及任何的邏輯。在上面的例子中需要先訪問userssytem,然後在訪問其他的子系統
現在有如下幾種方案1.採用目前系統中提供的api,將呼叫順序委託給客戶端 2.在現有的門面類中新增usersystem子系統的訪問,但是這樣存在問題門面類涉及了具體的業務邏輯,門面類物件只是提供乙個訪問子系統的路徑,不應該也不能參與具體的業務邏輯否則會產生乙個倒依賴的問題子系統必須依賴門面才能被訪問,違背單一職責,破壞了系統的封裝性 3.建立封裝類,封閉完成後提供給門面類
方案1:略
方案2:
public class subsystemfadace implements ifadace
@override
public boolean visitauditsystem()
@override
public float visitfinancesystem()
}
方案3:
public class uasystemcontext
return false;}}
public class subsystemfadace implements ifadace
@override
public boolean visitauditsystem()
@override
public float visitfinancesystem()
}
外觀模式 門面模式 結構型
設計模式主要有23種,大致可分為三類 建立型,機構行,行為型 具體如下 1,單例設計模式 2,工廠設計模式 3,建造者設計模式 4,原型設計模式 5,設計模式 6,橋接設計模式 7,裝飾設計模式 8,介面卡設計模式 9,外觀設計模式 10,享元設計模式 11,組合設計模式 12,模板設計模式 13,...
設計模式 結構型模式 外觀模式
粗淺地理解,外觀模式的核心思想就是把分散的方法集中到乙個方法a裡呼叫,外部只需要呼叫a方法就可以把所有的方法都跑一遍,簡單省事。例如上圖的病人看病流程。假設有guahao menzhen huajia quyao 4個方法,如果沒有外觀模式,100個地方用到這個流程,四個方法每個都要各寫100遍呼叫...
設計模式 結構型模式 外觀模式
組建乙個家庭影院 傳 統方式解決影院管理 clienttest 傳統方式解決影院管理問題分析 1 在clienttest 的main方法中,建立各個子系統的物件,並直接去呼叫子系統 物件 相關方法,會造成呼叫過程混亂,沒有清晰的過程 2 不利於在clienttest 中,去維護對子系統的操作 3 解...