設(shè)計(jì)模式—行為型模式之命令模式
命令(Command)模式:將一個(gè)請(qǐng)求封裝為一個(gè)對(duì)象,使發(fā)出請(qǐng)求的責(zé)任和執(zhí)行請(qǐng)求的責(zé)任分割開(kāi)。這樣兩者之間通過(guò)命令對(duì)象進(jìn)行溝通,這樣方便將命令對(duì)象進(jìn)行儲(chǔ)存、傳遞、調(diào)用、增加與管理。
命令模式包含以下主要角色。
- 抽象命令類(lèi)(Command)角色:聲明執(zhí)行命令的接口,擁有執(zhí)行命令的抽象方法 execute()。
- 具體命令類(lèi)(Concrete Command)角色:是抽象命令類(lèi)的具體實(shí)現(xiàn)類(lèi),它擁有接收者對(duì)象,并通過(guò)調(diào)用接收者的功能來(lái)完成命令要執(zhí)行的操作。
- 實(shí)現(xiàn)者/接收者(Receiver)角色:執(zhí)行命令功能的相關(guān)操作,是具體命令對(duì)象業(yè)務(wù)的真正實(shí)現(xiàn)者。
- 調(diào)用者/請(qǐng)求者(Invoker)角色:是請(qǐng)求的發(fā)送者,它通常擁有很多的命令對(duì)象,并通過(guò)訪問(wèn)命令對(duì)象來(lái)執(zhí)行相關(guān)請(qǐng)求,它不直接訪問(wèn)接收者。
示例
實(shí)際上,我們?nèi)粘i_(kāi)發(fā)過(guò)程中mvc三層開(kāi)發(fā),就是一種命令模式的實(shí)現(xiàn)。
我們看一個(gè)其他的例子。
寵物狗的主人可以讓寵物吃飯,玩耍。
命令接口類(lèi)如下:
public interface Command {
/**
* 命令的執(zhí)行方法
*/
void execute();
}
命令執(zhí)行者如下:
/**
* 命令接收者
*/
public class Dog {
public void eat(){
System.out.println("小狗吃飯");
}
public void play(){
System.out.println("小狗玩耍");
}
}
吃飯命令類(lèi)如下:
/**
* 吃飯命令類(lèi)
*/
public class EatCommand implements Command{
private Dog dog;
public EatCommand(Dog dog) {
this.dog = dog;
}
@Override
public void execute() {
dog.eat();
}
}
玩耍命令類(lèi)如下:
/**
* 玩耍命令類(lèi)
*/
public class PlayCommand implements Command{
private Dog dog;
public PlayCommand(Dog dog) {
this.dog = dog;
}
@Override
public void execute() {
dog.play();
}
}
命令發(fā)起者如下:
/**
* 命令發(fā)起者
*/
public class Human {
private Command command;
public void setCommand(Command command) {
this.command = command;
}
public void call(){
command.execute();
}
}
測(cè)試類(lèi)如下:
public class CommandTest {
public static void main(String[] args) {
Dog dog = new Dog();
EatCommand eatCommand = new EatCommand(dog);
PlayCommand playCommand = new PlayCommand(dog);
Human human = new Human();
human.setCommand(eatCommand);
human.call();
human.setCommand(playCommand);
human.call();
}
}
運(yùn)行結(jié)果如下:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-823580.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-823580.html
到了這里,關(guān)于設(shè)計(jì)模式—行為型模式之命令模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!