encapsulate a request as an object,thereby letting you parameterize clients with different requests,queue or log requests,and support undoable operations.(將乙個請求封裝成乙個物件,從而讓你使用不同的請求把客戶端引數化,對請求排隊或者記錄請求日誌,可以提供命令的撤銷和恢復功能。)
我們可以引入乙個場景,假如乙個公司在剛成立規模還小,老闆還沒錢給自己配秘書,老闆需要和三個組(技術部、策劃部、行政部)都要溝通。
**如下:
抽象出公共方法
/**
* @author shuliangzhao
* @title: group
* @projectname design-parent
* @description: todo
* @date 2019/6/4 21:37
*/public abstract class group
策劃部 plandepartgroup
/**
* @author shuliangzhao
* @title: plandepartgroup
* @projectname design-parent
* @description: todo
* @date 2019/6/4 21:41
*/public class plandepartgroup extends group
@override
public void del()
@override
public void change()
@override
public void plan()
}
技術部 techdepartgroup
/**
* @author shuliangzhao
* @title: techdepartgroup
* @projectname design-parent
* @description: todo
* @date 2019/6/4 21:39
*/public class techdepartgroup extends group
@override
public void del()
@override
public void change()
@override
public void plan()
}
行政部 admindepartgroup
/**
* @author shuliangzhao
* @title: admindepartgroup
* @projectname design-parent
* @description: todo
* @date 2019/6/4 21:42
*/public class admindepartgroup extends group
@override
public void del()
@override
public void change()
@override
public void plan()
}
場景類
/**
* @author shuliangzhao
* @title: client
* @projectname design-parent
* @description: todo
* @date 2019/6/4 21:45
*/public class client
}
執行結果
然後老闆又給技術部,策劃部下發任務。這樣每天周而復始在給不同部門下發任務,由此一來老闆都沒有時間規劃公司的發展了,老闆一看這樣不行啊,必須要給自己找乙個下手,來分擔這樣的工作。老闆要的這個人,需要做的就是,我給你乙個指令你去告訴大家要怎麼要,不用我自己天天出面。
因此上面設計已經不符合,我們需要從新設計。
首先抽象乙個commond類,這個類只有乙個execute方法。然後具體的命令繼承這個commond類。
invoker實現類,setcomand接收老闆發給我們的命令,action方法是執行老闆的命令。
因此我們需要增加幾個類來完成我們現在的設計
命令類 commond
/**
* @author shuliangzhao
* @title: commond
* @projectname design-parent
* @description: todo
* @date 2019/6/4 21:57
*/public abstract class commond
新增考勤規範命令
/**
* @author shuliangzhao
* @title: addadmindepartgroup
* @projectname design-parent
* @description: todo
* @date 2019/6/4 22:00
*/public class addadmindepartgroup extends commond
}
負責命令的人invoker
/**
* @author shuliangzhao
* @title: invoker
* @projectname design-parent
* @description: todo
* @date 2019/6/4 22:01
*/public class invoker
public void action()
}
場景類
/**
* @author shuliangzhao
* @title: client
* @projectname design-parent
* @description: todo
* @date 2019/6/4 22:02
*/public class client
}
執行結果
這更簡單了,負責人只要接到老闆的命令,就立刻執行。
命令模式的優點
1.類間解耦,呼叫者角色與接收者角色之間沒有任何依賴關係。
2.可擴充套件性,command的子類可以非常容易地擴充套件。
命令模式的缺點
**寫的比較多,有n個命令,就需要寫n個類。
設計模式 命令設計模式
一句話總結 命令設計模式的實質是將命令定義,命令的執行分離開,從而提公升了系統的解藕性 結構 命令的抽象command 命令的具體實現concretecommand 命令處理者抽象ireceiver 命令處理者的具體實現concretereceiver 命令的呼叫者invoker 客戶端client...
設計模式 命令模式
1 命令模式的角色組成 1 命令角色 command 生命執行操作的介面。介面或抽象類來實現。2 具體命令角色 concrete command 將乙個接收者物件繫結於乙個動作 呼叫接收者相應的操作,以實現命令角色宣告的執行操作的介面。3 客戶角色 client 建立乙個具體命令物件 並可以設定它的...
設計模式 命令模式
1 command.h ifndef command h define command h include include include using namespace std class chef 廚師,具體命令的執行者 class command 命令基類 class makemuttonco...