在现实中,我们到达一个地方,通常可以选择不同的方式,例如自行车,火车,汽车,飞机等。在程序设计中,通常也会有这样的情况,实现一个功能有多个方案可以选择,比如一个压缩文件的程序,既可以选择zip算法,也可以选择gzip算法。而这种情况,在设计模式中,称为策略模式。策略模式的定义:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。例子:很多公司的年终奖是根据员工的工资基数和年底绩效情况来方法的。...
装饰者模式的主要功能就是动态的将责任附加到对象上,而由于javascript的动态特性,为javascript函数添加新的职责将变得非常容易 一、概念 装饰者提供比继承更有弹性的替代方案。
装饰者用于包装同接口的对象,不仅允许你向方法添加行为,而且还可以将方法设置成原始对象调用(例如装饰者的构造函数)。装饰者通过重载方法的形式添加新功能,该模式可以在被装饰者前面或者后面加上自己的行为以达到特定的目的。 二、实例 1functi...
1、javascript灵活语言方式一、function checkName() { }
function checkEmail()) { }
function checkPassword() { } 方式二、var checkName=function(){}
var checkEmail=function(){}
var checkPasswork=function(){}方式1一和方式二都是全局作用域变量,方式二能直观说名在javascript中函数也是变量,只是定义时位置不同而已 2、用对象收编变量方式一、var checkObject={checkName:function(){},checkEmail:function(){},checkP...
一、继承 js并没有继承这一个现有的机制,所以我们所说的继承是通过JS本身的机制去实现的。1、类式继承 1// 类式继承 2 3// 父类 4function SuperClass () {5this.superValue = true 6}7 8// 为父类原型添加方法 9 SuperClass.prototype.getSuperValue = function (arguments) {
10returnthis.superValue
11}
1213// 声明子类14function SubClass () {
15this.subValue = false16}
1718// 继承父类19 SubClass.prototype = new S...
一、定义 单例模式:又称单体模式,是只允许实例化一次的对象类。二、用途 1. 命名空间的管理员 如小张写的代码,就可以定义一个叫xiaozhang的命名空间,访问属性或方法的时候使用xiaozhang.xx; 如小li写的代码,就可以定义一个叫xiaoli的命名空间,访问属性或方法的时候使用xiaoli.xx;var xiaozhang = {checkName: function () {// code },COUNT: 100
}; 2.使模块分明 可以通过单例管理代码块的各个模块。如...
中介者模式(Mediator Pattern)定义:用来降低多个对象和类之间的通信复杂性。目的:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。场景:MVC框架中的控制器C就是模型M和识图V的中介者。let mediator = (() => {let msg = {}return {register: (type, action) => {if (!msg[type]) msg[type] = []msg[type].push(action)},send: (type) => {if ...
一上来写了一个200多行快300行的demo。。结果给我报错,调试半天也没弄好,哎。。先把这个享元模式说了吧~大概的意思就是说当几个对象之间有相同的动作的时候,一个一个去创建那么必定会造成大量的占据内存,将它们共有的方法提取出来,共享一个对象,这样就节约了内存,提高了响应的速度啦,来,上栗子!// 享元动作var FlyWeight = {moveX : function ( x ) {this.x = x;},moveY : function ( y ) {this.y = y;}
};
// 人物移动方...
1<!DOCTYPE html> 2<html> 3<head> 4<meta charset="UTF-8"> 5<title>javascript高级语法2-高级类</title> 6</head> 7<body> 8<script> 9/* 10 //在js中利用function来定义类。11 function Shape(){12 var x=1;13 var y=2;14 }15 //实例化对象;16 var a = new Shape();17 // 在类的内部用var定义的是私有变量。如何定义...
个人理解:桥接模式就是更进一步地封装已有api,通过这个封装连接你的输入和底层api(初步理解,以后加深理解有不同体会之后可能要修改)一:示例:事件监听器下面这个示例就演示了通过一座桥(也就是一个API函数)来连接你的输入和原生的ajaxfunction getBeerById(id, callback) {// Make request for beer by ID, then return the beer data.asyncRequest(‘GET‘, ‘beer.uri?id=‘+ id, function(resp) {// callback responsec...
上部分主要介绍高阶函数的常见形式,本部分将着重介绍高阶函数的高级应用。 1.currying currying指的是函数柯里化,又称部分求值。一个currying的函数会先接受一些参数,但不立即求值,而是继续返回给另一个函数,通过闭包存储起来。等到函数被真正需求要求值的时候,将之前传入的参数统一起来求值。例如,我们要计算一个月的开销,我们并不需要计算每天具体花了多少,而是需要计算月底总共花掉多少,也就是说,实际上我们只...
1、类式继承,模拟面向对象语言的继承方式function extend(subClass, superClass) { var F = function() {}; F.prototype = superClass.prototype; subClass.prototype = new F(); subClass.prototype.constructor = subClass; subClass.superclass = superClass.prototype; if(superClass.prototype.constructor == Object.prototype.constructor) { superClass.prototype.constructor =...
多态多态的实际含义:同一操作作用与不同的对象上面,可以产生不同的解释和不同的执行结果,就是说,给不同的对象发送同一个消息的时候,这些对象会根据这个消息分别给出不同的反馈代码如下: class Duck{};class Chicken{};let make = function(animal){//instanceof运算符用来判断一个构造函数的prototype属性所指向的对象是否存在另外一个要检测对象的原型链上if(animal instanceof Duck){console.log(‘gagaga‘);}elsei...
适配器模式的作用是解决两个软件实体间的接口不兼容的问题。使用适配器模式之后,原本由于接口不兼容而不能工作的两个软件实体可以一起工作。 适配器的别名是包装器(wrapper),这是一个相对简单的模式。在程序开发中有许多这样的场景:当我们试图调用模块或者对象的某个接口时,却发现这个接口的格式并不符合目前的需求。这时候有两种解决办法,第一种是修改原来的接口实现,但如果原来的模块很复杂,或者我们拿到的模块是一段...
在Javascript中,单例模式是一种最基本又经常用到的设计模式,可能在不经意间就用到了单例模式。本文将从最基础的理论开始,讲述单例模式的基本概念和实现,最后用一个例子来讲述单例模式的应用。理论基础概念单例模式,顾名思义就是只有一个实例存在。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的...
dom 的事件模式就是观察者模式/** 观察者模式又叫发布者-订阅者模式* 我发布一则消息,消息就在那里;你若订阅,我便发送。
*//** js和dom之间的实现就是一种观察者模式;* 所有的dom元素都发布了事件,然后观察谁订阅了这个事件;* 例:div订阅了click事件
*/
document.getElementById("banner").onclick = function () {alert("div is clicked!");
}; 原生实现/** js 观察者模式 又称 订阅/发布模式* 通过创建“可观察”对象,当...