美文网首页
命令模式

命令模式

作者: 小菜鸟学Android | 来源:发表于2018-12-07 23:12 被阅读0次

命令模式

以下内容来自百度百科。

在一般情况下,“请求者”知道“行为实现者”的逻辑以及步骤,也就是直接通过请求者来对实现者操作。命令模式让两者之间实现松耦合。

请求者不知道实现者的具体操作,只按一定的命令便可实现具体操作者的功能。

生活实例

在我们的现实生活中,电视机和遥控器就相当于这个模式。遥控器上的按钮就是我们的请求者, 电视机是我们的“实现者”。当然,使用遥控器的人就是我们的客户端。

模式结构

命令模式包含如下角色:

Command: 抽象命令类

抽象出一个命令的执行类

publicinterfaceBaseCommand{

/**

* 执行命令

*/

voidexecute();

}

ConcreteCommand: 具体命令类

不同的命令类,具体实现是重写抽象命令类的方法

电视开关机命令

publicclassTVOnOffCommandimplementsBaseCommand{

privateTV tv;

publicTVOnOffCommand(TV tv){

this.tv = tv;

}

@Override

publicvoidexecute(){

tv.onOff();

}

}

频道加命令

publicclassChannelUpCommandimplementsBaseCommand{

privateTV tv;

publicChannelUpCommand(TV tv){

this.tv = tv;

}

@Override

publicvoidexecute(){

tv.channelUp();

}

}

频道减命令

publicclassChannelDownCommandimplementsBaseCommand{

privateTV tv;

publicChannelDownCommand(TV tv){

this.tv = tv;

}

@Override

publicvoidexecute(){

tv.channelDown();

}

}

Invoker: 调用者

通过调用者来执行这个命令

publicclassInvoker{

privateHashMap commands;

privateBaseCommand command;

publicInvoker(){

commands =newHashMap<>();

}

/**

* 根据位置把命令存起来

* @param position

* @param command

*/

publicvoidsetCommands(intposition, BaseCommand command){

commands.put(position, command);

}

/**

* 根据位置去发送命令

* @param position

*/

publicvoidexecuteCommand(intposition){

command = commands.get(position);

if(command !=null) {

command.execute();

}

}

}

Receiver: 接收者

实现者本身

publicclassTV{

publicTV(){ }

publicvoidchannelUp(){

System.out.println("电视机频道加");

}

publicvoidchannelDown(){

System.out.println("电视机频道减");

}

publicvoidonOff(){

System.out.println("电视机开关机");

}

}

Client:客户端

我们的程序入口,相当于一个测试类

publicclassMainActivityextendsAppCompatActivityimplementsView.OnClickListener{

privateButton btPerform;

privateButton btUp;

privateButton btDown;

privateInvoker invoker;

@Override

protectedvoidonCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initView();

initData();

}

privatevoidinitView(){

btPerform = findViewById(R.id.bt_perform);

btPerform.setOnClickListener(this);

btDown = findViewById(R.id.bt_down);

btDown.setOnClickListener(this);

btUp = findViewById(R.id.bt_up);

btUp.setOnClickListener(this);

//context = new Context(5);

}

privatevoidinitData(){

TV tv =newTV();

BaseCommand onOffCommand =newTVOnOffCommand(tv);

BaseCommand channelDownCommand =newChannelDownCommand(tv);

BaseCommand channelUpCommand =newChannelUpCommand(tv);

invoker =newInvoker();

invoker.setCommands(1, onOffCommand);

invoker.setCommands(2, channelUpCommand);

invoker.setCommands(3, channelDownCommand);

}

@Override

publicvoidonClick(View v){

switch(v.getId()) {

caseR.id.bt_perform: {

invoker.executeCommand(1);

break;

}

caseR.id.bt_up: {

invoker.executeCommand(2);

break;

}

caseR.id.bt_down: {

invoker.executeCommand(3);

break;

}

default:

break;

}

}

}

测试结果以及总结

通过命令模式,就把执行和“电视”分离出来,执行者就不直接操作“电视”了。

相关文章

  • 12.vim的使用技巧

    命令模式 、命令行模式、编辑模式: INSERT 首次进入文件: 命令模式输入: 表示 命令行模式出现...

  • 五、Linux vim编辑器

    vim编辑器三种模式:命令模式、编辑模式、末行模式 1.命令模式: vim进入文件后就是命令模式 1.1 命令模式...

  • 终端操作文件

    VIM 模式切换从命令模式->编辑模式:i,a,o,I,A,O从编辑模式->命令模式:ESC从命令模式->末行模式...

  • vim 操作 && Mac 配置本地Apache

    一、vim 的基本命令操作 vim 的模式: 编辑模式 ,命令模式 编辑模式: 命令模式:可以通过命令 最重要的命...

  • Vim高效编辑器

    Vim程序员高效编辑器 命令模式,输入模式,底线命令模式 默认进入vim就是命令模式,输入i变为输入模式 命令模式...

  • Command模式

    命令模式(Command) 命令模式属于对象的行为模式。命令模式又称为行动(Action)模式或交易(Tran...

  • 设计模式详解——命令模式

    本篇文章介绍一种设计模式——命令模式。本篇文章内容参考《JAVA与模式》之命令模式。 一、命令模式的概念 命令模式...

  • Vi编辑器

    命令模式 文本输入模式 末行模式。 插入模式 移动光标: 删除命令: 撤销命令: 重复命令 文本行移动: 复制粘贴...

  • JavaScript设计模式七(命令模式)

    JavaScript设计模式七(命令模式) 定义: 命令模式是最简单和优雅的模式之一,命令模式中的命令指的是一个执...

  • Cisco 路由器配置命令大全(二)

    (1)模式转换命令 用户模式----特权模式,使用命令"enable"特权模式----全局配置模式,使用命令"co...

网友评论

      本文标题:命令模式

      本文链接:https://www.haomeiwen.com/subject/mykfhqtx.html