《javascript设计模式》笔记之第十章 和 第十一章:门面模式和适配器模式

第十章:门面模式

一:门面模式的作用

  1. 简化已有的api,使其更加容易使用
  2. 解决浏览器的兼容问题

二:门面模式的本质

门面模式的本质就是包装已有的api来简化操作

 

三:门面模式的两个简单例子

下面这个例子就是一个简单的门面模式,用来处理事件的兼容性问题:

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

下面这个例子使用门面模式来简化设置样式的操作:

function setStyle(elements, prop, val) {
  for (var i = 0, len = elements.length-1; I < len; ++i) {
    document.getElementById(elements[i]).style[prop] = val;
  }
}

//使用
setStyle([‘foo‘], ‘position‘, ‘absolute‘);
setStyle([‘foo‘], ‘top‘, ‘50px‘);
setStyle([‘foo‘], ‘left‘, ‘300px‘);

第十一章:适配器模式

一:适配器模式的作用

  1. 改变已有接口的使用方式,使其适应新的接口需求

二:适配器模式的本质

其实就是对已有的接口进行包装,使它完成新接口的调用方式。注意,本质是不改变已有接口的功能的。

三:适配器模式的简单例子

假设我们有一个函数是这样子的:

function interfaceMethod(str1, str2, str3) {
  ...
}

它要求我们传入的参数是三个字符串。但是我们现在有一个对象里面包含了三个字符串参数:

var clientObject = {
  string1: ‘foo‘,
  string2: ‘bar‘,
  string3: ‘baz‘
};

那我们为了使新接口传入的参数为对象,就可以这样对原有的接口进行改变:

function clientToInterfaceAdapter(o) {
  interfaceMethod(o.string1, o.string2, o.string3);
}

这样的话我们就可以在不改变原有的对象结构情况下调用原有函数了。

 

 

 

 

 

 

 

 

 

时间: 2024-11-05 12:13:13

《javascript设计模式》笔记之第十章 和 第十一章:门面模式和适配器模式的相关文章

JavaScript DOM编程艺术-学习笔记(第十章、第十一章)

第十章 1.动画中,因为js的效率高,所以看不见过渡效果 2.题外话:①国外人写书,总是先感谢一遍亲朋好友,最后感谢自己的家人. 3."除非允许用户'冻结'移动的内容,否则应该避免让内容在页面中移动" 4.动画经常遇到的问题:鼠标来回移动,则动画就会出问题. 原因:队列事件积累. 解决:判断,如果此时有动画,则清空队列. 5.小知识点:①ceil 向上取整 ②floor 向下取整 ③round 取最近的整数 第十一章 1."html5 问世背后的明争暗斗就像是一步韩国肥皂剧&

Javascript设计模式与开发实践详解(二:策略模式) http://www.jianshu.com/p/ef53781f6ef2

上一章我们介绍了单例模式及JavaScript惰性单例模式应用这一次我主要介绍策略模式策略模式是定义一系列的算法,把它们一个个封装起来,并且让他们可以互相替换.比方说在现实中很多时候也有很多途径到达同一个目的地,比如我们去某个地方旅游,可以选择坐飞机,乘火车,骑自行车等方式. 使用策略模式计算奖金 很多公司的年终奖是根据员工的工资基数和年底绩效来发放的.例如,绩效为 S 的人年终奖有4倍工资,绩效为 A 的人年终奖有3倍工资,绩效为 B 的人年终奖有2倍工资.现在我们来计算员工的年终奖. var

PHP 设计模式 笔记与总结(10)数据对象映射模式 2

[例2]数据对象映射模式结合[工厂模式]和[注册模式]的使用. 入口文件 index.php: <?php define('BASEDIR',__DIR__); //定义根目录常量 include BASEDIR.'/Common/Loader.php'; spl_autoload_register('\\Common\\Loader::autoload'); echo '<meta http-equiv="content-type" content="text/

PHP 设计模式 笔记与总结(9)数据对象映射模式

[数据对象映射模式] 是将对象和数据存储映射起来,对一个对象的操作会映射为对数据存储的操作.例如在代码中 new 一个对象,使用数据对象映射模式就可以将对象的一些操作比如设置一些属性,就会自动保存到数据库,跟数据库中表的一条记录对应起来. [代码实现] 在代码中实现数据对象映射模式,我们将实现一个 ORM(对象关系映射 Object Relational Mapping) 类,将复杂的 SQL 语句映射成对象属性的操作.同时结合[工厂模式]和[注册模式]使用. [例1] 数据库 test ,us

【读书笔记】C#高级编程 第二十一章 任务、线程和同步

(一)概述 所有需要等待的操作,例如,因为文件.数据库或网络访问都需要一定的时间,此时就可以启动一个新的线程,同时完成其他任务. 线程是程序中独立的指令流. (二)Paraller类 Paraller类是对线程的一个很好的抽象,该类位于System.Threading.Tasks名称空间中,提供了数据和任务并行性. Paraller.For()和Paraller.ForEach()方法在每次迭代中调用相同的代码,二Parallel.Invoke()方法允许同时调用不同的方法.Paraller.I

敏捷软件开发 第十章、第十一章、第十二章

第10章 Liskov 替换原则(LSP) 原则解释: 子类型(sbutype)必须能够替换掉它们的基类型(base type) 这一章没大看懂,貌似和 OCP(开发关闭原则)关系很大,以后再研究 第11章 依赖倒置原则(DIP) 原则解释: a. 高层模块不应该依赖于低层模块.二者都应该依赖于抽象. b. 抽象不应该依赖于细节.细节应该依赖于抽象. “请注意这个规则里的倒置不仅仅是依赖关系的倒置,它也是接口所有权的倒置.我们通常会认为工具库应该拥有它们自己的接口.但是当应用了 DIP 时,我们

设计模式之门面模式---Facade Pattern

模式的定义 门面模式(Facade Pattern)也叫做外观模式,定义如下: Provide a unified interface to a set of interfaces in a subsystem. Facade defines a highet-level interface that makes the subsystem easier to use. 要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行.门面模式提供一个高层次的接口,使得子系统更易于使用. 类型 结构

《Javascript 设计模式》-读书笔记

第七章   设计模式类别 一.设计模式有三种类别 1.创建型模式:专注于处理对象机制.包括:构造器.工厂.抽象.原型.单例.生成器 2.结构型模式:用于找出在不同对象之间建立关系密切的简单方法. 包括:装饰者.外观.享元.适配器.代理 3.行为模式:用于改善或简化系统中不同对象之间的通信.包括:迭代器.中介者.观察者.访问者 第八章   设计模式分类 <Javascript 设计模式>-读书笔记,布布扣,bubuko.com

【读书笔记】读《JavaScript设计模式》之观察者模式

一.定义 在事件驱动的环境中,比如浏览器这种持续寻求用户关注的环境中,观察者模式(又名发布者-订阅者(publisher-subscripber)模式)是一种管理人与其任务之间的关系(确切地讲,是对象及其行为和状态之间的关系)的得力工具.用JavaScript的话来说,这种模式的实质就是你可以对程序中某个对象的状态进行观察,并且在其发生改变时能够得到通知. 二.例子 我们需要一个发布者的构造函数,它为该实例定义了一个类型为数组的属性,用来保存订阅者的引用. function Publisher(