外觀模式是另一種結(jié)構(gòu)型設(shè)計(jì)模式,當(dāng)我們想要隱藏系統(tǒng)的復(fù)雜實(shí)現(xiàn)田弥,想客戶包含簡單的使用接口的時(shí)候涛酗,就可以使用外觀模式铡原。我們需要創(chuàng)建一個(gè)外觀類,提供要給用戶暴露的方法商叹。
外觀模式的優(yōu)點(diǎn)就是用戶和系統(tǒng)解耦燕刻,系統(tǒng)可以獨(dú)立于用戶修改,缺點(diǎn)就是用戶雖然和系統(tǒng)解耦了剖笙,但是轉(zhuǎn)而和外觀類耦合卵洗。所以將來如果需要修改外觀類將是一個(gè)麻煩的事情。
我們用代碼來說明一下外觀模式吧弥咪。假設(shè)有這么一個(gè)生產(chǎn)流程:工廠生產(chǎn)產(chǎn)品需要一個(gè)請求过蹂,請求包含了要生產(chǎn)產(chǎn)品的信息,工廠收到信息之后開始生產(chǎn)聚至。對應(yīng)的幾個(gè)類如下酷勺。
//請求類
public class Request {
private String msg;
public Request(String msg) {
this.msg = msg;
}
public String getMsg() {
return msg;
}
}
//產(chǎn)品類
public class Product {
private String name;
public Product(String name) {
this.name = name + "對應(yīng)的產(chǎn)品";
}
public String getName() {
return name;
}
}
//工廠類
public class Factory {
public Product produce(Request request){
Product product=new Product(request.getMsg());
return product;
}
}
如果讓用戶來管理整個(gè)生產(chǎn)流程,無疑是比較復(fù)雜的扳躬。我們可以建立一個(gè)外觀類隱藏所有這些細(xì)節(jié)脆诉。
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());
}