【Java中23种面试常考的设计模式之命令模式(Command)---行为型模式】
知识回顾:
>
之前我们讲过的设计模式在这里呦:
【面试最常见的设计模式之单例模式】
【面试最常见的设计模式之工厂模式】
【Java中23种面试常考的设计模式之备忘录模式(Memento)---行为型模式】
【Java中23种面试常考的设计模式之观察者模式(Observer)---行为型模式】
【Java中23种面试常考的设计模式之模板模式(Template)---行为型模式】
【Java中23种面试常考的设计模式之状态模式(State)---行为型模式】
【Java中23种面试常考的设计模式之策略模式(Strategy)---行为型模式】
【Java中23种面试常考的设计模式之迭代器模式(Iterator)---行为型模式】
【Java中23种面试常考的设计模式之访问者模式(Visitor)---行为型模式】
【Java中23种面试常考的设计模式之中介者模式(Mediator)---行为型模式】
【Java中23种面试常考的设计模式之解释器模式(Interpreter)---行为型模式】
接下来我们要进行学习的是:【Java中23种面试常考的设计模式之命令模式(Command)---行为型模式。
命令模式
命令模式:请求以命令的形式封装在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。将”发出请求的对象”和”接收与执行这些请求的对象”分隔开来。
解决的问题
- 请求者与实现者通常是一种紧耦合的关系。这种关系越紧密就影响类之间的关系。所以我们需要降低耦合度。
生产开发中常用的使用场景
- 数据库事务机制的底层实现。
- 记录命令、命令的撤销与恢复。
命令模式优点与缺点
优点
- 降低了系统耦合度。
- 可扩展性强。
缺点
- 具体命令的实现类过多,不利于维护。
核心角色
Command 声明执行操作的接口,定义一个规则Exexute。
ConcreteCommand 将一个接收者对象绑定于一个动作, 调用接收者相应的操作,以实现Execute规则。
Invoke 要求该命令执行这个请求。
Receiver 知道如何实现与执行一个请求相关的操作。任何类都可能作为一个接收者。
Client--Main 创建一个具体命令对象并设定它的接收者。
UML类图
实现代码
我们实现这样一个栗子:
Invoke类
package com.command;
public class Invoke {
private Command command;
public Invoke(Command command) {
super();
this.command = command;
}
public void call(){
System.out.println("Invoke要执行一个命令----》");
command.execute();
}
}
Command接口
package com.command;
public interface Command {
void execute();
}
ConcreteCommand类
package com.command;
public class ConcreteCommand implements Command {
private Receiver receiver;
public ConcreteCommand(Receiver receiver) {
super();
this.receiver = receiver;
}
@Override
public void execute() {
System.out.println("Command中去匹配合适的执行命令---》");
receiver.receive();
}
}
Receiver类
package com.command;
public class Receiver {
public void receive(){
System.out.println("Receiver开始执行相关的操作。。。。。");
}
}
客户端测试代码Client-Main
package com.command;
public class Main {
public static void main(String[] args) {
Receiver receiver=new Receiver();
Command command = new ConcreteCommand(receiver);
Invoke invoke = new Invoke(command);
invoke.call();
}
}
运行结果展示:
好了,到这里【Java中23种面试常考的设计模式之命令模式(Command)---行为型模式】就结束了,23种设计模式持续更新汇总中。