外觀模式提供一個統一的高層接口,使子系統更易使用。客戶程式只需與門面對象交互,無需了解子系統內部複雜結構。
// 子系統接口
interface IElectricPowerMarketing {
String electricityChange();
String electricityBuild();
String electricityAmplitude();
String pay();
}
// 子系統實現
class IElectricPowerMarketingImpl implements IElectricPowerMarketing {
public String electricityChange() { ... }
public String electricityBuild() { ... }
public String electricityAmplitude() { ... }
public String pay() { ... }
}
// 門面類:上門服務代理人
class PublicAgent {
private IElectricPowerMarketing marketing = new IElectricPowerMarketingImpl();
public String sendElectricity() {
return marketing.electricityChange()
+ marketing.electricityBuild()
+ marketing.electricityAmplitude()
+ marketing.pay();
}
}
// 客戶端
class Client {
public static void main(String[] args) {
new PublicAgent().sendElectricity();
}
}
SessionFactory, Session, Query 等底層 API,客戶只需調用 find() 等高層方法。門面模式不符合「接口隔離原則」(門面接口可能較胖),但若合理使用,對系統設計極有裨益。避免在門面中加入業務邏輯,僅做委派與組合。