利用Lambda表达式简化命令者模式
来源:互联网 发布:中国民生网络电视台 编辑:程序博客网 时间:2024/05/16 00:45
从《Java 8函数式编程》看到的一个例子。
命令者模式中分为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(); }}
1 0
- 利用Lambda表达式简化命令者模式
- C#利用Lambda表达式树简化函数调用
- Android 使用Java8新特性之Lambda expression (附命令者模式简化)
- 用Java 8 Lambda表达式实现设计模式:命令模式
- lambda表达式和利用lambda排序
- 无缝缓存读取简化:仅Lambda表达式传递委托
- 无缝缓存读取简化:仅Lambda表达式传递委托
- 使用Lambda表达式来简化我们的代码
- JDK8对List的简化操作-Lambda表达式
- shell中利用自定义命令简化操作
- 桥接模式和嵌套lambda表达式
- Java责任链设计模式-Lambda表达式
- c# lambda简化委托
- 用lambda简化代码
- 用C++ Variadic Template 和 lambda表达式简化判断函数返回值的语句
- [Java 8 & Spring JDBC] 使用Spring JDBC和Lambda表达式简化DAO
- JDK8新特性:使用Method References实现方法复用,简化lambda表达式
- Lambda Expressions(Lambda表达式)
- 使用Ant工具编译Tomcat源代码(window环境下)
- IO复用:select函数
- Android性能优化方案
- 天梯赛初赛 进阶题 题解
- linux基本命令(59)——rcp命令
- 利用Lambda表达式简化命令者模式
- 资质android声音检测仪---分贝仪 (附有源码)
- checkbox的三种显示状态
- Oracle优化器
- 【leetcode】287. Find the Duplicate Number
- 招聘行业的经验
- HADOOP -hdfs of wordcount
- HTML5屏幕适配标签设置
- opencv bug