設計模式(六)-外觀模式(門面模式)

外觀模式

隱藏系統的復雜性,并向客戶端提供了一個客戶端可以訪問系統的接口,這種類型的設計模式屬于結構型模式,它向現有的系統添加一個接口,來隱藏系統的復雜性.

  • 圖例


    image.png
  • 代碼實現
class Chips{
    create(){
        return console.log('薯條')
    }
}
class Hamburg{
    create(){
        return console.log('漢堡包')
    }
}
class Coke{
    create(){
        return console.log('可樂')
    }
}

class Somecounter{
   constructor(){
       this.chips=new Chips()
       this.hamburg=new Hamburg()
       this.coke=new Coke()
   }
   make(){
      this.chips.create()
      this.hamburg.create()
      this.coke.create()
   }
}

class Client{
   constructor(){
     this.somecounter=new Somecounter();
   }
   order(){
      return this.somecounter.make()
   }
}

let client=new Client()
client.order() //薯條  漢堡包 可樂 

  • 應用場景
function ajax(type, url, callback, data) {
    // 根據當前瀏覽器獲取對ajax連接對象的引用
    var xhr = (function () {
            try {
                // 所有現代瀏覽器所使用的標準方法
                return new XMLHttpRequest();
            } catch (e) {}
            // 較老版本的internet Explorer兼容
            try {
                return new ActiveXObject("Msxml2.XMLHTTP.6.0");
            } catch (e) {}
            try {
                return new ActiveXObject("Msxml2.XMLHTTP.3.0");
            } catch (e) {}
            try {
                return new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
            // 如果沒能找到相關的ajax連接對象,則跑出一個錯誤。
            throw new Error("Ajax not support in this browser.")
        }())
        STATE_LOADED = 4,
        STATUS_OK = 200;
       // 一但從服務器收到表示成功的相應消息,則執行所給定的回調方法
    xhr.onreadystatechange = function (){
        if (xhr.readyState !== STATE_LOADED) {
            return;
        }
        if (xhr.state == STATUS_OK) {
            callback(xhr.responseText);
        }
    }

    // 使用瀏覽器的ajax連接對象來向所給定的URL發出相關的調用
    xhr.open(type.toUpperCase(), url);
    xhr.send(data);
}
// 使用方法
ajax("get", "/user/12345", function (rs) {
    alert('收到的數據為:' + rs);
})
優點
1.實現了子系統與客戶端之間松耦合的關系.
2.客戶端屏蔽了子系統組件,減少了客戶端所處理的對象數目,并使得子系統使用起來更加容易.
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容