設計模式 命令模式

2021-09-24 04:03:54 字數 3677 閱讀 4577

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...