一、概述
官方解釋:encapsulate a request as an object,thereby letting you parameterize clients with different requests,queue or log requests, and support undoable operations.(將乙個請求封裝成乙個物件,從而讓你使用不同的請求把客戶端引數化,對請求排隊或者記錄請求日誌,可以提供命令的撤銷和恢復功能。)
我的理解:將命令類command引用注入到傳送者類invoker中,將接收者receiver注入到命令類command中,通過命令類command作為中間類將傳送者invoker和接收者receiver解耦。
參與者:傳送者invoker、接收者receiver、命令類(抽象命令類abstractcommand、具體命令類concretecommand1、concretecommand2)
類圖:
二、**
**1(單純的命令模式結構):
package mypackage;
public class designpatterndemo
}class invoker
public void setcommand(command command)
public void call()
}class receiver
}abstract class command
public abstract void execute();
}class concretecommand extends command
}
輸出:
receiver action
**2——窗體命令例項:
package mypackage;
public class designpatterndemo
}class windowinvoker
public void setcommand(command command)
public void min()
}class windowreceiver
}abstract class command
public abstract void min();
}class windowcommand extends command
}
輸出:
窗體最小化到托盤
**3——窗體命令例項(命令類中方法擴充套件):
package mypackage;
public class designpatterndemo
}class windowinvoker
public void setcommand(command command)
public void min()
public void max()
public void close() }
class windowreceiver
public void max()
public void close()
}abstract class command
public abstract void min();
public abstract void max();
public abstract void close();
}class windowcommand extends command
@override
public void max()
@override
public void close()
}
輸出:
窗體最小化到托盤
窗體最大化到螢幕
窗體關閉
**4——**3的優化,便於後面擴充套件:
package mypackage;
public class designpatterndemo
}class windowinvoker
public void setcommand(command command)
public void call(string key) }
class windowreceiver
public void max()
public void close()
}abstract class command
public abstract void execute(string key);
}class windowcommand extends command }
}
輸出:
窗體最小化到托盤
窗體最大化到螢幕
窗體關閉
**5——擴充套件乙個concretecommand:
package mypackage;
public class designpatterndemo
}class invoker
public void setcommand(command command)
public void call(string key) }
class windowreceiver
public void max()
public void close()
}class menureceiver
public void menuclose()
}abstract class command
public void setmenureceiver (menureceiver menureceiver)
public abstract void execute(string key);
}class windowcommand extends command }
}class menucommand extends command
}}
輸出5:
窗體最小化到托盤
窗體最大化到螢幕
窗體關閉
選單開啟
選單關閉
三、小結
設計模式只重其意不重其行,上面5段**:
第一段介紹命令模式的**形式;
第二段結合窗體命令;
第三段在concretecommand具體命令類中擴充套件了max close方法;
第四段**對第三段**優化,為第五段**新增menucommand準備;
第五段**新增另乙個具體命令類。
其實整個都是乙個換湯不換藥的東西,讀者理解了命令模式的架構就好,都可以舉一反三。
設計模式筆記(十四) 組合模式
組合模式 composite 將物件組合成樹形結構以表示 部分 整體 的層次結構。組合模式使得使用者對單個物件和組合物件的使用具有一致性。透明方式 也就是說在component中宣告所有用來管理子物件的方法,其中包括add remove等。這樣實現component介面的所有子類都具備了add和re...
設計模式 橋接模式 十四
橋接模式,主要利用 合成 聚合復用原則 比繼承的耦合度會低 1.0 手機 與 軟體 using system namespace bridgedesign 手機軟體 abstract class mobilesoftware 手機遊戲 class mobilegame mobilesoftware ...
設計模式(十四) 模板方法模式
模式中的角色 抽象類 abstractclass 定義了演算法的骨架。具體類 concreteclass 實現抽象類中的抽象方法,已完成完整的演算法。抽象模板類 public abstract class abstractperson 以下是不同子類根據自身特性完成的具體步驟 protected a...