摘要:命令模式一命令模式定義對于行為請求者和行為實(shí)現(xiàn)者,將一組行為抽象為對象,實(shí)現(xiàn)二者的松耦合角色抽象命令接口具體命令最終執(zhí)行命令的對象命令對象的入口二具體實(shí)現(xiàn)創(chuàng)建接口創(chuàng)建命令執(zhí)行對象創(chuàng)建具體實(shí)現(xiàn)類創(chuàng)建命令入口調(diào)用輸出三優(yōu)缺點(diǎn)優(yōu)點(diǎn)降低耦合度新增一
命令模式
一. 命令模式 1.1 定義對于“行為請求者”和“行為實(shí)現(xiàn)者”,將一組行為抽象為對象,實(shí)現(xiàn)二者的松耦合.
1.2 角色Command:抽象命令接口.
ConcreteCommand:具體命令.
Receiver:最終執(zhí)行命令的對象.
Invoker:命令對象的入口.
二. 具體實(shí)現(xiàn) 1.1 創(chuàng)建Command接口public interface ICommand { void execute(); }1.2 創(chuàng)建命令執(zhí)行對象
public class Receiver { public void execute(){ System.out.println("receiver execute ... "); } }1.3 創(chuàng)建具體Command實(shí)現(xiàn)類
public class ConcreteCommandA implements ICommand { private Receiver receiver; public ConcreteCommandA(Receiver receiver){ this.receiver = receiver; } @Override public void execute() { System.out.println("ConcreteCommandA execute ..."); receiver.execute(); } } public class ConcreteCommandB implements ICommand { private Receiver receiver; public ConcreteCommandB(Receiver receiver){ this.receiver = receiver; } @Override public void execute() { System.out.println("ConcreteCommandB execute ..."); receiver.execute(); } }1.4 創(chuàng)建命令入口
public class Invoker { private ICommand concreteCommandA, concreteCommandB; public Invoker(ICommand concreteCommandA, ICommand concreteCommandB){ this.concreteCommandA = concreteCommandA; this.concreteCommandB = concreteCommandB; } public void orderA(){ concreteCommandA.execute(); } public void orderB(){ concreteCommandB.execute(); } }1.5 調(diào)用
public static void main(String[] args) { Receiver receiver = new Receiver(); Invoker invoker = new Invoker(new ConcreteCommandA(receiver), new ConcreteCommandB(receiver)); invoker.orderA(); invoker.orderB(); }1.6 輸出
ConcreteCommandA execute ... receiver execute ... ConcreteCommandB execute ... receiver execute ...三. 優(yōu)缺點(diǎn) 3.1 優(yōu)點(diǎn)
降低耦合度.
新增一個命令/一組命令簡單.
調(diào)用同一方法實(shí)現(xiàn)不同功能.
3.2 缺點(diǎn)會產(chǎn)生過多具體命令類.
四. 源碼https://github.com/Seasons20/DisignPattern.git
END
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/69589.html
摘要:命令模式屬于行為型模式的一種,又稱為行動模式或交易模式。結(jié)構(gòu)圖模式結(jié)構(gòu)抽象命令類聲明了用于執(zhí)行請求的的等方法具體命令類抽象命令類的子類,對應(yīng)具體的接收者對象,將接收者對象的動作綁定其中。 命令模式(Command Pattern)屬于行為型模式的一種,又稱為行動(Action)模式或交易(Transaction)模式。將一個請求封裝為一個對象,從而達(dá)到用不同的請求對客戶進(jìn)行參數(shù)化,對于...
摘要:作者按每天一個設(shè)計(jì)模式旨在初步領(lǐng)會設(shè)計(jì)模式的精髓,目前采用和兩種語言實(shí)現(xiàn)。該對象執(zhí)行命令。命令模式按鈕參考設(shè)計(jì)模式和開發(fā)實(shí)踐如何實(shí)現(xiàn)命令模式 作者按:《每天一個設(shè)計(jì)模式》旨在初步領(lǐng)會設(shè)計(jì)模式的精髓,目前采用javascript和python兩種語言實(shí)現(xiàn)。誠然,每種設(shè)計(jì)模式都有多種實(shí)現(xiàn)方式,但此小冊只記錄最直截了當(dāng)?shù)膶?shí)現(xiàn)方式 :) 原文地址是:《每天一個設(shè)計(jì)模式之命令模式》 歡迎關(guān)注個人...
摘要:作者按每天一個設(shè)計(jì)模式旨在初步領(lǐng)會設(shè)計(jì)模式的精髓,目前采用和兩種語言實(shí)現(xiàn)。該對象執(zhí)行命令。命令模式按鈕參考設(shè)計(jì)模式和開發(fā)實(shí)踐如何實(shí)現(xiàn)命令模式 作者按:《每天一個設(shè)計(jì)模式》旨在初步領(lǐng)會設(shè)計(jì)模式的精髓,目前采用javascript和python兩種語言實(shí)現(xiàn)。誠然,每種設(shè)計(jì)模式都有多種實(shí)現(xiàn)方式,但此小冊只記錄最直截了當(dāng)?shù)膶?shí)現(xiàn)方式 :) 原文地址是:《每天一個設(shè)計(jì)模式之命令模式》 歡迎關(guān)注個人...
摘要:支持撤銷,隊(duì)列,宏命令等功能。宏命令宏命令一組命令集合命令模式與組合模式的產(chǎn)物發(fā)布者發(fā)布一個請求,命令對象會遍歷命令集合下的一系列子命令并執(zhí)行,完成多任務(wù)。 showImg(https://segmentfault.com/img/bVbu3CN?w=800&h=600); 命令模式:請求以命令的形式包裹在對象中,并傳給調(diào)用對象。調(diào)用對象尋找可以處理該命令的合適的對象,并把該命令傳給相...
摘要:命令模式先來看下命令模式的定義命令模式將請求封裝成對象,以便使用不同的請求隊(duì)列或者日志來參數(shù)化其他對象。命令模式也支持可撤銷的操作。通過新增兩個方法,命令模式能夠支持這一點(diǎn)。 命令模式 題目: 現(xiàn)在要做一個智能家居控制遙控器,功能如下圖所示。 showImg(https://segmentfault.com/img/remote/1460000012774337?w=1730&h=1...
摘要:如果把設(shè)計(jì)模式當(dāng)做一門語言的話,我覺得組合模式就是里面的數(shù)組,或者更確切的說,應(yīng)該算是一棵樹。給向上的綁定向上的執(zhí)行程序可以看出,使用組合模式命令模式可以完美的打出個兩個王的終極炸彈。將同類操作同目的操作放在一組。 如果把設(shè)計(jì)模式當(dāng)做一門語言的話,我覺得組合模式就是里面的數(shù)組,或者更確切的說,應(yīng)該算是一棵樹。 樹的枝干就是其他模式的使用,比如命令模式,代理模式,單例模式等等。總的來說,...
閱讀 1357·2021-11-24 09:39
閱讀 1346·2021-11-04 16:12
閱讀 2686·2021-09-24 09:47
閱讀 3337·2021-09-01 10:50
閱讀 1477·2019-08-30 15:55
閱讀 1423·2019-08-30 15:43
閱讀 642·2019-08-30 11:08
閱讀 3578·2019-08-23 18:33