命令模式例述

君命有所不受
--《孫子兵法》

國君令將班師回朝,其流程為,國君將其君班師令交給傳令太監,傳令太監將君令傳給將軍,至於將軍回不回朝,那便是將軍的事了。這便是命令模式的典型應用。其靜態類圖如圖一所示:


圖一

備注:我們常在一些書籍中看到講解一些理論時,舉的一些生動的例子,筆者認為,這些例子不是為了讓我理解這些理論,而是當我們理解後,易於記憶。本例亦如是。

命令模式的目的是把司令者的責任與執令者的責任分開,交給不同的對象來執行,使得司令者對象與執令者對象相互獨立,降低耦合。所以命令模式使得置入新的命令相當容易。比如,國君又一詔曰:封狼居胥,則其類圖如圖二所示:

圖二
將受令之後決定先封狼居胥後班師還朝,其源碼如下:
public class 傳令太監{
private List<君令> cmdList = new ArrayList<君令>();
public void 司令(){
for(令 cmd:cmdList){
 執令();//執行君命
}
}
public void addCommand(令 cmd){
cmdList.add(cmd);
}
public void removeCommand(令 cmd){
cmdList.remove(cmd);//有所不受
}
}
public class 將{
public void 班師(){
班師;
}
public void 封狼居胥(){
封狼居胥;
}
}
public interface 君令{
void 執令();
}
public class 班師 implements 君令{
private 將 霍去病;
public 班師(將 漢家將星){
this.霍去病 = 漢家將星;
}//本例中,將將的對象傳入,是因為有些情況下,需要初始一些狀態信息給將。
@Override
public void 執令(){
this.霍去病.班師();
}
}
public class 封狼居胥 implements 君令{
private 將 霍去病;
public 班師(){
this.霍去病 =
new 將() ;
}

@Override
public void 執令(){
this.霍去病.封狼居胥();
}
}
public class 君{
public static void main(String[] args) {
傳令太監 使者 = new 傳信太監();
將 霍去病 = new 將();
封狼居胥 封Cmd = new 封狼居胥();
班師 班Cmd = new 班師(霍去病);
使者.addCommand(封Cmd);
使者.addCommand(班Cmd);
使者.執令();
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值