首页 > 其他分享 >设计模式-命令模式

设计模式-命令模式

时间:2024-06-19 20:45:59浏览次数:15  
标签:excute gPlayer void 模式 命令 IAction action 设计模式 public

命令模式

命令模式是对命令的封装,每一个命令都是一个操作:请求的一方发出请求要求执行一个操作;接收的一方收到请求,并执行操作。命令模式解耦了请求方与接收方,请求方只需要请求执行命令,不用关心命令时怎样被接收,怎样被操作以及是否被执行等。命令模式属于行为型模式。

角色:
  • 接收者角色(Receiver):负责具体实施或执行一个请求。
  • 命令角色(Command):定义需要执行的所有命令行为。
  • 具体命令角色(ConcreteCommand):该类内部维护一个接收者(Invoker),在其execute()方法中调用Invoker的相关方法。
  • 请求者角色(Invoker):接收客户端的命令,并执行命令。

command角色就是作为Receiver与Invoker的中间件,解耦了彼此。

举例:播放器,具有播放功能,拖动进度条功能,停止播放器功能,暂停功能。

接收者角色,播放器内核类:

package com.jdwa.command;

public class GPlayer {
    public void play(){
        System.out.println("正常播放。。。");
    }

    public void speed(){
        System.out.println("拖动进度条。。。");
    }

    public void stop(){
        System.out.println("停止播放。。。");
    }

    public void pause(){
        System.out.println("暂停播放。。。");
    }

}

命令角色:

package com.jdwa.command;

public interface IAction {
    void excute();
}

具体命令:

package com.jdwa.command;

public class PlayAction implements IAction{
    
    private GPlayer gPlayer;
    
    public PlayAction(GPlayer gPlayer){
        this.gPlayer = gPlayer;
    }
    
    @Override
    public void excute() {
        gPlayer.play();
    }
}
package com.jdwa.command;

public class SpeedAction implements IAction {

    private GPlayer gPlayer;

    public SpeedAction(GPlayer gPlayer) {
        this.gPlayer = gPlayer;
    }

    @Override
    public void excute() {
        gPlayer.speed();
    }
}
package com.jdwa.command;

public class StopAction implements IAction {

    private GPlayer gPlayer;

    public StopAction(GPlayer gPlayer) {
        this.gPlayer = gPlayer;
    }

    @Override
    public void excute() {
        gPlayer.stop();
    }
}
package com.jdwa.command;

public class PauseAction implements IAction {
    private GPlayer gPlayer;

    public PauseAction(GPlayer gPlayer) {
        this.gPlayer = gPlayer;
    }

    @Override
    public void excute() {
        gPlayer.pause();
    }
}

请求者角色,控制条

package com.jdwa.command;

import java.util.ArrayList;
import java.util.List;

public class Controller {
    private List<IAction> actions = new ArrayList<>();

    public void addAction(IAction action){
        actions.add(action);
    }
    
    public void excute(IAction action){
        action.excute();
    }
    
    public void excutes(){
        for (IAction action:actions){
            action.excute();
        }
        actions.clear();
    }
}

测试:

package com.jdwa.command;

import java.util.ArrayList;
import java.util.List;

public class Controller {
    private List<IAction> actions = new ArrayList<>();

    public void addAction(IAction action){
        actions.add(action);
    }
    
    public void excute(IAction action){
        action.excute();
    }
    
    public void excutes(){
        for (IAction action:actions){
            action.excute();
        }
        actions.clear();
    }
}

结果:

正常播放。。。
====组合功能=====
拖动进度条。。。
暂停播放。。。
欢迎大家留言,以便于后面的人更快解决问题!另外亦欢迎大家可以关注我的微信公众号,方便利用零碎时间互相交流。共勉!

标签:excute,gPlayer,void,模式,命令,IAction,action,设计模式,public
From: https://www.cnblogs.com/caozz/p/18257333/command

相关文章

  • 设计模式-状态模式
    状态模式状态模式也成为状态机模式,是允许对象在内部状态发生改变时改变它的行为。对象看起来好像改变了它的类,属于行为型模式。角色:上下文角色(Context):定义客户端需要的接口,内部维护一个当前状态实例,并负责具体状态的切换。抽象状态角色(State):定义该状态下的行为,可以有一个或多......
  • 设计模式-迭代器模式
    迭代器模式迭代器模式,又称为游标模式,它提供一种顺序访问集合/容器对象元素的方法,而又无需暴漏集合内部表示。迭代器模式可以为不同的容器提供一致的遍历行为,而不用关心容器内容元素组成结构,属于行为型模式。角色:抽象迭代器Iterator:负责定义访问和遍历元素的接口具体迭代器Con......
  • 整理好了!2024年最常见 20 道设计模式面试题(五)
    上一篇地址:整理好了!2024年最常见20道设计模式面试题(四)-CSDN博客九、什么是命令模式?它如何帮助实现解耦?命令模式(CommandPattern)是一种行为设计模式,它将一个请求或操作封装为一个对象。这种模式的主要目的是将发起请求的对象与执行请求的对象解耦,从而让不同的请求、队列或者......
  • k8s命令
    k8s组成kubectl//客户端命令行工具,系统操作入口kube-apiserver//以RESTAPI服务提供接口,作为系统的控制入口kube-controller-manager//执行整个系统的后台任务,包括节点状况状态,Pod个数,Pods和Service的关联等kube-scheduler//负责节点资源管理,接受来自kube-apiserver创......
  • 虚拟化virsh基础命令
    virsh是一个用于管理和监控虚拟机的命令行工具,提供了丰富的命令来执行各种操作。以下是一些常用的virsh命令及其功能:查看版本与帮助:virsh-version:查看virsh的版本信息12。virsh--help:查看virsh命令的帮助信息12。查看虚拟机:virshlist:显示当前正在运行的虚拟机1234......
  • 链动2+1营销策略 分销裂变商业模式 干货解析
    链动2+1是一个集团队搭设、快速提升产品销量,与消费者做到合作共赢的一个商业模式让用户在享受购物折扣的同时,也能获得相对收益,同时公司也能达到产品快速销售这样的一个目的,而链动2+1也是目前速度最快最有效的裂变模式,留客率非常高。模式框架内只有两个身份:代理、老板1.成......
  • 《产流模式的发现与发展》-芮孝芳-2013年1月发表于期刊<水利水电科技进展>
    摘要:回顾了产流理论的起源,指出Horton产流理论、Kohler与Linsley的5变量合轴相关图形式的降雨径流相关图,以及Dunne通过实验对Horton产流理论的拓展,奠定了产流理论和流域产流量计算方法的基础。总结了中国自20世纪50年代以来在这一领域的主要实践和理论探索,指......
  • 解决 执行 jar 命令 控制台乱码
    Springboot项目,编码为utf8打包后,为了在控制台运行时不乱码,需要在控制台中依次执行以下命令:第一步:chcp65001第二步:java-jar-Dfile.encoding=utf-8你的.jar......
  • 多线程设计模式之Worker Thread模式
    以前用C/C++写进程池,要么一下子fork最大进程数,要么来一个任务fork一个进程。多线程也可以这样设计,并总结这种模式为WorkerThread模式。类图如下:具体实现参考如下代码(一次性开启足够多的线程):1)Request......
  • mumu模拟器 adb shell 登录后执行命令 Inappropriate ioctl for device
    前言全局说明mumu模拟器adbshell登录后执行命令Inappropriateioctlfordevice一、说明二、问题执行任何命令,都提示:Inappropriateioctlfordevice三、解决方法方法一:执行过sudo或su重新登录方法二:退出,执行adbroot后再执行adbshell登录四、......