装饰器模式

(function(){//装饰一棵树,装饰器模式通过对对象的属性进行改变来装饰对象。需要一个设置属性的方法
var tree={};
tree.decorate=function(){
print("Make sure the tree won\'t fall");
}; tree.getDecorator=function(deco){
tree[deco].prototype=this;
return new tree[deco];
}; tree.RedBalls=function(){
this.decorate=function(){
this.RedBalls.prototype.decorate();
print("Put on some red balls");
}
}; tree.BlueBalls=function(){
this.decorate=function(){
this.BlueBalls.prototype.decorate();
print("Add Blue Balls");
}
}; tree.Angle=function(){
this.decorate=function(){
this.Angle.prototype.decorate();
print("An angel on the top");
}
}; tree=tree.getDecorator("BlueBalls");
tree=tree.getDecorator("RedBalls");
tree=tree.getDecorator("Angle");
tree.decorate();
})();

观察者模式

(function(){    //观察者模式
var observer={
addSubscribe:function(callback){
this.subscribers[this.subscribers.length]=callback;
},
removeSubscrible:function(callback){
for(var i=0;i<this.subscribers.length;i++){
if(this.subscribers[i]===callback){
delete(this.subscribers[i]);
}
}
},
publish:function(what){
for(var i=0;i<this.subscribers.length;i++){
if(typeof this.subscribers[i]==="function"){
this.subscribers[i](what);
}
}
},
make:function(o){
for(var i in this){
o[i]=this[i];
o.subscribers=[];
}
}
}; //发布者
var blogger={
writeBlogPost:function(){
var content="Today is "+new Date();
this.publish(content);
}
} var la_time={
newIssue:function(){
var paper="Martians have landed on Earth!";
this.publish(paper);
}
}; observer.make(la_time);
observer.make(blogger);
//订阅者
var jack={
read:function(what){
print("I just read " + what);
}
}; var jill={
gossip:function(what){
print("You can not heard it from me but "+what);
}
}
//增加订阅者
blogger.addSubscribe(jack.read);
blogger.addSubscribe(jill.gossip);
blogger.writeBlogPost();
//删除订阅者
blogger.removeSubscrible(jill.gossip);
blogger.writeBlogPost(); la_time.addSubscribe(jill.gossip);
la_time.newIssue();
})();

Javascript--装饰器模式和观察者模式的更多相关文章

  1. javascript装饰器模式

    装饰器模式 什么是装饰器 原名decorator 被翻译为装饰器 可以理解为装饰 修饰 包装等意 现实中的作用 一间房子通过装饰可以变得更华丽,功能更多 类似一部手机可以单独使用 但是很多人都愿意家个 ...

  2. 从ES6重新认识JavaScript设计模式: 装饰器模式

    1 什么是装饰器模式 向一个现有的对象添加新的功能,同时又不改变其结构的设计模式被称为装饰器模式(Decorator Pattern),它是作为现有的类的一个包装(Wrapper). 可以将装饰器理解 ...

  3. JavaScript设计模式—装饰器模式

    装饰器模式介绍 为对象添加新的功能,不改变其原有的结构和功能,原有的功能还是可以使用,跟适配器模式不一样,适配器模式原有的已经不能使用了,装饰器示例比如手机壳 UML类图和代码示例 Circle示原来 ...

  4. Javascript 装饰器极速指南

    pablo.png Decorators 是ES7中添加的JavaScript新特性.熟悉Typescript的同学应该更早的接触到这个特性,TypeScript早些时候已经支持Decorators的 ...

  5. Java设计模式系列-装饰器模式

    原创文章,转载请标注出处:<Java设计模式系列-装饰器模式> 一.概述 装饰器模式作用是针对目标方法进行增强,提供新的功能或者额外的功能. 不同于适配器模式和桥接模式,装饰器模式涉及的是 ...

  6. JS 设计模式九 -- 装饰器模式

    概念 装饰者(decorator)模式能够在不改变对象自身的基础上,动态的给某个对象添加额外的职责,不会影响原有接口的功能. 模拟传统面向对象语言的装饰者模式 //原始的飞机类 var Plane = ...

  7. 装饰器模式&&ES7 Decorator 装饰器

    装饰器模式(Decorator Pattern)允许向一个现有的对象动态添加新的功能,同时又不改变其结构.相比JavaScript中通过鸡肋的继承来给对象增加功能来说,装饰器模式相比生成子类更为灵活. ...

  8. 大型Java进阶专题(八)设计模式之适配器模式、装饰者模式和观察者模式

    前言 ​ 今天开始我们专题的第八课了.本章节将介绍:三个设计模式,适配器模式.装饰者模式和观察者模式.通过学习适配器模式,可以优雅的解决代码功能的兼容问题.另外有重构需求的人群一定需要掌握装饰者模式. ...

  9. PHP 装饰器模式

    装饰器模式:是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能. [装饰器模式中主要角色] 抽象组件角色(Component):定义一个对象接口,以规范准备接受附加责任的对象,即可以给这 ...

随机推荐

  1. 免费SVN空间

    推荐免费的svn空间(SVN代码托管) 最近研究了国内和国外的免费svn空间,SVN代码托管,SVN在线,代码托管中心,有所心得. 1.http://www.svn999.com/ [推荐]国内的,免 ...

  2. Python的第一天

    一.Python的简介 Python诞生于作者是Guido van Rossum,Python来自Guido所挚爱的电视剧Monty Python's Flying Circus (BBC1960-1 ...

  3. 【巩固】bootstrap笔记二

    这段主要记录如何给排版完的页面加一些动画效果,用到了的插件有: wow.min.js jquery.singlePageNav.min.js animate.css 将导航条上对应的菜单和页面上对应的 ...

  4. Spark代码调优(一)

    环境极其恶劣情况下: import org.apache.spark.SparkContext import org.apache.spark.rdd.RDD import org.apache.sp ...

  5. mysql-5.7.13-win32 安装

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  6. php extract 函数的妙用 数组键名为声明为变量,键值赋值为变量内容

    extract 函数的妙用 数组键名为声明为变量,键值赋值为变量内容 它的主要作用是将数组展开,键名作为变量名,元素值为变量值,可以说为数组的操作提供了另外一个方便的工具

  7. C#播放声音的四种方法 +AxWindowsMediaPlayer的详细用法

    C#播放声音的四种方法 第一种是利用DirectX 1.安装了DirectX SDK(有9个DLL文件).这里我们只用到MicroSoft.DirectX.dll和 Microsoft.Directx ...

  8. [SQL]复制数据库某一个表到另一个数据库中

    SQL:复制数据库某一个表到另一个数据库中 SELECT * INTO 表1 FROM 表2 --复制表2如果只复制结构而不复制内容或只复制某一列只要加WHERE条件就好了 例子:SELECT * I ...

  9. Mysql查询英文如何严格区分大小写?

    1. 前提:在Mysql数据库中进行查询时,希望英文严格区分大小写.默认情况下是不区分大小写的.2. 演示如下:在数据库表emp中,job字段中存储的值有'Engineer',现在的情况是,下面的两句 ...

  10. js判断浏览器

    function myBrowser(){ var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串 ; if (isOpera) { ret ...