《javascript设计模式》笔记之第十二章:装饰者模式

一、装饰者模式的作用


为函数或者对象的方法添加一些行为。

二、装饰者模式的原理


装饰者模式不是直接修改对象,而是以要修改的对象为基础,新建一个对象。不过这个新建的对象看起来就像在原对象的基础上增添了一些行为而已。

1、在对象中使用装饰者模式:就是把对象作为参数传入另一个构造函数中,然后这个构造函数里面就利用这个对象,创造出一个新的附加了一些行为的对象。

2、在函数中使用装饰者模式:把函数传入另一个函数中,然后返回一个以参数函数为基础的函数。

三、装饰者模式的简单例子


需求一:

我们要创建一个游戏,里面的人物可以装备一些剑盾等道具。

实现一:

        function Person(personName) {
            this.name = personName;
        }

        Person.prototype.showEquipment = function() {
            return ‘‘;//由于一开始人物是没有装备的。所以是空
        };

        //一个装饰者类,可以用来装备剑
        function equipSword(person) {
            this.person = person;
            this.name = person.name;
        }
        equipSword.prototype.showEquipment = function() {
            return this.person.showEquipment() + ‘sword;‘;
        };

        //一个装饰者类,可以用来装备盾
        function equipShield(person) {
            this.person = person;
            this.name = person.name;
        }
        equipShield.prototype.showEquipment = function() {
            return this.person.showEquipment() + ‘shield;‘;
        };
        //使用
        var person = new Person(‘guoqinglinag‘);
        alert(person.showEquipment());//一开始什么都没有装备
        person = new equipSword(person);
        alert(person.showEquipment());//装备了sword之后,会显示sword
        person = new equipShield(person);
        alert(person.showEquipment());

需求二:

我们有一个函数,调用它会输出一串字符串。我们现在要求这个函数输出的都是大写。

实现二:

        //一个输出一串字符串的函数
        function echoStr() {
            return ‘this is a string‘;
        }

        //一个装饰者函数
        function toUpperCase(func) {
            return function() {
                return func().toUpperCase();
            }
        }

        //使用
        alert(echoStr());
        echoStr = toUpperCase(echoStr);
        alert(echoStr());

时间: 2024-10-06 09:31:38

《javascript设计模式》笔记之第十二章:装饰者模式的相关文章

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

第十二章 1.本章是综合前面章节的所有东西的,一个综合实例 2.流程:①项目简介:a.获取原始资料(包括文本.图片.音视频等) b.站点结构(文件目录结构) c.页面(文件)结构 ②设计(切图) ③css -  base.css用于引入使用的css文件 color.css  - 用于设置样式 layout.css - 用于设置布局 Typography.css - 用于设置版式 3.题外话:①在实际开发中,即使是一个空白项目也往往不会从一无所有做起,而借助的平台一般会提供目录结构,所以需要把自己

JavaScript高级程序设计:第十二章

DOM1级主要定义的是HTML和XML文档的底层结构.DOM2和DOM3级则在这个结构的基础上引入了更多的交互能力,也支持了更高级的XML特性.为此DOM2和DOM3级分为许多模块,这些模块如下: DOM2级核心: DOM2级视图: DOM2级事件: DOM2级样式: DOM2级遍历和范围: DOM2级HTML. 一.DOM变化 DOM2级和3级的目的在于扩展DOM API,以满足操作XML的所有需求,同时提供更好的错误处理及特性检测能力. 1.针对XML命名空间的变化 有了XML命名空间,不同

鸟哥的Linux私房菜_基础版_学习笔记8:第十二章 正规表示法与文件格式化处理

11.2 基础正规表示法 11.2.1 语系对正规表示法的影响 由於不同语系的编码数据并不相同,所以就会造成数据撷取结果的差异了. 举例来说,在英文大小写的编码顺序中,zh_TW.big5 及 C 这两种语系的输出结果分别如下: LANG=C     时:0 1 2 3 4 ... A B C D ... Z a b c d ...z LANG=zh_TW 时:0 1 2 3 4 ... a A b B c C d D ... z Z 特殊符号 代表意义 [:alnum:] 代表英文大小写字节及

apue学习笔记(第十二章 线程控制)

本章将讲解控制线程行为方面的详细内容,而前面的章节中使用的都是它们的默认行为 线程属性 pthread接口允许我们通过设置每个对象关联的不同属性来细调线程和同步对象的行为.管理这些属性的函数都遵循相同的模式:1.每个对象与自己类型的属性对象进行关联(线程与线程属性关联,互斥量与互斥量属性关联等)2.有一个初始化函数,把属性设置为默认值3.有一个销毁属性对象的函数4.每个属性都有一个从属性对象中获取属性值的函数5.每个属性都有一个设置属性值的函数 下面是线程属性pthread_attr_t的初始化

JAVASE学习笔记:第十二章 集合

因数组一旦创建长度就不能改变 集合(collection),将多个相同性质的元素汇聚成一个整体   所在java.util包 集合框架(collection framework) 一.List是一个有序的.可重复的子接口,ArrayList是实现list的一个子类 在集合当中只能存放引用数据类型,不能存放基本数据类型 ArrayList list=new ArrayList(); list.add(对象); list.add(位置,对象); list.get(2);//获取指定位置的元素,返回的

流畅python学习笔记:第十二章:子类化内置类型

子类化内置类型 在python2.2之后,内置类型都可以子类化,但是有一个注意事项:内置类型不会调用用户定义的类覆盖的特殊方法.这个说起来比较绕口,什么意思呢.我们来看下下面的代码: class DopperDict(dict):     def __setitem__(self, key, value):         super(DopperDict,self).__setitem__(key,[value]*2) ⑴ if __name__=="__main__":     d

《HBase权威指南》读书笔记12:第十二章 集群管理

运维任务 减少节点 先停止一个region服务器 $ ./bin/hbase-daemon.sh stop regionserver region服务器会先关闭所有region,然后把自己停止. 等待zk超时后就会过期. master会将这台机器上的region移动到别的机器上 注意:节点关闭之前要先禁用负载均衡 hbase(main):0.01:0>balance_switch false graceful_stop 但是region下线会带来一定的服务不可用时间,时间取决于zk的超时.这种方

Java 第十二章 继承 笔记

Java 第十二章  继承 笔记 一.使用继承:     1)方便修改代码     2)减少代码量 二.super 继承object 类:super 访问父类的无参构造:super 指的是object 的无参构造.     例:子类调用父类:super.属性 / super.方法    注意:子类不能继承父类私有属性:得用set.get方法来调用:    super只能写在代码块的第一句:super只能调用非私有的方法:    super只能出现在子类的方法和构造方法中. 三.不能被继承的父类成

Android群英传笔记——第十二章:Android5.X 新特性详解,Material Design UI的新体验

Android群英传笔记--第十二章:Android5.X 新特性详解,Material Design UI的新体验 第十一章为什么不写,因为我很早之前就已经写过了,有需要的可以去看 Android高效率编码-第三方SDK详解系列(二)--Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能 这一章很多,但是很有趣,也是这书的最后一章知识点了,我现在还在考虑要不要写这个拼图和2048的案例,在此之前,我们先来玩玩Android5.X的新特性吧!