装饰器模式

(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. android-23 View.java - dispatchTouchEvent源码

    public class View implements Drawable.Callback, KeyEvent.Callback, AccessibilityEventSource { /** * ...

  2. oracle ||,

    || oracle数据库中的 ||称为 "字符串连接符" 用于连接查询结果,如下: select trade_id,accept_date from A; ------------ ...

  3. delphi 一个线程和主界面的交互的演示代码

    求一个线程和主界面的交互的演示代码求一个线程和主界面的交互的演示代码.线程和主界面处于两个Unit.线程中的user中不能引用主窗口.我只是想学习一下,线程和主界面交互的方法.去网上查了好几天资料,能 ...

  4. 25+ Useful Selenium Web driver Code Snippets For GUI Testing Automation

    本文总结了使用Selenium Web driver 做页面自动化测试的一些 tips, tricks, snippets. 1. Chrome Driver 如何安装 extensions 两种方式 ...

  5. Google Font字体本地化使用提高网站访问速度

    Google Web font在国内经常不稳定,速度在国内延迟也很高,而引发网页打开速度慢. 一.常见的字体格式介绍 不同的浏览器对字体格式支持是不一致的,常见的如下: 1.TureTpe(.ttf) ...

  6. unity自定义菜单面板开发

    using UnityEditor;using UnityEngine;using CreateTerrainDLL; public class CreateTerrainMenu : EditorW ...

  7. android 程序代码执行adb

    Runtime.getRuntime().exec("adb pull /dev/graphics/fb0 C:/fb1"); Runtime. getRuntime().exec ...

  8. Type.GetType(string)为空

    Type type = Type.GetType(scheduleJob.JobType); 时type为空, 导致执行下一步时 MethodInfo method = type.GetMethod( ...

  9. JavaScript笔记:函数

    函数是定义一次但却可以调用或执行任意多次的代码块. 一.函数定义 javascript中的函数使用function关键字来定义,常用的函数定义分为三种形式: 声明式函数定义 function sum( ...

  10. 二模12day1解题报告

    T1.笨笨与电影票(ticket) 有n个1和m个0,求每个数前1的个数都大于等于0的个数的排列数. 非常坑的一道题,推导过程很烦.首先求出所有排列数是 C(n+m,m),然后算不合法的个数. 假设存 ...