Javascript--装饰器模式和观察者模式
装饰器模式
(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--装饰器模式和观察者模式的更多相关文章
- javascript装饰器模式
装饰器模式 什么是装饰器 原名decorator 被翻译为装饰器 可以理解为装饰 修饰 包装等意 现实中的作用 一间房子通过装饰可以变得更华丽,功能更多 类似一部手机可以单独使用 但是很多人都愿意家个 ...
- 从ES6重新认识JavaScript设计模式: 装饰器模式
1 什么是装饰器模式 向一个现有的对象添加新的功能,同时又不改变其结构的设计模式被称为装饰器模式(Decorator Pattern),它是作为现有的类的一个包装(Wrapper). 可以将装饰器理解 ...
- JavaScript设计模式—装饰器模式
装饰器模式介绍 为对象添加新的功能,不改变其原有的结构和功能,原有的功能还是可以使用,跟适配器模式不一样,适配器模式原有的已经不能使用了,装饰器示例比如手机壳 UML类图和代码示例 Circle示原来 ...
- Javascript 装饰器极速指南
pablo.png Decorators 是ES7中添加的JavaScript新特性.熟悉Typescript的同学应该更早的接触到这个特性,TypeScript早些时候已经支持Decorators的 ...
- Java设计模式系列-装饰器模式
原创文章,转载请标注出处:<Java设计模式系列-装饰器模式> 一.概述 装饰器模式作用是针对目标方法进行增强,提供新的功能或者额外的功能. 不同于适配器模式和桥接模式,装饰器模式涉及的是 ...
- JS 设计模式九 -- 装饰器模式
概念 装饰者(decorator)模式能够在不改变对象自身的基础上,动态的给某个对象添加额外的职责,不会影响原有接口的功能. 模拟传统面向对象语言的装饰者模式 //原始的飞机类 var Plane = ...
- 装饰器模式&&ES7 Decorator 装饰器
装饰器模式(Decorator Pattern)允许向一个现有的对象动态添加新的功能,同时又不改变其结构.相比JavaScript中通过鸡肋的继承来给对象增加功能来说,装饰器模式相比生成子类更为灵活. ...
- 大型Java进阶专题(八)设计模式之适配器模式、装饰者模式和观察者模式
前言 今天开始我们专题的第八课了.本章节将介绍:三个设计模式,适配器模式.装饰者模式和观察者模式.通过学习适配器模式,可以优雅的解决代码功能的兼容问题.另外有重构需求的人群一定需要掌握装饰者模式. ...
- PHP 装饰器模式
装饰器模式:是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能. [装饰器模式中主要角色] 抽象组件角色(Component):定义一个对象接口,以规范准备接受附加责任的对象,即可以给这 ...
随机推荐
- Install Houdini 12.5 x64 in CentOS 7
Thanks for Must(QQ ID)'s big help for installing Houdini in CentOS7. - download HOUDINI_FX_V12.5.371 ...
- Html5上传后有所见图片效果前端代码实现
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- JQuery 上传文件插件 Uploadify1
基于jquery的文件上传控件,支持ajax无刷新上传,多个文件同时上传,上传进行进度显示,删除已上传文件. <link href="~/Content/themes/uploadif ...
- table的自动增加
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- 【转】Oracle表分区
源地址:http://love-flying-snow.iteye.com/blog/573303
- C# 与JAVA 的RSA 加密解密交互,互通,C#使用BouncyCastle来实现私钥加密,公钥解密的方法
因为C#的RSA加密解密只有公钥加密,私钥解密,没有私钥加密,公钥解密.在网上查了很久也没有很好的实现.BouncyCastle的文档少之又少.很多人可能会说,C#也是可以的,通过Biginteger ...
- javascript type操作
var a; type a;//结果为undefined type b;//结果也是undefinedalert(a);//弹出undefinedalert(b);//错误代码 上述代码,type ...
- SQL Server Reporting Services本机模式下的权限管理
SQL Server Reporting Services在安装配置后,缺省只给BUILTIN\Administrators用户组(实际上只有本机的Administrator用户)提供管理权限.所以所 ...
- XE7 & IOS开发之开发账号(2):发布证书、发布授权profile的申请使用,附Ad hoc真机调试、生成ipa文件演示(XCode所有版本通用,有图有真相)
网上能找到的关于Delphi XE系列的移动开发的相关文章甚少,本文尽量以详细的图文内容.傻瓜式的表达来告诉你想要的答案. 原创作品,请尊重作者劳动成果,转载请注明出处!!! 注意,以下讨论都是以&q ...
- 部署web应用
package it.cast.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servle ...