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

    简介

    命令模式是对命令的封装,每一个命令都是一个操作,请求方发出请求要求执行操作,接收方收到请求,并执行操作。命令模式解耦了请求方和接收方,请求方需要请求执行命令,不用关心命令怎么接口,怎样被操作,是否被执行等。属于行为型设计模式。

    使用场景:

    • 现实语义中具备“命令”操作
    • 请求调用者和接收者需要解耦,使得调用者和接收者不直接交互。
    • 需要抽象出等待执行的行为,比如撤销和恢复操作。
    • 需要支持命令宏(命令组合操作)。

    命令模式实现

    现在我们需要开发一个播放器,有播放功能,停止功能,拖动进度条功能。我们在操作播放器的时候并不是直接调用播放器的方法,而是通过一个控制条去传达指令给播放器内核,具体传达什么指令,被封装成一个一个按钮,每一个按钮就是对一条。命令的封装。

    创建播放器内核核心类:

    public class GPlayer {
        public void play(){
            System.out.println("播放功能");
        }
    
        public void stop(){
            System.out.println("停止功能");
        }
    
        public void speed(){
            System.out.println("拖动进度条");
        }
    }
    

    创建命令接口:

    public interface IAction {
        void execute();
    }
    

    实现命令接口

    public class PlayAction implements IAction{
    
        private GPlayer gPlayer;
    
        public PlayAction(GPlayer gPlayer) {
            this.gPlayer = gPlayer;
        }
    
        @Override
        public void execute() {
            gPlayer.play();
        }
    }
    
    public class SpeedAction implements IAction{
    
        private GPlayer gPlayer;
    
        public SpeedAction(GPlayer gPlayer) {
            this.gPlayer = gPlayer;
        }
    
        @Override
        public void execute() {
            gPlayer.speed();
        }
    }
    
    public class StopAction implements IAction{
    
        private GPlayer gPlayer;
    
        public StopAction(GPlayer gPlayer) {
            this.gPlayer = gPlayer;
        }
    
        @Override
        public void execute() {
            gPlayer.stop();
        }
    }
    

    创建控制条Controller

    public class Controller {
    
        public void execute(IAction action){
            action.execute();
        }
    }
    

    测试:

    public class Test {
        public static void main(String[] args) {
            GPlayer gPlayer = new GPlayer();
    
            Controller controller = new Controller();
    
            controller.execute(new PlayAction(gPlayer));
            controller.execute(new SpeedAction(gPlayer));
            controller.execute(new StopAction(gPlayer));
        }
    }
    

    image-20210114210623781

    uml类图:

    image-20210114210723097

  • 相关阅读:
    生活娱乐 工业机器人代替工人装配鼠标键盘
    生活娱乐 工商银行如何查询开户行
    生活娱乐 格力空气能热水器怎么样
    生活娱乐 岛城将开首家机器人餐厅
    生活娱乐 毕业生论文查重技巧
    Windows 老是弹出要自动拨号连接怎么办
    Office 针式打印机如何调节边距
    Office 如何打印彩色照片能取得较好的效果
    西游释厄传如何设置简化出招表
    [ES2019] Use JavaScript ES2019 flatMap to Map and Filter an Array
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/14279407.html
Copyright © 2011-2022 走看看