日志记录器(设计模式--工厂方法模式)_loggerfactory 设计模式-程序员宅基地

    当然了,知道工厂方式大家都是很熟悉的方法了。所以我们直接上样例吧。

    题目描述:某系统日志记录器要求支持多种日志记录方式,如文件日志记录(FileLog)、数据库日志记录(DatabaseLog)等,且用户可以根据要求动态选择日志记录方式。参考--传送门

    实现截图:

                                 

    UML图:

                           

 

    实际上提取出每一个java文件。保存在同一个包下。最后运行test程序即可。其中Logger接口充当抽象产品,其子类FileLogger和DatabaseLogger充当具体产品,LoggerFactory接口充当抽象工厂,其子类FileLoggerFactory和DatabaseLoggerFactory充当具体工厂。其中可以根据需要自行进行拆分。我们这里的话合并到一个java文件里面。

    Logger.java:

    LoggerFactory.java:

    FileLogger.java:

    FileLoggerFactory.java:

    DatabaseLogger.java:

    DatabaseLoggerFactory.java:

    shejian1_Factorymode.java:

package logmatch_Factory_1;
//日志记录器接口:抽象产品
interface Logger {
    public void writeLog();
}

//数据库日志记录器:具体产品
class DatabaseLogger implements Logger {
    public void writeLog() {
        System.out.println("已选择数据库日志记录。");
    }
}

//文件日志记录器:具体产品
class FileLogger implements Logger {
    public void writeLog() {
        System.out.println("已选择文件日志记录。");
    }
}

//日志记录器工厂接口:抽象工厂
interface LoggerFactory {
    public Logger createLogger();
}

//数据库日志记录器工厂类:具体工厂
class DatabaseLoggerFactory implements LoggerFactory {
    public Logger createLogger() {
        //连接数据库,代码省略
        //创建数据库日志记录器对象
        Logger logger = new DatabaseLogger();
        //初始化数据库日志记录器,代码省略
        return logger;
    }
}

//文件日志记录器工厂类:具体工厂
class FileLoggerFactory implements LoggerFactory {
    public Logger createLogger() {
        //创建文件日志记录器对象
        Logger logger = new FileLogger();
        //创建文件,代码省略
        return logger;
    }
}
public class shijian1_Factorymode {
    public static void main(String args[]) {
        LoggerFactory factory;
        Logger logger1;
        factory = new FileLoggerFactory(); //可引入配置文件实现
        logger1 = factory.createLogger();
        logger1.writeLog();
        Logger logger2;
        factory = new DatabaseLoggerFactory(); //可引入配置文件实现
        logger2 = factory.createLogger();
        logger2.writeLog();
    }
}

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41024297/article/details/103274134

智能推荐

数据结构名词解释以及简答-程序员宅基地

文章浏览阅读1.9w次,点赞89次,收藏524次。名词解释: 数据结构:是相互之间存在一种或多种特定关系的数据元素的集合,是计算机存储和数据组织的方式,它分为三个方面,即数据的逻辑结构,数据的物理结构,数据的操作。 数据项:是数据不可分割的最小单位,用它可以识别一个或一个组数据,一个数据元素可由若干数据项组成。 数据对象:是性质相同的数据元素的集合,是数据的一个子集。 数据:是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中被计算机程序处理的符号的总称,是计算机化的信息。 数据类型:是一个值的集合以及定义在这个值集上的一组操_数据结构名词解释

Dialog 大小设置,背景透明-程序员宅基地

文章浏览阅读127次。设置dialog 大小 DisplayMetrics dm = new DisplayMetrics();getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);dialog.getWindow().set..._dialog displaymetrics

Redis3.0 Cluster Redis集群搭建_redis3.0cluster部署-程序员宅基地

文章浏览阅读4.5k次。一、介绍Redis 集群是一个提供在多个Redis间节点间共享数据的程序集.redis3.0以前,只支持主从同步的,如果主的挂了,写入就成问题了。而官方的Redis Cluster出来后就可以很好帮我们解决这个问题;可以做到节点的自动发现、集群容错slave->master、人为操纵分片(slots)等等Redis Cluster 架构架构细节:_redis3.0cluster部署

通用的预训练模型:All NLP Tasks Are Generation Tasks: A General Pre-training Framework_all nlp tasks are generation tasks: a general pret-程序员宅基地

文章浏览阅读1.6k次,点赞2次,收藏7次。最近在arxiv上又看到了一篇论文,出自清华大学。题目为:All NLP Tasks Are Generation Tasks: A General Pretraining Framework。0.摘要NLP任务分为分类或者说是阅读理解任务(NLU)、无条件生成任务、有条件生成任务;预训练模型分为自编码、自回归、编码解码。三种训练模型分别在前面三种任务中表现良好。本文中提出一个通用的预训练模型,在三种任务中都能做到良好表现。 ..._all nlp tasks are generation tasks: a general pretraining framework

textview constrain count-程序员宅基地

文章浏览阅读199次。TextView里限制输入字数的方法2011-05-12 10:50 8353人阅读 评论(0) 收藏 举报联想 一开始采用的方法是函数textView:shouldChangeTextInRange:replacementText:来进行判断:[c-sharp] view plaincopy //键入Done时,插入换行符,然后执行addBookmark - (BOO

MarkdownPad2无法预览Markdown文档问题的解决_还原 markdown 预览时出现意外错误。-程序员宅基地

文章浏览阅读1.2k次。问题描述  安装MarkdownPad2后打开一个markdown文档,在预览markdown文档出现下面错误:问题分析  官方的文档给出如下说法:This issue has been specifically observed in Windows 8. You may see an error message as shown here, and no HTML will be rendered when you type in the Markdown Editor pane.To fix _还原 markdown 预览时出现意外错误。

随便推点

优秀的博客和网页_聂飞平博客-程序员宅基地

文章浏览阅读530次。搜集了很多人脸识别领域的大牛和研究组 http://cvchina.net/post/96.html_聂飞平博客

PyQt5常用控件之QPainter类、QPen类、QBrush类_qpainter qbrush-程序员宅基地

文章浏览阅读909次。QPainter类Qpainter,QPen,QBrush这三个类实现绘图功能,Qpainter类在QWidget(控件)上执性绘图操作,它是一个绘制工具,为大部分图形化界面提供了高度优化的函数,使QPainter类可以绘制从简单的直线到复杂的饼图等。绘制操作在QWidget.paintEvent()中完成,绘制方法必须放在QtGui.QPainter对象的begin()和end()之间。QPainter类在控件或其他绘图设备上执行较低级别的图像绘制功能。此外,QPixmap的作用是加载并呈现本地图._qpainter qbrush

论为啥我的lightgbm一直报错_lightgbmerror: multiclass objective and metrics do-程序员宅基地

文章浏览阅读7.4k次。就是这个原因,删掉之前角lightgbm的文件就行。_lightgbmerror: multiclass objective and metrics don't match

Oracle学习资料整理二-程序员宅基地

文章浏览阅读94次。查询数据: 单表查询:select col1,col2 from tableName; 多表查询,可采用直联、外联等方式进行查询: 直联查询: 只有在table1和table2中都存在,才能查询...

Application Developer-程序员宅基地

文章浏览阅读91次。Title: Application Developer Location: Shenzhen,China..._application developer是干什么的

hdoj进制转换-程序员宅基地

文章浏览阅读712次。进制转换 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)Total Submission(s) : 14 Accepted Submission(s) : 12Font: Times New Roman | Verdana | Georgia Font Size:_hdoj进制转换