利用Lambda表达式简化命令者模式
2016-06-06 12:33
447 查看
从《Java 8函数式编程》看到的一个例子。
命令者模式中分为4个角色:
命令接受者:负责执行实际任务
命令者:封装了所有命令执行者的信息
发起者:控制一个或多个命令的顺序和执行
客户端:创建具体命令执行
例:文本编辑器
- Editor: 命令接受者
- Action: 命令者
- Macro(宏): 发起者
- Client: 客户端
命令者模式中分为4个角色:
命令接受者:负责执行实际任务
命令者:封装了所有命令执行者的信息
发起者:控制一个或多个命令的顺序和执行
客户端:创建具体命令执行
例:文本编辑器
- Editor: 命令接受者
- Action: 命令者
- Macro(宏): 发起者
- Client: 客户端
public interface Editor {//文件编辑器接口 public void save(); public void open(); public void close(); }
public class EditorImpl implements Editor { //具体文件编辑器 @Override public void save() { System.out.println("save"); } @Override public void open() { System.out.println("open"); } @Override public void close() { System.out.println("close"); } }
public interface Action {//所有的操作均实现Action接口 public void perform(); }
public class Open implements Action{//具体的命令类,代理save操作 private final Editor editor; public Open(Editor editor) { this.editor = editor; } @Override public void perform() { editor.open(); } }
public class Open implements Action{//具体的命令类,代理open操作 private final Editor editor; public Open(Editor editor) { this.editor = editor; } @Override public void perform() { editor.open(); } }
public class Close implements Action{//具体的命令类,代理close操作 private final Editor editor; public Close(Editor editor) { this.editor = editor; } @Override public void perform() { editor.close(); } }
public class Client { //运行宏的客户端 public static void main(String[] args) { new Client().run1(); } public void run1() { //最原始的方法 EditorImpl editor = new EditorImpl();//通常可以通过Spring框架注入 Macro macro = new Macro(); macro.record(new Open(editor)); macro.record(new Save(editor)); macro.record(new Close(editor)); macro.run(); } public void run2() { //最原始的方法 EditorImpl editor = new EditorImpl();//通常可以通过Spring框架注入 Macro macro = new Macro(); macro.record(() -> editor.open());//用Lamblda表达式替换原来的代理类Open macro.record(() -> editor.save());//用Lamblda表达式替换原来的代理类Save macro.record(() -> editor.close());//用Lamblda表达式替换原来的代理类Cloese macro.run(); } public void run3() { //更加简洁 EditorImpl editor = new EditorImpl();//通常可以通过Spring框架注入 Macro macro = new Macro(); macro.record(editor::open); macro.record(editor::save); macro.record(editor::close); macro.run(); } }
相关文章推荐
- Ubuntu15.10下Solr 6.0的搭建与IKAnalyzer中文分词结合使用
- linux基本命令(58)——telnet命令
- 使用Ant工具编译Tomcat源代码(window环境下)
- iOS开发多线程篇—多线程简单介绍
- 两点间的距离
- Servlet 过滤器 Filter
- markdown新手指南(语法简介)
- 使用calibrate包测试oracle吞吐和iops
- iOS RTMP 视频直播开发笔记(1)----- 采集摄像头图像
- 理解各种数据类型和简单类在内存中的存在形式。
- oracle模糊查询语句使用示例
- Flask之旅《Flask Web开发:基于Python的Web应用开发实战》学习笔记
- ios开发笔记之十一 --viewDidload的方法的基本介绍用代码设置按钮的属性
- GNU C 、ANSI C、标准C、标准c++的区别和联系
- 使用xmind编写测试用例
- Effective Objective-C 2.0 读书笔记
- EventBus 3.0 (一) 基础
- iOS中 UICollectionView图片浏览(高性能轮播器)
- JavaScrip中cookie的基本使用
- Joseph环问题