zoukankan      html  css  js  c++  java
  • 7命令模式

    图片来自head first 设计模式,仅供学习之用

     命令模式是对对象的操作进行封装,封装的方式就是定义抽象的命令接口,在接口中定义一组操作。具体的命令类要持有命令的接受者。此外命令还需要有一个容器来存放。不过对这个容器的作用我很是疑惑,我感觉没有这个invoker好像也没什么问题= =唯一的解释就是invoker可以存放不同种类的的命令,通过多态的方式。

    简单的贴一下head first上的代码:

    package com.company;
    
    interface Command{
        public void excecute();
    }
    class Light{
        private String name;
        boolean isOn=false;
        public void open(){
            if (isOn ) {
                System.out.println("light is already on");
            }
            else{
                System.out.println("light is opened");
                isOn=true;
            }
        }
        public void close(){
            if (isOn ) {
                System.out.println("light is closed");
                isOn=false;
            }
            else System.out.println("light is already closed");
    
        }
    }
    class LightOnCommand implements Command{
        private Light light;
        public LightOnCommand(Light light){
            this.light=light;
        }
        @Override
        public void excecute() {
            light.open();
        }
    }
    class LightCloseCommand implements Command{
        private Light light;
        public LightCloseCommand(Light light){
            this.light=light;
        }
    
        @Override
        public void excecute() {
            light.close();
        }
    }
    class SimpleRemoteControl{
        private Command command;
        public SimpleRemoteControl(){
        }
        public void setCommand(Command command){
            this.command=command;
        }
        public void buttonPressed(){
            command.excecute();
        }
    }
    class CommandTestDrive{
        public static void test(){
            SimpleRemoteControl simpleRemoteControl=new SimpleRemoteControl();
            Light light=new Light();
            LightOnCommand lightOnCommand=new LightOnCommand(light);
            LightCloseCommand lightCloseCommand=new LightCloseCommand(light);
            simpleRemoteControl.setCommand(lightOnCommand);
            simpleRemoteControl.buttonPressed();
            simpleRemoteControl.setCommand(lightCloseCommand);
            simpleRemoteControl.buttonPressed();
        }
    }
  • 相关阅读:
    SED{shell三剑客awk,sed,grep}
    AWK{shell三剑客awk,sed,grep}
    面试汇总
    shell脚本
    redis主从
    haproxy
    grafana
    zabbix
    lnmp
    shell 基础
  • 原文地址:https://www.cnblogs.com/MalcolmMeng/p/8780284.html
Copyright © 2011-2022 走看看