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();
        }
    }
  • 相关阅读:
    VS2010/MFC编程入门之二(利用MFC向导生成单文档应用程序框架)转
    转载 获取管理员权限
    Linux端图形处理工具ImageMagick在Centos上的安装
    JQUERY 的AJAX只执行一次问题
    ASP.NET项目常见错误信息:HRESULT:0x800736B1
    存储过程(我们简称SP)的编写和优化
    sql server中扩展存储过程大全
    Range对象基本操作应用示例(2)
    让IIS支持DZ和PW的伪静态方法
    js日期时间函数(经典+完善+实用)
  • 原文地址:https://www.cnblogs.com/MalcolmMeng/p/8780284.html
Copyright © 2011-2022 走看看