目錄
- 設計模式分類
建立型設計模式:
- Singleton Pattern(單例模式)
- Prototype Pattern(原型模式)
- Factory Method Pattern(工廠方法模式)
- Abstract Factory Pattern(抽象工廠模式)
- Builder Pattern(建造者模式)
結構型設計模式:
- Adapter Pattern(擴充卡模式)
- Bridge Pattern(橋接模式)
- Composite Pattern(組合模式)
- Decorator Pattern(裝飾者模式)
- Façade Pattern(外觀模式)
- Flyweight Pattern(享元模式)
- Proxy Pattern(代理模式)
行為型設計模式:
- Chain of Responsibility Pattern(職責鍊模式)
- Command Pattern(指令模式)
- Interpreter Pattern(解釋器模式)
- Iterator Pattern(疊代器模式)
- Mediator Pattern(中介者模式)
- Memento Pattern(備忘錄模式)
- Observer Pattern(觀察者模式)
- State Pattern(狀态模式)
- Strategy Pattern(政策模式)
- Template Method Pattern(模闆方法模式)
- Visitor Pattern(通路者模式)
Command Pattern(指令模式)
别名:動作(Action),事務(Transaction)
意圖
将一個請求封裝為一個對象,進而使你可用不同的請求對客戶進行參數化;對請求排隊。
适用性
1. 系統需要将請求調用者和請求接收者解耦,使得調用者和接收者不直接互動。
2. 系統需要在不同的時間指定請求、将請求排隊和執行請求。
3. 系統需要支援指令的撤銷(Undo)操作和恢複(Redo)操作。
4. 系統需要将一組操作組合在一起,即支援宏指令。
結構
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2QvwVe0lmdhJ3ZvwFM38CXlZHbvN3cpR2Lc1TPB10QGtWUCpEMJ9CXsxWam9CXwADNvwVZ6l2c052bm9CXUJDT1wkNhVzLcRnbvZ2LcZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39jN1ITOxczM5EDMxgDM2EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
角色如下:
Command:
定義指令的接口,聲明執行的方法。
ConcreteCommand:
指令接口實作對象,是“虛”的實作;通常會持有接收者,并調用接收者的功能來完成指令要執行的操作。
Receiver:
接收者,真正執行指令的對象。任何類都可能成為一個接收者,隻要它能夠實作指令要求實作的相應功能。
Invoker:
要求指令對象執行請求,通常會持有指令對象,可以持有很多的指令對象。這個是用戶端真正觸發指令并要求指令執行相應操作的地方,也就是說相當于使用指令對象的入口。
Client:
建立具體的指令對象,并且設定指令對象的接收者。注意這個不是我們正常意義上的用戶端,而是在組裝指令對象和接收者,或許,把這個Client稱為裝配者會更好了解,因為真正使用指令的用戶端是從Invoker來觸發執行。
例子
有撤銷功能的指令:
優缺點
> 優點
1.降低對象之間的耦合度。
2.新的指令可以很容易地加入到系統中。
3.可以比較容易地設計一個組合指令。
4.調用同一方法實作不同的功能
> 缺點
使用指令模式可能會導緻某些系統有過多的具體指令類。因為針對每一個指令都需要設計一個具體指令類,是以某些系統可能需要大量具體指令類,這将影響指令模式的使用。