1、过滤器的扩展logging.properties:配置扩展的信息,作业,增加一直UDP方式的Log输出增加一种新的消息格式化,问题1:请回答该设计之中使用了那些设计模式?,你认为使用了那些设计模式?指出地方?,问题2:请认为该设计那些地方还存在坏症状和如何改进?,请你上台PK?,管道和过滤器,管道和过滤器(Pipes and Filters)体系结构模式为处理数据流的系统提供了一种结构。每个处理步骤封装在一个过滤器组件中。数据通过相邻过滤器之间的管道传输。重组过滤器可以建立不同的系统功能。,非软件应用,Pipe/Filter Pattern,Pattern Name:Pipe/Filter,C
2、omponent:Filter-Data Handling Connector:Pipe-Data Translation and Transportation,Framework 框架的实践,Log,LogManager,logging.properties,Handler,Formatter,Filter,Handler,Formatter,Filter,Handler,Formatter,XXFilter,XXHandler,Observer模式 or 责任链?,问题3:通过该案例的重构,对比最初的设计,你学习到那些?,通过该案例的重构学习,你学习到了那些东西,有哪些收获或者感想?,参考
3、技术,参考其他著名框架,Log4JJava Log API,Java Logging,Handler,ConsoleHandler:输出日志到控制台中FileHandler:输出日志到指定文件中MemoryHandler:输出日志到内存缓冲区中,当一定的条件满足的时候(如某种关键字的日志信息)再将缓冲区中的日志输出SocketHandler:输出日志到网络 socket 中StreamHandler:输出日志到输入输出流对象中,Formatter,日志可以被格式化为一定格式的文本,也可以成为 XML 或者 HTML 这样标准的格式。这取决于 Formatter 类的具体实现 SimpleFor
4、matterXMLFormatter,java.util.logging.Level,JDK 日志框架默认提供了 SEVERE,WARNING,INFO,CONFIG,FINE,FINER,FINEST 这几种日志级别。如果我们需要定义更多的日志级别,只需要继承 java.util.logging.Level 类,然后将自定义的级别作为静态成员变量声明即可。,症状,Level创建对象的过程不易扩展,重构之道,Move Creation Knowledge to Factory Replace Type Code with Class(Pipes and Filters)管道和过滤器推迟实现-使用配置文件形成Framework,可以后期灵活的扩展,