模式之命令模式+实例"/>
设计模式之命令模式+实例
定义
命令模式是一种对象行为型模式,命令模式将一个请求封装成一个对象,从而使我们可以用不同的请求对客户进行参数化,使发送者和接收者完全解耦。
发送者和接收者之间没有直接引用关系,发送请求的对象只需知道如何发送请求,而不必知道如何执行。
角色
Command:抽象命令类
ConcreteCommand:具体命令类
Invoker:调用者(命令发出者)
Receiver:接收者(执行者)
Client:客户类
实例
下面用命令模式模拟饮品店订单流程
package command;
/** 订单对象*/
import java.util.HashMap;public class Order {private int id;private HashMap<String,Integer>fruitmap;public Order() {//水果名称,数量fruitmap=new HashMap<String,Integer>();}public int getId() {// TODO Auto-generated method stubreturn id;}public HashMap<String, Integer> getFruitmap() {return fruitmap;}public void setFruitmap(String fruitkind,int quantity) {this.fruitmap.put(fruitkind, quantity);}public void setId(int id) {this.id = id;}}
package command;
/** 具体操作*/
public class Operator {
//榨汁员工public void MarkFruit(Order order) {// TODO Auto-generated method stubString str="";for(String key:order.getFruitmap().keySet()) {str+=key+order.getFruitmap().get(key);}System.out.println("黑暗混合果汁:"+str);}}
package command;
/** 抽象命令类*/
public interface Command {void execute();}
package command;
/** 具体命令类* 封装的命令对象*/
public class OrderCommand implements Command {private Operator receiver;//榨汁员工:接收者private Order order;public OrderCommand(Operator receiver,Order order) {this.receiver=receiver;this.order=order;}@Overridepublic void execute() {// TODO Auto-generated method stubSystem.out.println(order.getId()+"号顾客的成品");receiver.MarkFruit(order);}}
package command;
/*** 调度者(前台服务员)*/
import java.util.ArrayList;public class WaitorInvoker {private ArrayList<Command>commands=null;public WaitorInvoker() {commands=new ArrayList<Command>();}public void setCommand(Command cmd) {commands.add(cmd);}public void OrderUp() {System.out.println("新的订单!");for(Command cmd:commands) {//发送命令if(cmd!=null)cmd.execute();}}
}
package command;public class ClientClass {public static void main(String args[]) {//创建多个订单Order order1=new Order();order1.setId(1);order1.setFruitmap("橙子", 1);order1.setFruitmap("梨子", 2);order1.setFruitmap("苹果", 3);Order order2=new Order();order2.setId(2);order2.setFruitmap("香蕉", 1);order2.setFruitmap("葡萄", 2);order2.setFruitmap("西瓜", 3);//创建操作者Operator op=new Operator();//将多个订单封装成命令对象OrderCommand cmd1=new OrderCommand(op,order1);OrderCommand cmd2=new OrderCommand(op,order2);//创建调用者并发出命令WaitorInvoker waitor=new WaitorInvoker();waitor.setCommand(cmd1);waitor.setCommand(cmd2);//执行命令waitor.OrderUp();}
}
运行结果:
学习视频指路:黑手书生
=%E9%BB%91%E6%89%8B%E4%B9%A6%E7%94%9F&from_source=nav_search_new
更多推荐
设计模式之命令模式+实例
发布评论