一个例子理解装饰器模式
来源:互联网 发布:淘宝旺铺专业版价格 编辑:程序博客网 时间:2024/05/21 09:03
什么是装饰器模式?
有些时候,我们希望为一个类添加一些功能,同时又不希望改变这个类原来的结构。
例如:我已经完成了一个日志的接口和它的各个实现类,但是这些类只有输出日志到不同地方的功能,LoggerFileSystem能将日志输出到文件系统(磁盘)中,LoggerCloud能将日志输出到云端的某个文件中。现在新需求来了,我想要在每条日志输出后顺带输出这条日志的时间,又不想去修改每个实现类的方法,这时候就能使用装饰者模式,为这个接口编写一个装饰类,修饰原来的日志输出。(这只是一个简单的例子,正常的日志输出一般都带有时间)
类图
具体实现
- Logger接口,定义写日志接口方法log()
/** * @author zdxie * @Date 上午 8:18 2017/9/23 0023 * @Description */public interface Logger { public void log(String message);}
- 实现两个Logger实现类:LoggerFileSystem、LoggerCloud
/** * @author zdxie * @Date 上午 8:19 2017/9/23 0023 * @Description */public class LoggerFileSystem implements Logger{ public void log(String message) { System.out.println("Log into FileSystem:" + message); }}
/** * @author zdxie * @Date 上午 8:32 2017/9/23 0023 * @Description */public class LoggerCloud implements Logger{ public void log(String message) { System.out.println("Log into CloudSystem:" + message); }}
- 为Logger编写一个装饰器,在输入日之后输出当前时间,这个装饰类要实现Logger接口并且拥有一个Logger成员变量。
import java.util.Calendar;/** * @author zdxie * @Date 上午 8:38 2017/9/23 0023 * @Description */public class TimeLoggerDecorator implements Logger { private Logger decoratorLogger; public TimeLoggerDecorator(Logger decoratorLogger) { this.decoratorLogger = decoratorLogger; } public void log(String message){ decoratorLogger.log(message); logTime(); } public void logTime(){ System.out.println(Calendar.getInstance().getTime()); }}
测试输出
/** * @author zdxie * @Date 上午 8:40 2017/9/23 0023 * @Description */public class LoggerTest { public static void main(String[] args){ Logger logger1 = new TimeLoggerDecorator(new LoggerFileSystem()); logger1.log("登录系统..."); Logger logger2 = new TimeLoggerDecorator(new LoggerCloud()); logger1.log("登录系统..."); }}
结果:
Log into FileSystem:登录系统...Sat Sep 23 09:31:39 GMT+08:00 2017Log into FileSystem:登录系统...Sat Sep 23 09:31:39 GMT+08:00 2017
阅读全文
0 0
- 一个例子理解装饰器模式
- 一个理解装饰器很好的例子
- 简单例子理解装饰器
- 关于装饰模式的一个小例子
- 理解装饰模式(decorator pattern)两个小例子
- 理解设计模式之装饰器模式
- 装饰模式例子
- 装饰者模式例子
- 装饰者模式例子
- 装饰模式简单例子
- 记下一个python装饰器的例子
- 关于过滤器的一个例子(涉及到装饰模式)
- 基于人吃饭的例子设计一个装饰设计模式:
- java装饰者模式的一个形象例子
- 用装饰模式优化代码的一个简单例子
- 用装饰模式优化代码的一个简单例子
- 用装饰模式优化代码的一个简单例子
- 用装饰模式优化代码的一个简单例子
- Java二维码生成和解析
- Swift中autoclosure和noescape关键字
- 媒体查询
- 非监督特征学习与深度学习(三)----向量化
- Volley和XUtils区别
- 一个例子理解装饰器模式
- nginx(二)负载均衡设置
- SSH -- 建立本地GIT仓库和Github的连接
- Mysql学习之路03-列属性
- 前端编辑器-webstrom使用交谈
- 数据库恢复挂起
- 关掉Windows10的计划自动重启行之有效的方法
- 非监督特征学习与深度学习(四)----调试:梯度检查
- 转载:快排时间复杂度分析