java設計模式-外觀模式
1.**外觀模式為子系統中的一組接口提供一個一緻的界面,此模式定義了一個高層接口,這個接口使得這個一子系統更加容易使用**
2)外觀模式通過定義一個一緻的接口,用以屏蔽内部子系統的細節,使得調用段隻需跟這個接口發生調用,而無需關心這個子系統的内部細節
原理類圖的說明(外規模式的角色)
- 外觀類(Facade):為調用端提供統―的調用接口,外觀類知道哪些子系統負責處理請求,進而将調用端的請求代理給适當子系統對象
- 調用者(Cliert):外觀接口的調用者
- 子系統的集合:指子產品或者子系統,處理Facade對象指派的任務,他是功能的提供者
比如電影院 播放電影 需要建立熒幕 和爆米花對象相應的功能 dvd對象的相應功能
使用外觀模式則隻需要 使用外觀類直接使用看電影方法 自動會調用相應的方法
爆米花類
public class baomihua {
//使用餓漢式建立單例對象
private static baomihua BAOMIHUA=new baomihua();
private baomihua(){}
//直接使用類名.擷取對象
public static baomihua getBAOMIHUA(){
return BAOMIHUA;
}
public void baomihuakaiji(){
System.out.println("爆米花開機");
}
public void zhabaomihua(){
System.out.println("炸爆米花");
}
}
DVD
public class Dvd {
private static Dvd DVD=new Dvd();
private Dvd(){}
public static Dvd getDVD(){
return DVD;
}
public void dvdkaiji(){
System.out.println("dvd開機");
}
public void dvdtouyin(){
System.out.println("播放");
}
public void close(){
System.out.println("關機");
}
銀幕
//銀幕
public class Screen {
private static Screen SCREEN=new Screen();
private Screen(){}
public static Screen getSCREEN(){
return SCREEN;
}
public void up(){
System.out.println("銀幕升起");
}
public void down(){
System.out.println("銀幕下降");
}
public void close(){
System.out.println("銀幕關機");
}
}
外觀類相當于遙控器 将其他類組合
//遙控器
public class Waiguanlei {
private Baomihua baomihua;
private Dvd dvd;
private Screen screen;
public Waiguanlei(){
this.baomihua= Baomihua.getBAOMIHUA();
this.dvd=Dvd.getDVD();
this.screen=Screen.getSCREEN();
}
//遙控器播放方法
public void bofangdianyin(){
baomihua.baomihuakaiji();
baomihua.zhabaomihua();
screen.down();
dvd.dvdkaiji();
dvd.dvdtouyin();
}
//遙控器播放關機
public void guanji(){
screen.up();
screen.close();
dvd.close();
}
}
測試類
public static void main(String[] args) {
//相當于遙控器
Waiguanlei waiguanlei=new Waiguanlei();
//播放電影
waiguanlei.bofangdianyin();
System.out.println("---------------");
//關閉電影
waiguanlei.guanji();
}
外觀模式的注意事項和細節
- 外觀模式對外展蔽了子系統的細節,是以外觀模式降低了用戶端對子系統使用的複雜性
- 外觀模式對用戶端與子系統的耦合關系,讓子系統内部的子產品更易維護和擴充
- 通過合理的使用外觀模式,可以幫我們更好的劃分通路的層次
- 當系統需要進行分層設計時,可以考慮使用Facade(外觀)模式
- 在維護一個遺留的大型系統時,可能這個系統已經變得非常難以維護和擴充,此時可以考慮為新系統開發一個Facade類,來提供遺留系統的比較清晰簡單的接口,讓新系統與Facade類互動,提高複用性
-
不能過多的或者不合理的使用外觀模式,使用外觀模式好,還是直接調用子產品好。
要以讓系統有層次,利于維護為目的。
Mybatis中 configuration中源碼分析