CommonTemplate完成外部构建树或表达式接口

CommonTemplate: [url]http://www.commontemplate.org[/url]
问题来源:
[url]http://javatar.iteye.com/blog/187669[/url]
解决方案:
在core包增加接口, 使外部构建树或表达式简化.
外部构建树或表达式通常分两种:
自顶向下: 也就是先创建父节点, 再压入子节点(通过栈的方式, 压入完所有子节点后弹出父节点).
自底向上: 也就是先创建子节点, 再创建父节点(在创建时将子节点传入).
基于这些, 提供了以下接口, 这些接口通过TemplateEngine和ExpressionEngine调用.

package org.commontemplate.core;

/**
* 模板构建器, 为外部引擎或存储方式提供模板构建接口, 适合于自顶向下的构建方式.
* (非线程安全)
*
* @author liangfei0201@163.com
*
*/
public interface TemplateBudiler {

/**
* 获取构建结果模板
*
* @return 模板
*/
public Template getTemplate();

/**
* 开始模板
*
* @param templateName 模板名称
*/
public void beginTemplate(String templateName);

/**
* 结束模板
*/
public void endTemplate();

/**
* 开始块指令
*
* @param directiveName 指令名
* @param expression 指令表达式
*/
public void beginBlockDirective(String directiveName, Expression expression);

/**
* 结束块指令
*/
public void endBlockDirective();

/**
* 添加指令
*
* @param directiveName 指令名
* @param expression 指令表达式
*/
public void addDirective(String directiveName, Expression expression);

/**
* 添加文本
*
* @param text 文本内容
*/
public void addText(String text);

/**
* 添加注释内容
*
* @param comment 注释内容
*/
public void addComment(String comment);

}


package org.commontemplate.core;

import java.util.List;

/**
* 模板元素工厂, 为外部引擎或存储方式提供模板组装元素, 适合于自底向上的构建方式.
*
* @author liangfei0201@163.com
*
*/
public interface ElementFactory {

/**
* 创建注释
*
* @param comment 注释内容
* @return 注释
*/
public Comment createComment(String comment);

/**
* 创建文本
*
* @param text 文本内容
* @return 文本
*/
public Text createText(String text);

/**
* 创建行指令
*
* @param name 指令名
* @param expression 指令表达式
* @return 行指令
*/
public Directive createDirective(String name, Expression expression);

/**
* 创建块指令
*
* @param name 指令名
* @param expression 指令表达式
* @param elements 块指令内部元素
* @return 块指令
*/
public BlockDirective createBlockDirective(String name, Expression expression, List elements);

}


package org.commontemplate.core;

/**
* 表达式 构建器, 为外部引擎或存储方式提供自顶向下的构建方式.
* (非线程安全)
*
* @author liangfei0201@163.com
*
*/
public interface ExpressionBuilder {

/**
* 获取表达式结果
*
* @return 表达式
*/
public Expression getExpression();

/**
* 添加一元操作符, 将把紧随其后添加表达式(包括操作符,变量,常量)作为参数.
*
* @param operatorName 操作符名
*/
public void addUnaryOperator(String operatorName);

/**
* 添加二元操作符, 将把紧随其后添加的两个表达式(包括操作符,变量,常量)作为参数.
*
* @param operatorName 操作符名
*/
public void addBinaryOperator(String operatorName);

/**
* 添加变量
*
* @param variableName 变量名
*/
public void addVariable(String variableName);

/**
* 添加常量
*
* @param value 常量值
*/
public void addConstant(Object value);

}


package org.commontemplate.core;

/**
* 表达式组件工厂, 为外部引擎或存储方式提供表达式组装元素, 适合于自底向上的构建方式.
*
* @author liangfei0201@163.com
*
*/
public interface ExpressionFactory {

/**
* 创建常量
*
* @param constantValue 常量值
* @return 常量表达式
*/
public Constant createConstant(Object constantValue);

/**
* 创建变量
*
* @param variableName 变量名
* @return 变量表达式
*/
public Variable createVariable(String variableName);

/**
* 创建一元操作符
*
* @param operatorName 操作符名
* @param operand 操作数
* @return 一元操作符表达式
*/
public UnaryOperator createUnaryOperator(String operatorName, Expression operand);

/**
* 创建二元操作符
*
* @param operatorName 操作符名
* @param leftOperand 左操作数
* @param rightOperand 右操作数
* @return 二元操作符表达式
*/
public BinaryOperator createBinaryOperator(String operatorName, Expression leftOperand, Expression rightOperand);

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值