• [设计模式]门面模式


    在写门面模式之前,我总结了一下,觉得门面模式的写法和单体模式有些相似。
    但查阅过一些资料和朋友讨论之后,发现门面模式主要偏向于解决一些差异化的问题。
    我们先看一个简单的例子。

    //这是一个简单的门面模式例子,一个需求在不同的浏览器里有差异化。
    var Facade = {};
    Facade.isIE = function(){
    if(document.all){
    alert("这是IE");
    //do something...
    }else{
    alert("这不是IE");
    //do something...
    }
    }

    假设现在要设计一个库,里面需要处理不同浏览的事件差异化问题。
    比如,IE下event事件是在window对象下。
    IE下,事件目标和标准浏览器的不同。
    IE下,阻止事件静默行为。
    ......
    好,我们看以下这个例子。

    //这是一个简单的门面模式例子
    var Obj = {};
    var Obj.util = {};
    var Obj.util.Event = {
    //解决不同浏览器的事件差异
    getEvent:function(e){
    return e||window.event;
    },

    //解决事件目标对象差异
    getTarget:function(e){
    return e.target || e.srcElement;
    }

    //阻止浏览器静默方法差异解决
    preventDefault:function(e){
    if(e.preventDefault){
    e.preventDefault();
    }else{
    e.returnValue = false;
    }
    }
    }

    其实门面模式的就是把差异问题放在一个函数中,这样就可以提供一个一致的接口。
    或者我们还可以针对IE和标准浏览器的事件绑定的差异写一个例子。

    var addEvent = function(el,type,fn){
    if(window.addEventListener){
    el.addEventListener(type,fn);
    }else if{
    el.attachEvent('on' + type,fn);
    }else{
    el['on'+type] = fn;
    }
    }

    本模式也被称为外观模式。

  • 相关阅读:
    C#发送邮件的实现实例解析
    抄录一下别人的经验
    centos学习一
    关于百度地图API批量转换成坐标的方法
    js和PHP等脚本语言for循环和if语句里面定义变量的作用域
    关于js中去取数组中的重复字符串
    关于handler返回的数据处理
    通过定义任务委托的方法处理 action
    关于点击按钮图片左右切换的随笔
    关于网站内容分享到新浪微博等的代码
  • 原文地址:https://www.cnblogs.com/zzbo/p/2356138.html
Copyright © 2020-2023  润新知