外观模式为一组复杂的子系统接口提供一个更高级的统一接口,通过这个接口使得对子系统接口的访问更容易,不符合单一职责原则和开放封闭原则。
其实外观模式很常见,它其实就是通过一个单独的函数,来简化对一个或多个更大型,更为复杂的函数的访问,是一种对复杂操作的封装。
初始化一个原生 Ajax 请求其实是复杂的,我们可以通过封装来简化
functionajaxCall(type,url,callback,data){letxhr=(function(){try{// 标准方法returnnewXMLHttpRequest()}catch(e){}try{returnnewActiveXObject("Msxm12.XMLHTTP")}catch(e){}}())STATE_LOADED=4STATUS_OK=200// 一但从服务器收到表示成功的相应消息,则执行所给定的回调方法xhr.onreadystatechange=function(){if(xhr.readyState!==STATE_LOADED){return}if(xhr.state==STATUS_OK){callback(xhr.responseText)}}// 发出请求xhr.open(type.toUpperCase(),url)xhr.send(data)}封装之后,我们发送请求的样子就变成了
// 使用封装的方法ajaxCall("get","/url/data",function(res){document.write(res)}) 外观模式适用于当需要同时有多个复杂操作时,通过把复杂操作封装,调用时直接用方法调用,提高代码的可阅读性和可维护性。