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

    参考博客:https://www.cnblogs.com/java-my-life/archive/2012/06/01/2526972.html   侵权删除

    2019-06-27 15:10:03

    什么是命令模式:一个请求或者操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。

    适用性:

    基本类图:见参考博客

    命令模式的本质: 1、将行为(接受者的行为)封装为对象(Command对象),使得我们可以通过对该对象的操作而实现对行为的操作。2、通过Command类引入间接性

    命令模式的基本成员:

      抽象接收者: 将多个具体接受者抽象

      具体接受者:实际执行行为的对象

      抽象命令:多种命名的抽象

      具体命令:命令对象,成员有接受者的引用和执行命令的方法。

      命令请求者:发出请求的对象,成员有命令对象和发出命令请求的方法。

      客户端:装配命令和命令请求者

    命令模式的基本代码:

    /**
     * @InterfaceName Command
     * @Author wangyudi
     * @Date 2019/6/27 14:51
     * @Version 1.0
     * @Description 抽象命令类
     */
    public interface Command {
        public void execute();
    }
    
    
    /**
     * @ClassName CommandTurnOn
     * @Author wangyudi
     * @Date 2019/6/27 14:52
     * @Version 1.0
     * @Description  具体命令类
     */
    public class CommandTurnOn implements Command {
        //传入具体的接受者,实际的执行者
        private Light light;
        public CommandTurnOn(Light light){
            this.light = light;
        }
    
        @Override
        public void execute() {
            light.TurnOn();
        }
    }
    
    
    /**
     * @ClassName CommandTurnDown
     * @Author wangyudi
     * @Date 2019/6/27 14:52
     * @Version 1.0
     * @Description  具体命令类
     */
    public class CommandTurnDown implements Command {
        //传入具体的接受者,实际的执行者
        private Light light;
        public CommandTurnDown(Light light){
            this.light = light;
        }
    
        @Override
        public void execute() {
            light.TurnDown();
        }
    }
    /**
     * @ClassName Light
     * @Author wangyudi
     * @Date 2019/6/27 14:53
     * @Version 1.0
     * @Description 接受者
     */
    public class Light {
        public void TurnOn(){
            System.out.println("Light turn on");
        }
        public void TurnDown(){
            System.out.println("Light turn off");
        }
    }
    import java.lang.reflect.Array;
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * @ClassName Switch
     * @Author wangyudi
     * @Date 2019/6/27 14:57
     * @Version 1.0
     * @Description 命令请求者
     */
    public class Switch {
        private Command commandOn;
        private Command commandDown;
    
        private ArrayList<Command> commands;
    
        public Switch(Command commandOn, Command commandDown) {
            this.commandOn = commandOn;
            this.commandDown = commandDown;
            commands = new ArrayList<Command>();
        }
        public void add(Command command){
            commands.add(command);
        }
    
        public void executeCommands(){
            for(Command e :commands)
                e.execute();
        }
    
        public void turnOn(){
            commandOn.execute();
        }
        public void turnDown(){
            commandDown.execute();
        }
    }
    /**
     * @ClassName TestCase
     * @Author wangyudi
     * @Date 2019/6/27 15:01
     * @Version 1.0
     * @Description 测试用例
     */
    public class TestCase {
        public static void main(String[] args) {
            Light light = new Light();
            CommandTurnDown commandTurnDown = new CommandTurnDown(light);
            CommandTurnOn commandTurnOn = new CommandTurnOn(light);
            Switch aSwitch = new Switch(commandTurnDown, commandTurnOn);
    
            aSwitch.turnDown(); //实例化一个命令,并执行(可以写成  aSwitch.turnDown(new CommandTurnDown(light));
            aSwitch.turnOn();
            System.out.println("=================================================");
            aSwitch.add(new CommandTurnOn(light));  //实例化一个命令,并将该命令对象放入队列中
            aSwitch.add(new CommandTurnDown(light));
            aSwitch.add(new CommandTurnOn(light));
            aSwitch.executeCommands(); //执行队列中的所有命令
    
        }
    }
    
    //结果
    Light turn on
    Light turn off
    =================================================
    Light turn on
    Light turn off
    Light turn on
  • 相关阅读:
    MyBatis学习总结(一)——MyBatis快速入门
    Maven学习总结(五)——聚合与继承
    Maven学习总结(四)——Maven核心概念
    Maven学习总结(三)——使用Maven构建项目
    Maven学习总结(二)——Maven项目构建过程练习
    python登陆github
    反爬虫
    urllib url解析学习
    python3使用urllib获取set-cookies
    python数据存储技巧
  • 原文地址:https://www.cnblogs.com/youzoulalala/p/11097238.html
Copyright © 2011-2022 走看看