设计模式学习—命令模式

来源:互联网 发布:java 抽象方法 static 编辑:程序博客网 时间:2024/05/17 19:19

一、我的理解


命令模式是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。(以上是菜鸟教程中对其的定义,目前我暂时还没有多深的体会)


二、实现方式


通过调用者调用接受者执行命令,顺序:调用者→接受者→命令。
定义三个角色:1、received 真正的命令执行对象 2、Command 3、invoker 使用命令对象的入口


三、实例



Java代码

Order接口: 命令接口,所有要执行的命令都需要实现这一接口

package com.study.dp.command;/** * 命令接口 * @author bird * */public interface Order {void execute();}
Stock类:请求类

package com.study.dp.command;/** * 请求类 * @author bird * */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");}}
BuyStock类:购买命令的实际执行类

package com.study.dp.command;/** * 实现order接口的实体类 * @author bird * */public class BuyStock implements Order {private Stock abcStock;public BuyStock(Stock abcStock) {this.abcStock = abcStock;}@Overridepublic void execute() {abcStock.buy();}}
SellStock类:销售命令的实际执行类

package com.study.dp.command;/** * 实现order接口的实体类 * @author bird * */public class SellStock implements Order {private Stock abcStock;public SellStock(Stock abcStock) {this.abcStock = abcStock;}@Overridepublic void execute() {abcStock.sell();}}
Broker类:调用对象,基于哪个请求则执行对应的类

package com.study.dp.command;import java.util.ArrayList;import java.util.List;/** * 命令调用类 * @author bird * */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();}}
Demo类:测试

package com.study.dp.command;/** * 测试类,使用Broker类来接受并执行命令 * @author bird * */public class Demo {public static void main(String[] args) {Stock abcStock = new Stock();BuyStock buyStock = new BuyStock(abcStock);SellStock sellStock = new SellStock(abcStock);Broker broker = new Broker();broker.takeOrder(buyStock);broker.takeOrder(sellStock);broker.placeOrders();}}


四、应用实例

1.GUI中的每一个按钮都是一个命令模式





原创粉丝点击