zoukankan      html  css  js  c++  java
  • 设计模式:命令模式(Command)

     将一个请求封装为一个对象,从而使你可用不同的请求对客户进行參数化;对请求排队或记录请求日志。以支持可撤销的操作。
    这里写图片描写叙述

    命令模式的角色
    1. client角色(Client):创建一个详细命令(ConcreteCommand)对象并确定其接收者。
    2. 命令角色(Command):声明一个给全部命令类的抽象接口。
    3. 详细命令角色(ConcreteCommand):定义一个接收者和行为之间的弱耦合;实现execute()方法,负责调用接收者的对应操作。execute()方法叫做运行方法。


    4. 请求者角色(Invoker):负责调用命令对象运行请求,相关的方法叫做行动方法。
    5. 接收者角色(Receiver):负责详细实施和运行一个请求。不论什么一个类都能够称为接收者,实施和运行请求的方法叫做行动方法。

    举个简单样例(录音机有播音Play,倒带Rewind和停止Stop功能)
    1 接收者角色

    public class AudioPlayer
    {
        public void play()
        {
            System.out.println("Play");
        }
    
        public void rewind()
        {
            System.out.println("Rewind");
        }
    
        public void stop()
        {
            System.out.println("Stop");
        }
    }

    2 抽象命令角色

    public interface Command
    {
        public void execute();
    }

    3 详细命令角色

    public class PlayCommand implements Command
    {
        private AudioPlayer myAudio;
        public PlayCommand(AudioPlayer audioPlayer)
        {
            this.myAudio = audioPlayer;
        }
        @Override
        public void execute()
        {
            myAudio.play();
        }
    }
    public class RewindCommand implements Command
    {
        private AudioPlayer myAudio;
        public RewindCommand(AudioPlayer audioPlayer)
        {
            this.myAudio = audioPlayer;
        }
        @Override
        public void execute()
        {
            this.myAudio.rewind();
        }
    }
    public class StopCommand implements Command
    {
        private AudioPlayer myAudio;
        public StopCommand(AudioPlayer audioPlayer)
        {
            this.myAudio = audioPlayer;
        }
        @Override
        public void execute()
        {
            this.myAudio.stop();
        }
    }

    4 请求这角色(由按键扮演)

    public class Keypad
    {
        private Command playCommand;
        private Command rewindCommand;
        private<
    
  • 相关阅读:
    DataContext.ExecuteQuery的两种方法调用
    记一次电脑被清空的感受
    JAVA学习<二>
    JAVA学习记录<一>
    iOS服务器数据请求"汉字编码"问题
    iOS上传图片问题
    iOS类型的转换
    iOS限制输入解决方法
    iOS10权限问题
    JS进阶学习<一>
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/7383769.html
Copyright © 2011-2022 走看看