一、命令模式定義
類型: 行為型模式
目的: 將一個請求封裝成一個對象,從而使您可以用不同的請求對客戶進行參數(shù)化。
二、例子
2.1 菜鳥教程例子
2.1.1 定義命令類接口
public interface Order {
void execute();
}
2.1.2 定義命令執(zhí)行者
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。
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的命令
public class BuyStock implements Order {
private Stock abcStock;
public BuyStock(Stock abcStock){
this.abcStock = abcStock;
}
public void execute() {
abcStock.buy();
}
}
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 接口本身并不是一個命令模式的實現(xiàn),但結合Thread和自定義的Runnable 實現(xiàn)類可以認為它運用了命令模式。
2.2.1 命令接口
public interface Runnable {
public abstract void run();
}
2.2.2 命令處理者
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 命令實現(xiàn)類
public class OrderThread {
public void run(){
//todo
}
}
2.3 SpringMVC——Controller
個人認為Controller也是運用了命令模式。
2.3.1 請求對象 handler
2.3.2 請求執(zhí)行者 HandlerAdapter
HandlerAdapter光看名字就知道運用了適配模式,我們就看handle方法部分就好了。
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;
}
}
三、其他設計模式
創(chuàng)建型模式
結構型模式文章來源:http://www.zghlxwxcb.cn/news/detail-742282.html
- 1、設計模式——裝飾器模式(Decorator Pattern)+ Spring相關源碼
行為型模式文章來源地址http://www.zghlxwxcb.cn/news/detail-742282.html
- 1、設計模式——訪問者模式(Visitor Pattern)+ Spring相關源碼
- 2、設計模式——中介者模式(Mediator Pattern)+ JDK相關源碼
- 3、設計模式——策略模式(Strategy Pattern)+ Spring相關源碼
- 4、設計模式——狀態(tài)模式(State Pattern)
- 5、設計模式——命令模式(Command Pattern)+ Spring相關源碼
- 6、設計模式——觀察者模式(Observer Pattern)+ Spring相關源碼
- 7、設計模式——備忘錄模式(Memento Pattern)
- 8、設計模式——模板方法模式(Template Pattern)+ Spring相關源碼
- 9、設計模式——迭代器模式(Iterator Pattern)+ Spring相關源碼
- 10、設計模式——責任鏈模式(Chain of Responsibility Pattern)+ Spring相關源碼
- 11、設計模式——解釋器模式(Interpreter Pattern)+ Spring相關源碼
到了這里,關于設計模式——命令模式(Command Pattern)+ Spring相關源碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!