外觀模式(facade)是結構性模式的一種,也有人稱它為門面模式。結構型模式的核心作用是從程式的結構上實作低耦合,進而可以擴大整體的類結構,用來解決更大的問題。
模式的核心
外觀模式的核心就是為子系統提供統一的入口,封裝系統的複雜性,便于用戶端調用。
模式角色
外觀角色:在用戶端可以調用它的方法,它會把用戶端調用需要的操作放在一起,并且封裝起來,對外不暴露細節。
子系統角色:子系統是用戶端使用該功能的時候需要調用的對象們。
模式的實作
//外觀角色
public class Tour {
//子系統的調用和子系統的操作封裝
public void myTour(){
Hotle h = new Hotle();
h.reserve();
Spots s = new Spots();
s.buyTicket();
Transport t = new Transport();
t.buyTickets();
}
}
//子系統角色
class Hotle{
//子系統角色中需要調用的方法
public void reserve(){
System.out.println("預定本家酒店");
}
}
//子系統角色
class Spots {
//子系統角色中需要調用的方法
public void buyTicket(){
System.out.println("購買了本景點的票");
}
}
//子系統角色
class Transport{
//子系統角色中需要調用的方法
public void buyTickets(){
System.out.println("購買了來回的車票");
}
}
模式的評價
外觀模式是設計模式中用的比較多的一個。它非常符合迪米特法則,将操作的具體實作細節隐藏起來,降低耦合,減少複雜度。而且它有利于單一職責原則,讓類專注的隻做自己這一層次的功能。它還提高了便捷性,用戶端無需處理操作的細節中的邏輯,隻需要調用外觀角色即可。