博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
命令模式
阅读量:4306 次
发布时间:2019-06-06

本文共 1570 字,大约阅读时间需要 5 分钟。

定义:通过将一系列的操作封装成一个命令对象,方便执行,同时也能够更好的让我们进行一些操作回滚,用来记录是否执行过该操作等问题。

场景: 
1、当一个应用程序调用者与多个目标对象之间存在调用关系时,并且目标对象之间的操作很类似的时候。
2、例如当一个目标对象内部的方法调用太复杂,或者内部的方法需要协作才能完成对象的某个特点操作时。
3、有时候调用者调用目标对象后,需要回调一些方法。
角色:
1.Invoke:调用者对象。
Receiver:接收调用者请求执行操作的目标对象。
ICommand:用于解耦目标对象与调用者之间的抽象命令对象。

使用:首先创建作为命令的接口 Order,然后创建作为请求的 Stock 类(命令对象)。实体命令类(对应一些列操作) BuyStock 和 SellStock,实现了 Order 接口,将执行实际的命令处理。创建作为调用对象的类 Broker,它接受订单并能下订单。

1.创建一个命令接口及命令接口的实体类。

public interface Order {   void execute();}public class BuyStock implements Order {   private Stock abcStock;   public BuyStock(Stock abcStock){      this.abcStock = abcStock;   }   public void execute() {      abcStock.buy();   }}public class SellStock implements Order {   private Stock abcStock;   public SellStock(Stock abcStock){      this.abcStock = abcStock;   }   public void execute() {      abcStock.sell();   }}
View Code

2.创建一个请求类。

public class Stock {   private String name = "ABC";   private int quantity = 10;   public void buy()  {      System.out.println("Stock [ Name: "+name+",          Quantity: " + quantity +" ] bought");   }   public void sell()   {      System.out.println("Stock [ Name: "+name+",          Quantity: " + quantity +" ] sold");   }}

3.创建命令调用类

public class Broker {   private List
orderList = new ArrayList
(); public void takeOrder(Order order) { orderList.add(order); } public void placeOrders() { for (Order order : orderList) { order.execute(); } orderList.clear(); }}

 

转载于:https://www.cnblogs.com/wang-jin-fu/p/8320931.html

你可能感兴趣的文章
vue+springboot打包发布
查看>>
XSL 开发总结
查看>>
beta阶段第六次scrum meeting
查看>>
SpringBoot+MybatisPlus实现批量添加的两种方式
查看>>
vue 设计结构
查看>>
Sqlerver2005+按照ID分组取前几条
查看>>
Python的编码和解码
查看>>
docker
查看>>
停车场系统安全岛设计施工要求
查看>>
Docker实战
查看>>
asp.net core结合Gitlab-CI实现自动化部署
查看>>
RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.7 版本发布
查看>>
EasyNVR H5无插件摄像机直播解决方案前端解析之:关于直播页面和视频列表页面切换的问题...
查看>>
django搭建一个小型的服务器运维网站-拿来即用的bootstrap模板
查看>>
redis事务
查看>>
Java_基础语法之dowhile语句
查看>>
HDU 2175 汉诺塔IX
查看>>
PAT 甲级 1021 Deepest Root
查看>>
查找代码错误.java
查看>>
vc获取特殊路径(SpecialFolder)
查看>>