• [设计模式]门面模式


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

    //这是一个简单的门面模式例子,一个需求在不同的浏览器里有差异化。
    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;
    }
    }

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

  • 相关阅读:
    Java集合:HashMap
    Java线程池原理
    Linux常用命令
    分布式系统基本概念
    接口中的default方法(默认方法)
    正则表达式匹配+过滤
    Java Optional类
    mongo过期索引
    Java8函数式接口简介
    JS版微信6.0分享接口用法分析
  • 原文地址:https://www.cnblogs.com/zzbo/p/2356138.html
Copyright © 2020-2023  润新知