形如:[a,b,c] [a,[b,cd],f] 为 嵌套列表 其ANTLR文法表示: list :'[' elements ']'; // 匹配方括号 elements : elements (',' element)*; // 匹配list的逗号 element : NAME | list; // element是NAME或者嵌套的list NAME : ('a'..'z' | 'A'..'Z')+; // NAME含有至少一个字母 具体实现: public class Token { pub…
装饰者模式:动态地将责任附件到对象上.若要扩展功能,装饰者提东了比继承更有弹性的替代方案. 装饰者和被装饰对象有相同的超类型 你可以用一个或者多个装饰者包装一个对象. 既然装饰者和被装饰对象有相同的超类型,所以在任何需要原始对象(被包装的)的场合,可以用装饰过的对象代替它. 装饰者可以在所委托被装饰者的行为前与/或之后,加上自己的行为,已达到特定的目的. 对象可以在任何时候被装饰,所以可以在运行时动态地.不限量地用你喜欢的装饰者来装饰对象 设计原则:类应该对扩展开放,对修改关闭(开放-关闭原则)…
1. 中介者模式 中介者模式的作用就是用来解除对象与对象之间的紧耦合关系,增加中介者后,所有相关对象都通过中介者来通信,而不再相互引用 1.1中介者模式的例子 以泡泡堂游戏为例,先定义一个玩家构造函数,它有三个原型方法 Player.prototype.win,Player.prototype.lose,Player.prototype.die 当只有两个玩家时,一个玩家死亡时游戏结束,同时通知他的对手胜利 function Player(name){ this.name=name; this.…
1. 享元模式 享元模式是一种用于性能优化的模式,享元模式的核心是运用共享技术来有效支持大量细粒度的对象 1.1 传统的文件上传方法 以文件上传为例,文件上传功能可以选择依照队列,一个一个的排队上传,也支持同时选择2000个文件.假如每一个文件都对应着一个JavaScript上传对象的创建,2000个文件就会同时创建2000个upload对象假设这里的文件上传支持插件和flash两种 var id=0; window.startUpload=function(uploadType,files){…
ARM处理器共有7种运行模式,如下表: 处理器模式 描述 用户模式(User, usr) 正常程序执行的模式 快速中断模式(FIQ, fiq) 用于高速数据传输和通道处理 外部中断模式(IRQ, irq) 用于通常的中断处理 特权模式(Supervisor, sve) 供操作系统使用的一种保护模式 数据访问中止模式(Abort, abt) 用于虚拟存储及存储保护 未定义指令中止模式(Undefined, und) 用于支持用过软件仿真硬件的协处理器 系统模式(System, sys) 用于运行特…
目录 类图 代码 角色介绍 思想 类图 代码 //产品类,任意可"use"的产品都可继承该类 public abstract class Product { public abstract void use(); } //工厂类 //定义了创建一个产品的流程,具体的创建代码需要子类实现 public abstract class Factory { public final Product create(String owner) { Product p = createProduct…
目录 模板方法模式 类图 思想: 模板方法模式 在父类中定义流程,在子类中实现具体的方法. 类图 代码 //抽象类 public abstract class AbstractDisplay { public abstract void open(); public abstract void print(); public abstract void close(); public final void display() { open(); for (int i = 0; i < 5; i+…
一个可复用的解决方案,用于处理特定场景下的常见问题.一种设计模式并不是一个可以直接转化为代码的已完工设计.它是对于如何解决问题的一种描述或者模板,可以用在许多不同的场合. 参考资料:<iOS Web应用开发>…
1. Pull解析器的运行方式与 SAX 解析器相似.它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件.跟SAX不同的是, Pull解析器产生的事件是一个数字,而非方法,因此可以使用一个switch对感兴趣的事件进行处理.当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型节点的值. 解析如下xml文件: <?xml version="1.0" encoding="UTF-8…
1. Pull解析器的运行方式与 SAX 解析器相似.它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件.跟SAX不同的是, Pull解析器产生的事件是一个数字,而非方法,因此可以使用一个switch对感兴趣的事件进行处理.当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型节点的值. 解析如下xml文件: <?xml version="1.0" encoding="UTF-8…