码迷,mamicode.com
首页 > 其他好文 > 详细

TypeScript Visitor设计模式

时间:2015-04-30 00:53:48      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:

以下翻译脑袋的VBF项目,试试看TypeScript能否重写。

class RegExpr {     Accept<T>(convert: Converter<T>) {     } } class SymbolExpr extends RegExpr {     Symbol: string     constructor(symbol: string) {         this.Symbol = symbol;         super();     }     Accept<T>(convert: Converter<T>) {         return convert.AcceptSymbolExpr(this);     } } class KleeneStarExpr extends RegExpr {     InnerExpression: RegExpr     Accept<T>(convert: Converter<T>) {         return convert.AcceptKleeneStarExpr(this);     } } class AlternationExpr extends RegExpr {     Expr1: RegExpr     Expr2: RegExpr     Accept<T>(convert: Converter<T>) {         return convert.AcceptAlternationExpr(this);     } } class ConcatenationExpr extends RegExpr {     Left: RegExpr     Right: RegExpr     Accept<T>(convert: Converter<T>) {         return convert.AcceptConcatenationExpr(this);     } } class EmptyExpr extends RegExpr {     Accept<T>(convert: Converter<T>) {         return convert.AcceptEmpty(this);     } } interface Converter<T> {     AcceptEmpty(expr: RegExpr): T;     AcceptSymbolExpr(expr: SymbolExpr): T;     AcceptKleeneStarExpr(expr: KleeneStarExpr): T;     AcceptAlternationExpr(expr: AlternationExpr): T;     AcceptConcatenationExpr(expr: ConcatenationExpr): T; } class RegularExprPrettyPrint implements Converter<String> {     AcceptEmpty(expr: EmptyExpr) {         return "ε";     }     AcceptSymbolExpr(expr: SymbolExpr) {         return expr.Symbol;     }     AcceptKleeneStarExpr(expr: KleeneStarExpr) {         return "(" + expr.InnerExpression.Accept(this) + ")*";     }     AcceptAlternationExpr(expr: AlternationExpr) {         return "(" + expr.Expr1.Accept(this) + "|" + expr.Expr2.Accept(this) + ")";     }     AcceptConcatenationExpr(expr: ConcatenationExpr) {         return "(" + expr.Left.Accept(this) + expr.Right.Accept(this) + ")";     } } window.onload = () => {     var s = new SymbolExpr("A");     var kstart = new KleeneStarExpr();     kstart.InnerExpression = s;     var formatter = new RegularExprPrettyPrint();     var str = kstart.Accept(formatter)     alert(str); };

TypeScript Visitor设计模式

标签:

原文地址:http://www.cnblogs.com/jiangzhen/p/4467851.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!