首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用装饰者模式记录数据库操作

使用装饰者模式记录数据库操作
EN

Stack Overflow用户
提问于 2015-01-28 13:30:35
回答 1查看 376关注 0票数 1

对于我所在班级的一个实验室,我的任务是使用装饰器模式将日志记录功能添加到数据库中。我目前遇到的问题是试图为每个调用的方法创建一个不同的日志。例如,有一个方法将连接数据库中的两个表,我希望日志显示为"Join Table1和Table2“,并且能够使用来自不同记录器的时间戳之类的东西进行包装。我想知道我应该如何编写具体的装饰器,以便数据库使用的每个方法都不会有单独的日志记录方法。

这就是我现在为通用日志记录器准备的。

代码语言:javascript
复制
public abstract class Logger extends DB implements DataBase {
DataBase db;
ArrayList<String> log = new ArrayList<String>();
public Logger(DataBase db){
    this.db = db;
}
public DBTable getTable(String name){
    logAction("Get Table ");
    return db.getTable(name);
}
public void createTable(String name, int columns){
    logAction("Create Table "+name+" ");
    db.createTable(name, columns);
}
public void insert(String tableName, String[] row){
    logAction("Insert "+tableName+" ");
    db.insert(tableName, row);
}
public DBTable select(String tabName, int col, String selector){
    logAction("Select "+tabName+" ");
    return db.select(tabName, col, selector);
}
public DBTable join(String tab1Name, String tab2Name, int tab1Col, int tab2Col){
    logAction("Join "+tab1Name+" and "+tab2Name+" ");
    return db.join(tab1Name, tab2Name, tab1Col, tab2Col);
}
public void logAction(String logInfo){
    log.add(logInfo);
}

}

DB是实际的数据库,而database是由一切实现的接口。

EN

回答 1

Stack Overflow用户

发布于 2015-01-28 13:39:34

您的目标是为每个日志条目以及默认数据提供一条特定的消息。由于每条消息都可以表示为一系列可打印字符,因此我们可以将其作为log()函数的参数,如下所示:

代码语言:javascript
复制
public void log(String msg) {
    String timestamp = getTimestamp(); //Or however you get the time
    String logThis = timestamp + " " + msg + "\n";
    //Log logThis...
}

这样,您可以只调用带有特定消息的日志(例如“连接表1和表2"),并且每次都会添加缺省参数。如果您熟悉反射,这也是一个很好的机会来练习编写可以自动为您执行日志记录的Annotations

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28185284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档