小雪的故事暫停,欲知後事如何,請等下回再編!現在改編另乙個故事。
故事
小時候,我夢想自己成為一名真正的軍人,對軍營生活充滿著嚮往.,軍人的豪氣,軍人的英姿總給人無限遐想。閒暇之餘,我喜歡看看軍事題材的電視劇集,包括《和平年代》、《歷史的天空》、《沙場點兵》、《中國近衛軍》、《垂直打擊》、《石破天驚》、《鐵色高原》。今年一部電視劇集《士兵突擊》再次讓農村出身的傻根成為2023年最耀眼的明星。
我想,大多數讀過大學的人都經歷過一段艱苦的軍訓生活(其實根本不算苦)。雖然這種軍訓每天也只是練練軍姿,走走正步而已,但是還是覺得有點新鮮感。當時,在所有的教官中,我們的教官是最帥氣的。大家還開玩笑說,他必將會成為我們學校所有女生的夢中情人。另外,他的嗓門特別大,立正! 稍息!向左轉! 向右轉!那聲音簡直是震耳欲聾!
軍人以服從命令為天職。立正! 稍息!向左轉! 向右轉!
命令模式(command)的解決方案
gof在《設計模式》中對命令模式描述:將乙個請求封裝為乙個物件,從而使你可用不同的請求對客戶進行引數化。命令模式中需要定義的角色:命令接收者(receiver)、命令抽象類(command)、具體命令物件(lzcommand/sxcommand/xzzcommand/xyzcommand)、命令執行者(invoker)。
命令接收者物件如下:
namespace
xxpublic
void
lz()
public
void
sx()
public
void
xzz()
public
void
xyz()}}
命令抽象類如下:
namespace
xxpublic
abstract
void
execute();}}
命令具體物件如下:
namespace
xxpublic
override
void
execute()
}public
class
sxcommand:command
public
override
void
execute()
}public
class
xzzcommand:icommand
public
override
void
execute()
}public
class
xzzcommand:icommand
public
override
void
execute()}}
命令執行者物件如下:
namespace
xxpublic
void
lz()
public
void
sx()
public
void
xzz()
public
void
xyz()}}
接下來,我們通過客戶端進行呼叫。假如我們建立乙個窗體,窗體上放置四個按鈕,如下圖:
呼叫**如下:
public
partial
class
form1 : form
private
void
btnlz_click(
object
sender, eventargs e)
private
void
btnsx_click(
object
sender, eventargs e)
private
void
btnxzz_click(
object
sender, eventargs e)
private
void
btnxyz_click(
object
sender, eventargs e)
}最後乙個問題,如果我要增加乙個命令按鈕「向後轉」,怎麼辦呢?我們可以認為,向左轉 + 向左轉=向後轉,所以實現如下:
invoker.xzz();
invoker.xzz();
當然這樣的理解有些牽強。這裡,我只想說明乙個道理,那就是:封裝的物件的顆粒度盡量最小化。
設計模式系列(行為型模式)之七 命令模式
命令 command 模式的定義如下 將乙個請求封裝為乙個物件,使發出請求的責任和執行請求的責任分割開。這樣兩者之間通過命令物件進行溝通,這樣方便將命令物件進行儲存 傳遞 呼叫 增加與管理。優點 降低系統的耦合度。命令模式能將呼叫操作的物件與實現該操作的物件解耦。增加或刪除命令非常方便。採用命令模式...
設計模式系列漫談之八 復合模式
故事 10月20日,我們公司一行幾人參加紹興客戶的專案招標。出乎意料的是,就在當天,這家單位同時舉行三個專案的招標 真牛 所以十幾家單位都在等候。我們上午8 30就到了現場,而我們投標的專案去排在下午進行。傻坐了一會,我們提議到魯迅故居去看看。其實幾次去紹興出差都匆匆忙忙的,今天終於如願以償。近來確...
設計模式系列漫談之十二 職責鏈模式
從牙膏廣告說起 在午茶小憩間,以 成語接龍 形式,通過帥哥美女之口巧妙地把牙齒常見的症狀表達出來,從而突出雲南白藥牙膏的獨特功效。這一極其創意的廣告為雲南白藥贏得了巨大的市場,也使其產品為廣大消費者所熟悉,創造了家喻戶曉的品牌效應。成語接龍是一種人們喜聞樂見的遊戲。就遊戲規則來講非常簡單,即用前乙個...