天天看點

設計模式(十一)外觀模式

外觀模式是另一種結構型設計模式,當我們想要隐藏系統的複雜實作,想客戶包含簡單的使用接口的時候,就可以使用外觀模式。我們需要建立一個外觀類,提供要給使用者暴露的方法。

外觀模式的優點就是使用者和系統解耦,系統可以獨立于使用者修改,缺點就是使用者雖然和系統解耦了,但是轉而和外觀類耦合。是以将來如果需要修改外觀類将是一個麻煩的事情。

我們用代碼來說明一下外觀模式吧。假設有這麼一個生産流程:工廠生産産品需要一個請求,請求包含了要生産産品的資訊,工廠收到資訊之後開始生産。對應的幾個類如下。

//請求類
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());
    }
           

繼續閱讀