設計模式學習 命令模式

2021-08-29 16:46:51 字數 2481 閱讀 1598

最近在看《headfirst設計模式》一書,正開始學習設計模式不久。哎,就大四了,感覺落後了別人很多,傷感。現在也只能一步乙個腳印,慢慢進步吧。

其實,前面已經學過工廠模式(抽象工廠和工廠方法)、觀察者模式、單件模式、策略模式。今天把命令模式看完了,看懂並不是很困難,我想困難的是如何在實際中運用它們。因為它們的確會給我們的程式帶來好處,比如說解耦。

恩,看完書,模仿了書本的例子寫了下面這些,都是自己寫,沒看書了。例子幾乎一樣,本來想寫空調遙控的,因為宿舍就有個,但還是覺得不一樣嗎?只是light換成了空調。居於思維的侷限,就沒去再想其他的例子了。

命令模式中的物件主要包括:命令物件,呼叫者(命令請求者),命令接受者。[color=green]而命令模式就是就是通過命令物件,來實現命令請求者和命令接收者解耦。[/color]

1.類圖(見底)

[img]file:///c:/documents%20and%20settings/rudy/桌面/commandfactory.jpg[/img]

2.**

我分了四個包,分別是:command,receiver,requester和test

a. receiver包----接收者包,在這裡,light就是接收者,由它執行最後的動作。

package reciever;

public class light

public void onlight()

public void offlight()

}

b.command包----命令物件包。命令物件的execute方法執行了接受者(light)的乙個或者幾個action,在由呼叫者control確定什麼時候執行execute。

package command;

/** inte***ce

*/public inte***ce icommand

package command;

import reciever.light;

/** 燈關的命令物件

*/public class lightoffcommand implements icommand

public void execute()

public void undo()

}

package command;

import reciever.light;

/** 燈開的命令物件

*/public class lightoncommand implements icommand

public void execute()

public void undo()

}

package command;

/** 空物件。null object

*/public class nocommand implements icommand

public void undo()

}

c.requester---指遙控器。通過setcommand()方法來獲取icommand,再由子類「決定」需要的哪個command。通過幾個button方法,來決定什麼時候執行相應的事件。接受者作出相應地反映(燈亮,燈滅)。[color=red]這裡即可以體會到,遙控器和燈是解耦的。[/color]

package requester;

import command.icommand;

import command.nocommand;

/** 呼叫者

*/public class remotecontrol

public void setcommand(icommand oncommand,icommand offcommand)

public void onbuttonwaspressed()

public void offbuttonwaspressed()

public void undo()

}

d.測試類

package test;

import command.icommand;

import command.lightoffcommand;

import command.lightoncommand;

import reciever.light;

import requester.remotecontrol;

/** test class

*/public class controltest

}

e.控制台輸出:

the light is open!

the light is close!

the light is open!

設計模式學習 命令模式

命令模式,將乙個請求封裝為乙個物件,從而使你可以用不同的請求對客戶進行引數化,對請求排隊或記錄請求日誌,以及支援可撤銷操作。命令模式的作用 第一,它能較容易地設計乙個命令佇列 第二,在需要的情況下,可以較容易地將命令計入日誌 第三,允許接收請求的一方決定是否要否決請求。第四,可以容易地實現對請求的撤...

設計模式學習筆記 命令模式

定義 將乙個請求封裝成物件,從而讓你使用不同的請求把客戶端引數化,對請求排隊或者記錄請求的日誌,可以提供命令的撤銷和恢復功能。通用類圖如下 通用 如下 命令接受者 public abstract class receiver public class concretereceiver1 extend...

設計模式學習005 命令模式

命令模式用來將 請求 封裝成物件,然後用命令物件來引數化其他物件,而且也可以支援撤銷操作。短短一句話,概括了命令模式的精髓下面講解一下這句話中暗藏的原則 第一 每個命令都是乙個物件,本身有執行 exectue 和撤銷 undo 兩個方法,那個這個物件在執行和撤銷執行方法,總得有個執行物件吧?沒錯,這...