博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式7-命令模式
阅读量:7218 次
发布时间:2019-06-29

本文共 3295 字,大约阅读时间需要 10 分钟。

package DesignPattern;public class CommondPattern {    //命令模式的要点:分离发令者,命令,与接令者    //将接令者对外暴露的接口包装成为一致的命令    //发令者拥有命令的实例,发令者调用命令实例,命令实例调用接令者接口从而实现命令动作    //优点:接令者的暴露在外的接口被一致化,增加命令功能,只需要继承Command接口,实现自定义功能,    // 完成了命令双向的解耦    //常见的命令模式:工作队列,日志请求    public static class Light{        private String name;        Light(String name){            this.name=name;        }        void on(){            System.out.println(name+" is on!");        }        void off(){            System.out.println(name+" is off!");        }    }    public interface Command{        void execute();        void undo();    }    public static class LightOnCommand implements Command{        Light light;        LightOnCommand(Light light){            this.light=light;        }        @Override        public void execute() {            light.on();        }        @Override        public void undo() {            light.off();        }    }    public static class LightOffCommand implements Command{        Light light;        LightOffCommand(Light light){            this.light=light;        }        @Override        public void execute() {            light.off();        }        @Override        public void undo() {            light.on();        }    }    //甚至可以实现宏命令    public static class MacroCommand implements Command{        Command[] commands;        MacroCommand(Command[] commands){            this.commands = commands;        }        @Override        public void execute() {            for(Command command:commands){                command.execute();            }        }        @Override        public void undo() {        }    }    public static class SimpleRemoteControl{        Command slot;        SimpleRemoteControl(){}        public void setCommand(Command slot) {            this.slot = slot;        }        public void buttonWasPressed(){            slot.execute();        }    }    public static class noCommand implements Command{        @Override        public void execute() {}        @Override        public void undo() {}    }    public static class RemoteControl{        Command[] onCommands;        Command[] offCommands;        Command undoCommand;        public RemoteControl(){            onCommands= new Command[7];            offCommands= new Command[7];            Command noCommand = new noCommand();            for(int i=0;i<7;i++){                onCommands[i]=noCommand;                offCommands[i]= noCommand;            }            undoCommand=noCommand;        }        /*        @Param slot 插口         */        public void setCommands(int slot,Command onCommand,Command offCommand){            onCommands[slot]=onCommand;            offCommands[slot]=offCommand;        }        public void onButtonWasPushed(int slot){            onCommands[slot].execute();            undoCommand=onCommands[slot];        }        public void offButtonWasPushed(int slot){            offCommands[slot].execute();            undoCommand=offCommands[slot];        }        public void undoButtonWasPushed(){            undoCommand.undo();        }        public String toString() {            StringBuffer stringBuffer = new StringBuffer();            stringBuffer.append("\n------Remote Control------\n");            for(int i=0;i

转载于:https://www.cnblogs.com/zhouyu0-0/p/10724380.html

你可能感兴趣的文章
[转载] 致命伴侣
查看>>
HTML5 localStorage本地存储实际应用举例
查看>>
Scala访问修饰符
查看>>
实习感悟
查看>>
产品经理网站小结
查看>>
Bootstrap 附加导航插件
查看>>
如何设置启动SMTP、POP3以及IMAP4的SSL服务端口?
查看>>
自制函数strcpy
查看>>
gSoap开发(三)——WSDL简介
查看>>
软件RAID5项目实战!!!
查看>>
Java基础学习总结(21)——数组
查看>>
js格式化日期
查看>>
定时与延时任务
查看>>
Squid 日志分析 和反向代理
查看>>
Hadoop的安装及一些基本概念解释
查看>>
大容量分区命令parted
查看>>
从输入 URL 到页面加载完成的过程中都发生了什么事情?
查看>>
实例讲解JQuery中this和$(this)区别
查看>>
centos 7 静态ip地址模板
查看>>
影响系统性能的20个瓶颈
查看>>