文章目录
- 一、命令模式定义
- 二、例子
-
- [2.1 菜鸟教程例子](#2.1 菜鸟教程例子)
-
- [2.1.1 定义命令类接口](#2.1.1 定义命令类接口)
- [2.1.2 定义命令执行者](#2.1.2 定义命令执行者)
- [2.1.3 被处理对象Stock。](#2.1.3 被处理对象Stock。)
- [2.1.4 封装处理Stock的命令](#2.1.4 封装处理Stock的命令)
- [2.2 JDK源码------Runnable](#2.2 JDK源码——Runnable)
-
- [2.2.1 命令接口](#2.2.1 命令接口)
- [2.2.2 命令处理者](#2.2.2 命令处理者)
- [2.2.3 命令实现类](#2.2.3 命令实现类)
- [2.3 SpringMVC------Controller](#2.3 SpringMVC——Controller)
-
- [2.3.1 请求对象 handler](#2.3.1 请求对象 handler)
- [2.3.2 请求执行者 HandlerAdapter](#2.3.2 请求执行者 HandlerAdapter)
- 三、其他设计模式
一、命令模式定义
类型: 行为型模式
目的: 将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。
二、例子
2.1 菜鸟教程例子
2.1.1 定义命令类接口
java
public interface Order {
void execute();
}
2.1.2 定义命令执行者
java
import java.util.ArrayList;
import java.util.List;
public class Broker {
private List<Order> orderList = new ArrayList<Order>();
public void takeOrder(Order order){
orderList.add(order);
}
public void placeOrders(){
for (Order order : orderList) {
order.execute();
}
orderList.clear();
}
}
2.1.3 被处理对象Stock。
菜鸟教程定义被处理的对象是Stock。
java
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");
}
}
2.1.4 封装处理Stock的命令
java
public class BuyStock implements Order {
private Stock abcStock;
public BuyStock(Stock abcStock){
this.abcStock = abcStock;
}
public void execute() {
abcStock.buy();
}
}
java
public class SellStock implements Order {
private Stock abcStock;
public SellStock(Stock abcStock){
this.abcStock = abcStock;
}
public void execute() {
abcStock.sell();
}
}
2.2 JDK源码------Runnable
虽然 Runnable 接口本身并不是一个命令模式的实现,但结合Thread和自定义的Runnable 实现类可以认为它运用了命令模式。
2.2.1 命令接口
java
public interface Runnable {
public abstract void run();
}
2.2.2 命令处理者
java
public class Thread implements Runnable {
private Runnable target;
public synchronized void start() {
if (threadStatus != 0)
throw new IllegalThreadStateException();
group.add(this);
boolean started = false;
try {
start0();
started = true;
} finally {
try {
if (!started) {
group.threadStartFailed(this);
}
} catch (Throwable ignore) {
}
}
}
private native void start0();
}
2.2.3 命令实现类
java
public class OrderThread {
public void run(){
//todo
}
}
2.3 SpringMVC------Controller
个人认为Controller也是运用了命令模式。
2.3.1 请求对象 handler
2.3.2 请求执行者 HandlerAdapter
HandlerAdapter光看名字就知道运用了适配模式,我们就看handle方法部分就好了。
java
public class SimpleControllerHandlerAdapter implements HandlerAdapter {
public SimpleControllerHandlerAdapter() {
}
public boolean supports(Object handler) {
return handler instanceof Controller;
}
@Nullable
public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
return ((Controller)handler).handleRequest(request, response);
}
public long getLastModified(HttpServletRequest request, Object handler) {
return handler instanceof LastModified ? ((LastModified)handler).getLastModified(request) : -1L;
}
}
三、其他设计模式
创建型模式
结构型模式
行为型模式
- 1、设计模式------访问者模式(Visitor Pattern)+ Spring相关源码
- 2、设计模式------中介者模式(Mediator Pattern)+ JDK相关源码
- 3、设计模式------策略模式(Strategy Pattern)+ Spring相关源码
- 4、设计模式------状态模式(State Pattern)
- 5、设计模式------观察者模式(Observer Pattern)+ Spring相关源码
- 6、设计模式------备忘录模式(Memento Pattern)
- 7、设计模式------模板方法模式(Template Pattern)+ Spring相关源码
- 8、设计模式------迭代器模式(Iterator Pattern)+ Spring相关源码