国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

詳解Java設計模式編程中命令模式的項目結構實現

2019-11-26 14:24:53
字體:
來源:轉載
供稿:網友

正論:

命令模式把一個請求或者操作封裝到一個對象中。命令模式運行系統使用不同的請求把客戶端參數化,對請求排隊或者記錄請求日志,可以提供命令的撤銷和恢復功能。

通俗:

其實很好理解。命令模式,關心的就是命令(或者稱為操作)。打個比方。在一個公司里面,整個運作就像一個系統。某個boss發布了一個命令,中層領導接到這個命令,然后指派給具體負責這個員工。整個流程很清晰吧。有一個需求,如何將這個流程固定下來,形成一個系統。我們只要抓住了重點:命令。將它抽取出來,其他的都迎刃而解了。抽取出命令,封裝成一個獨立的對象,實現了解耦。至于其他的,可以方便地擴展,不論這個命令是CEO,人事部,還是你爸提出來的。無論這個命令的執行者是張三還是王八。這個模式的產生,其實是哲學上的“抓住主要矛盾”。更多的例子,如其他作家舉的“去路邊吃烤肉和去烤肉店吃烤肉有什么不同”或者“美猴王大鬧天宮中玉帝拍太白金星捉來猴子”。

Java命令模式本質是對命令的封裝,從而把發出命令的責任和執行命令的責任分割開了,委派給不同的對象。通俗地說,我是老總,我只管發個命令,至于這個命令發給誰,誰執行,關我P事,我發錢請人不是為了給自己找麻煩。你是負責事情的員工,你的天職是做好上級交給你的任務,踏踏實實,不要知道太多,不要八卦,不要問太多了。

實現:
我們先來看一下類圖:

201642892507277.jpg (846×486)

根據這個我們來看示例代碼:

public interface ICommand {   void execute(); } public class ConcreteCommand implements ICommand {   private Receiver receiver;    public ConcreteCommand(Receiver receiver) {     this.receiver = receiver;   }    @Override   public void execute() {     this.receiver.action();   }  } public class Receiver {   public void action() {     System.out.println("receiver do something");   } } public class Invoker {   private ICommand command;      public Invoker(ICommand command) {     this.command = command;   }      public void invoke() {     this.command.execute();   } } public class Test {   public static void main(String[] args) {     Receiver receiver = new Receiver();//真正的執行者     ICommand command = new ConcreteCommand(receiver);//用于的隔離的命令     Invoker invoker = new Invoker(command );//調用者     invoker.invoke();   } } 


優點:

  • 很容易構造一個命令隊列
  • 記錄相關的命令日志
  • 增加命令的狀態,實現命令的撤銷和重做
  • 允許接受請求的一方決定是否可做
  • 新的命令輕而易舉可以加入其中

缺點:
可能會有過多的具體命令類存在。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 西吉县| 三明市| 河北省| 兰西县| 读书| 绥阳县| 通州市| 修文县| 安阳县| 科尔| 图木舒克市| 蒲江县| 鸡泽县| 惠东县| 襄汾县| 九龙坡区| 台湾省| 长丰县| 阳高县| 环江| 泾阳县| 东港市| 安福县| 岑溪市| 高阳县| 类乌齐县| 聂拉木县| 阜平县| 三明市| 邓州市| 冷水江市| 洞头县| 景东| 漾濞| 九龙城区| 蕉岭县| 呈贡县| 南丰县| 醴陵市| 广安市| 香河县|