装饰器模式

(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. if、if elif判断

    1.if.py #coding=utf-8 user = 'alex' passwd = 'alex3714' username = input('username:') password = inp ...

  2. log_format为Nginx设置日志格式

    nginx服务器日志相关指令主要有两条,一条是log_format,用来设置日志格式, 另外一条是access_log,用来指定日志文件的存放路径.格式和缓存大小,一般在nginx的配置文件中日记配置 ...

  3. HBase 常用Shell命令

    两个月前使用过hbase,现在最基本的命令都淡忘了,留一个备查~ 进入hbase shell console$HBASE_HOME/bin/hbase shell如果有kerberos认证,需要事先使 ...

  4. 每天一个 Linux 命令(22):find 命令的参数详解

    find一些常用参数的一些常用实例和一些具体用法和注意事项. 1.使用name选项: 文件名选项是find命令最常用的选项,要么单独使用该选项,要么和其他选项一起使用.  可以使用某种文件名模式来匹配 ...

  5. Ext 三级联动 及附值

    /// <reference path="../../ext.js" />Ext.define('Myview.Region', { extend: 'Ext.form ...

  6. pyqt5安装

    花了一天时间,终于是装好了. 这东西硬是把我从Python2掰弯成了Python3 本来用pip安装了一个pyqt,但是后来才发现,这是个x64版本的. 我不知道啊! 我以为是还要装qt5 所以我把q ...

  7. javascript type操作

    var a; type a;//结果为undefined type b;//结果也是undefinedalert(a);//弹出undefinedalert(b);//错误代码  上述代码,type ...

  8. 第一次用阿里云ecs配置pptp vpn遇到的问题。

    在国外没办法使用一些国内一些涉及版权的网站,各种音乐和视频都没法看很不爽.自己租了个ecs.vps上安装vpn网上很多教程,但是有些地方只是copy上去还是不行的,得根据vps的具体情况改动一下才可以 ...

  9. MyEclipse10建立Maven Webapp项目并通过git传到GitHub

    先创建Maven Webapp项目 图文详解MyEclipse中新建Maven webapp项目的步骤(很详细) 在web项目的路径中右键(前提是你机器已经装了git)“Git Init Here”, ...

  10. 【转】常见的python机器学习工具包比较

    http://algosolo.com/ 分析对比了常见的python机器学习工具包,包括: scikit-learn mlpy Modular toolkit for Data Processing ...