打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
10. 命令模式
一. 概念
Command(命令模式):将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。

二. 角色
客户(Client)角色:创建了一个具体命令(ConcreteCommand)对象并确定其接收者。
命令(Command)角色:声明了一个给所有具体命令类的抽象接口。
具体命令(ConcreteCommand)角色:定义一个接收者和行为之间的弱耦合;实现execute()方法,负责调用接收者的相应操作。
请求者(Invoker)角色:负责调用命令对象执行请求,相关的方法叫做行动方法。
接收者(Receiver)角色:负责具体实施和执行一个请求。

三. 实现
假设一个老师可以命令学生执行完成作业和叫家长两项操作,而告知学生的手段是通过班长转达,那么这就形成了命令模式,老师为客户角色,学生为接收者,班长则为请求者角色。

Teacher.java
public class Teacher {
public static void main(String[] args) {
Monitor monitor = new Monitor();
Student like = new Student();
Student sb = new Student();
Command callParentCommand = new CallParentCommand(sb);
Command finishHomeWorkCommand = new FinishHomeworkCommand(like);
monitor.addCommands(callParentCommand, finishHomeWorkCommand);
monitor.action();
monitor.undo(callParentCommand);
monitor.action();
}
}
指明了接收者分别为like 和 sb,并利用班长将具体命令组成集合统一执行。

Student.java
public class Student {
public void finishHomework() {
System.out.println("把作业做完");
}
public void callParent(){
System.out.println("把家长叫过来");
}
}
学生类,里面有完成作业和叫家长两个方法。

Monitor.java
public class Monitor {
private List<Command> commands = new ArrayList<Command>();
public void addCommands(Command... commands){
for(Command command : commands){
this.commands.add(command);
}
}
public void action(){
for(Command command : commands){
command.execute();
}
}
public void undo(Command command){
System.out.println("饶了你");
this.commands.remove(command);
}
}
班长类,其主要负责添加、删除命令并执行。

Command.java
public interface Command {
public void execute();
}
命令接口。

CallParentCommand.java
public class CallParentCommand implements Command {
private Student student;
public CallParentCommand(Student student){
this.student = student;
}
@Override
public void execute() {
student.callParent();
}

}
叫家长具体命令,其引用了Student类,并调用接收者的操作。

FinishHomeworkCommand.java
public class FinishHomeworkCommand implements Command {
private Student student;
public FinishHomeworkCommand(Student student){
this.student = student;
}
@Override
public void execute() {
student.finishHomework();
}
}
同上
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
设计模式学习笔记(十七)——Command命令模式
命令模式(Command)解析例子
研磨设计模式之 命令模式-1
命令模式——行为型模式(2)
《JAVA与模式》之命令模式
简说设计模式——命令模式
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服