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

    描述

    将请求以命令的格式包裹到对象中,并传给调用对象,调用对象寻找可以处理该命令的合适对象,由该合适对象执行。

    实例

    菜鸟教程上的一个很简单的例子:

    假设有个股票类(Stock),对他存在两种操作:买(buystock)和抛(sellstock),先在股票类中定义两个方法:买方法和抛方法,然后定义一个order接口,定义一个默认方法,新建两个类(买和抛)实现这个接口,在这两个类中创建私有的股票对象,默认方法中分别实现股票类的买方法和抛方法。现在我们创建一个中间人,这个中间人有一个order的列表,我们就可以给中间人提供一个添加对股票操作命令的函数,添加到orker列表中。

    代码如下:

    //创建一个命令接口
    public interface Order {
       void execute();
    }
    
    //创建一个股票类
    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");
       }
    }
    
    //创建实现两个order的接口的实体类
    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();
       }
    }
    
    //创建中间人类
    import java.util.ArrayList;
    import java.util.List;
    
       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();
       }
    }
    
    //主函数
    public class CommandPatternDemo {
       public static void main(String[] args) {
          Stock abcStock = new Stock();
    
          BuyStock buyStockOrder = new BuyStock(abcStock);
          SellStock sellStockOrder = new SellStock(abcStock);
    
          Broker broker = new Broker();
          broker.takeOrder(buyStockOrder);
          broker.takeOrder(sellStockOrder);
    
          broker.placeOrders();
       }
    }
    

    输出:

    Stock [ Name: ABC, Quantity: 10 ] bought
    Stock [ Name: ABC, Quantity: 10 ] sold
    

      

    代码来源: 特别感谢 菜鸟教程java之命令模式

  • 相关阅读:
    堆和栈的区别
    九度OJ 1108 堆栈的使用
    九度OJ 1201 二叉排序树
    jQuery笔记——基础知识
    JavaScript笔记——事件
    一些知识
    JavaScript笔记——BOM的操作和浏览器的检测
    JavaScript笔记——面向对象与原型
    JavaScript笔记——基础知识(二)
    JavaScript笔记——正则表达式
  • 原文地址:https://www.cnblogs.com/K-artorias/p/7919676.html
Copyright © 2011-2022 走看看