外觀模式是另一種結構型設計模式,當我們想要隐藏系統的複雜實作,想客戶包含簡單的使用接口的時候,就可以使用外觀模式。我們需要建立一個外觀類,提供要給使用者暴露的方法。
外觀模式的優點就是使用者和系統解耦,系統可以獨立于使用者修改,缺點就是使用者雖然和系統解耦了,但是轉而和外觀類耦合。是以将來如果需要修改外觀類将是一個麻煩的事情。
我們用代碼來說明一下外觀模式吧。假設有這麼一個生産流程:工廠生産産品需要一個請求,請求包含了要生産産品的資訊,工廠收到資訊之後開始生産。對應的幾個類如下。
//請求類
public class Request {
private String msg;
public Request(String msg) {
this.msg = msg;
}
public String getMsg() {
return msg;
}
}
//産品類
public class Product {
private String name;
public Product(String name) {
this.name = name + "對應的産品";
}
public String getName() {
return name;
}
}
//工廠類
public class Factory {
public Product produce(Request request){
Product product=new Product(request.getMsg());
return product;
}
}
如果讓使用者來管理整個生産流程,無疑是比較複雜的。我們可以建立一個外觀類隐藏所有這些細節。
public class FactoryFacade {
private Factory factory;
public FactoryFacade() {
this.factory = new Factory();
}
public Product service(String msg) {
Request request = new Request(msg);
return factory.produce(request);
}
}
然後使用者隻需要簡單的使用外觀類即可,代碼也變得非常簡潔。
public void run() {
FactoryFacade facade=new FactoryFacade();
Product product=facade.service("A");
System.out.println(product.getName());
}