意图:将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。

主要解决:在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。

何时使用:在某些场合,比如要对行为进行"记录、撤销/重做、事务"等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将"行为请求者"与"行为实现者"解耦?将一组行为抽象为对象,可以实现二者之间的松耦合

如何解决:通过调用者调用接受者执行命令,顺序:调用者→接受者→命令。

关键代码:定义三个角色:1、received 真正的命令执行对象 2、Command 3、invoker 使用命令对象的入口

命令接口

package DesignPattern.CommandPattern;
public interface Order {public void execute();
}

具体命令

package DesignPattern.CommandPattern;public class SellStock implements Order{private Stock abcStock;public SellStock(Stock abcStock) {this.abcStock = abcStock;}public void execute() {abcStock.sell();}}
package DesignPattern.CommandPattern;public class BuyStock implements Order{private Stock abcStock;public BuyStock(Stock abcStock){this.abcStock = abcStock;}public void execute() {abcStock.buy();}
}

使用命令对象的入口

package DesignPattern.CommandPattern;
import java.util.List;
import java.util.ArrayList;public class Broker {private List<Order> orderList = new ArrayList<>();public void takeOrder(Order order){orderList.add(order);}public void placeOrders(){for (Order order : orderList) {order.execute();}orderList.clear();}
}

命令执行者


package DesignPattern.CommandPattern;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 ");}
}

客户端测试程序

package DesignPattern.CommandPattern;public class Client {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();}
}

命令模式(command line)相关推荐

  1. 【白话设计模式八】命令模式(Command)

    为什么80%的码农都做不了架构师?>>>    #0 系列目录# 白话设计模式 工厂模式 单例模式 [白话设计模式一]简单工厂模式(Simple Factory) [白话设计模式二] ...

  2. 设计模式:命令模式(Command Pattern)

    命令模式(Command Pattern): 在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接受者是谁,也不知道请求的操作是哪个. 我们只需在程序运行时指定具体的请求接受者即可,此时 ...

  3. c++命令模式command

    c++命令模式command 概念 角色和职责 案例 概念 Command模式也叫命令模式 ,是行为设计模式的一种.Command模式通过被称为 Command的类封装了对目标对象的调用行为以及调用参 ...

  4. 设计模式 - 命令模式(command pattern) 撤销(undo) 具体解释

    命令模式(command pattern) 撤销(undo) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 參考命令模式: http://blog.cs ...

  5. 乐在其中设计模式(C#) - 命令模式(Command Pattern)

    原文:乐在其中设计模式(C#) - 命令模式(Command Pattern) [索引页] [源码下载] 乐在其中设计模式(C#) - 命令模式(Command Pattern) 作者:webabcd ...

  6. 设计模式之命令模式(Command)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  7. 设计模式系列3-----C++实现命令模式(Command Pattern)

    什么是命令模式? GoF的书的定义为:"Command pattern encapsulate request as an object, thereby letting you param ...

  8. Java设计模式-命令模式Command

    定义 将来自客户端的请求传入一个对象,从而使你可用不同的请求对客户进行参数化.用于"行为请求者"与"行为实现者"解耦,可实现二者之间的松耦合,以便适应变化.分离 ...

  9. C++设计模式--命令模式(Command)

    概述 命令模式的结构很简单,但是对于消除代码间的耦合却有着重要的影响.命令模式就是一个函数对象:一个作为对象的函数.通过将函数封装为对象,就能够以参数的形式将其传递给其他函数或者对象,告诉它们在旅行请 ...

  10. 趣谈设计模式 | 命令模式(Command):将命令封装为对象

    文章目录 案例:智能遥控 命令模式 应用场景 队列请求 日志系统 总结 完整代码与文档 命令模式的应用场景较少,且不易理解,因此我也不好举例,所以下面的描述可能会存在一些问题,请见谅 案例:智能遥控 ...

最新文章

  1. 提交调用验证_干货丨RPA验证码识别技巧
  2. Android显示系统之View与SurfaceView更新屏幕的区别
  3. Java 程序员必备的 Intellij IDEA 插件
  4. 这届不敢看体检报告的年轻人还能“年轻”多久?
  5. C# 学生成绩管理系统 完整版
  6. 怎么样做好日志类的报警监控
  7. mybatis insert 忽略 联合唯一索引_MySQL实战中,Insert语句的使用心得总结
  8. 使用BAT批处理执行sql
  9. ubuntu安装python编译器_Ubuntu中安装VIM编辑器
  10. python--OS模块,文件系统
  11. oracle nls_lang gbk,Oracle客户端NLS_LANG参数的设置详解
  12. html5画布作品,10个会让你惊叹不已的HTML5画布(CANVAS)技术应用演
  13. Codeforces Round #511 (Div. 1) 题解
  14. 使用fdisk给新增加硬盘分区
  15. GitHub开源项目学习 电商系统Mall (一) Mall简介
  16. php ctype xdigit,PHP ctype_xdigit()用法及代码示例
  17. HDS存储给主机扩容步骤
  18. 树莓派CM4的6路串口测试
  19. html自动轮播计时器不准,自己做的jQuery轮播图,大家帮忙看一下,能自动轮播,定时器,点击按钮不起用...
  20. 电脑软件打不开,提示缺失某个.dll文件的原因及解决办法(亲测能用)

热门文章

  1. 基于Tensorflow的图像特效合成算法研究毕业设计报告
  2. 理解动量投资策略和逆向投资策略——通过行为金融学视角
  3. 三大神器和csv文件操作总结
  4. python轮胎缺陷检测_当机器视觉走进轮胎缺陷检测,人工与AI,谁才是主流
  5. 大一下册计算机学什么,大一下学期个人学习计划
  6. oracle常见数据端口,各种数据库默认端口汇集
  7. 如何查看oracle的服务端口号
  8. [Ext JS]3.2 表单(Form)及表单元素
  9. Sql Server 判断月末及上月同期对比
  10. oracle常用hint总结