zoukankan      html  css  js  c++  java
  • 命令模式

    定义:通过将一系列的操作封装成一个命令对象,方便执行,同时也能够更好的让我们进行一些操作回滚,用来记录是否执行过该操作等问题。
    场景: 
    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<Order> orderList = new ArrayList<Order>();
    
       public void takeOrder(Order order)
      {
          orderList.add(order);
       }
    
       public void placeOrders()
      {
          for (Order order : orderList) 
         {
             order.execute();
          }
          orderList.clear();
       }
    }
    一直想把之前工作、学习时记录的文档整理到博客上,一方面温故而知新,一方面和大家一起学习 -程序小白
  • 相关阅读:
    【转载】Java系列笔记(3)
    CentOS 7下Samba服务器的安装与配置
    Linux常用目录结构
    Linux计划任务crontab
    转:Linux 双网卡配置两个IP同时只有一个会通的原因
    centos7中搭建ntp服务器
    centos7中使用vg方式扩充root分区
    ping命令脚本实现显示网络状态、学生姓名、学号
    centos中基于随机数,再加入班级学生姓名
    centos7 shell脚本实现随机数
  • 原文地址:https://www.cnblogs.com/wang-jin-fu/p/8320931.html
Copyright © 2011-2022 走看看