命令模式:首先我们要知道命令模式的基本定义:来自客户端的请求传入一个对象,从而使你可用不同的请求对客户进行参数化。用于“行为请求者”与“行为实现者”解耦,可实现二者之间的松耦合,以便适应变化。分离变化与不变的因素。一般可以实现命令的执行和撤销操作。

他的基本目的:能够实现请求者的请求行为和实际的执行者的执行行为,两者相互独立,松耦合,非常适合多个命令的执行实现的扩展操作。

使用命令模式基本的优势如下:

1,大大的降低了对象之间的耦合,使得client 和 ivoker之间相互独立。

2,新的命令,可以很容易的添加扩展到系统中,而基本不用影响原来的命令的实现操作。

3,可以十分容易的设计实现一个组合命令,譬如,遥控器上的多个按钮的组合命令。

4,能够实现,调用同一个方法,却可以实现执行不同的操作,取决于命令对象的参数化。

下面用基本的小例子来简单实现下java的命令模式:

基本步骤:

1、创建命令接口,接口中包含excute方法,便于所有的命令对象实现统一的操作。

2、创建实际的命令对象,实现命令接口,实现excute方法。

3、创建接受者,实际动作的操作执行者。

4、创建client客户端,注入命令对象,根据实际注入的命令对象,执行命令方法。

首先,建立Command接口:

  1. public interface Command {
  2. /**
  3. *
  4. */
  5. void excute();
  6. }

然后建立命令对象:开灯的命令,包含有电灯的实体引用。

  1. public class LightOnCommand implements Command {
  2.  
  3. private Light light;
  4.  
  5. public LightOnCommand(Light light) {
  6. this.light = light;
  7. }
  8.  
  9. @Override
  10. public void excute() {
  11. light.turnOn();
  12. }
  13.  
  14. }

紧接着,建立light对象,接收者,电灯对象,包含有开灯的实际动作。

  1. public class LightOnCommand implements Command {
  2.  
  3. private Light light;
  4.  
  5. public LightOnCommand(Light light) {
  6. this.light = light;
  7. }
  8.  
  9. @Override
  10. public void excute() {
  11. light.turnOn();
  12. }
  13.  
  14. }

最后,简单,编写client的遥控器对象,测试的main方法也包含其中,简单测试命令模式的正常实现:

注入命令对象的接口引用,实际的注入,要看实际注入的实现类,本测试,注入的开灯的实现命令对象。

  1. public class Remote {
  2.  
  3. private Command command;
  4.  
  5. public Remote(Command command) {
  6. this.command = command;
  7. }
  8.  
  9. public void keyPress() {
  10. command.excute();
  11. }
  12.  
  13. public static void main(String[] args) {
  14. Light light = new Light();
  15. Command command = new LightOnCommand(light);
  16. new Remote(command).keyPress();
  17. }
  18.  
  19. }

测试接口,能够正常的开灯。简单的实现了遥控器的开灯命令模式。而且要增加关灯操作,也十分简单,

只要增加关灯的命令对象,在实际的命令请求时候,注入关灯的命令对象,就能简单的实现关灯操作。

java 命令对象简单学习实现:的更多相关文章

  1. Java反射机制简单学习

    java中除了基本数据类型,几乎都为对象.例如 Person p=new Person(); 这句语句表明了p是Person类的一个实例对象.但其实,Person也是一个实例对象,它是Class类的实 ...

  2. Java中StringBuffer 简单学习,LeetCode中1323题运用

    StringBuffer 学习 StringBuffer() 构造一个没有字符的字符串缓冲区,初始容量为16个字符. deleteCharAt(int index) 删除char在这个指定序列inde ...

  3. Java—System类入门学习

    第三阶段 JAVA常见对象的学习 System类 System类包含一些有用的字段和方法,他不能被实例化 //用于垃圾回收 public static void gc() //终止正在运行的java虚 ...

  4. [Java初探08]__简单学习Java类和对象

    前言 在前面的学习中,我们对面向对象的编程思想有了一个基本的了解,并且简单的了解了类和对象的定义.那么类和对象在Java语言中是如何表现的,这次,就从实际出发,学习一下一下类和对象在Java语言中的使 ...

  5. 学习 java命令

    依稀记得自己第一次编译*.java文件,第一次运行*.class文件.但是六七年过去了,现在运行java写的程序更多的是用tomcat这种web容器.最近有个小需求,写一个监控zookeeper集群的 ...

  6. Java命令学习系列(三)——Jmap

    Java命令学习系列(三)——Jmap 2015-05-16 分类:Java 阅读(479) 评论(0) Jmap jmap是JDK自带的工具软件,主要用于打印指定Java进程(或核心文件.远程调试服 ...

  7. Java命令学习系列(二)——Jstack

    Java命令学习系列(二)——Jstack 2015-04-18 分类:Java 阅读(512) 评论(0) jstack是java虚拟机自带的一种堆栈跟踪工具. 功能 jstack用于生成java虚 ...

  8. [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  9. Java命令学习系列(7):Javap(转)

    原文出处: Hollis(@Hollis_Chuang) javap是jdk自带的一个工具,可以对代码反编译,也可以查看java编译器生成的字节码. 一般情况下,很少有人使用javap对class文件 ...

随机推荐

  1. 【Unity Shaders】学习笔记——SurfaceShader(五)让纹理动起来

    [Unity Shaders]学习笔记——SurfaceShader(五)让纹理动起来 转载请注明出处:http://www.cnblogs.com/-867259206/p/5611222.html ...

  2. qemu-kvm和openvswitch安装部署-qemu-kvm和openvswitch原型环境部署和基本测试 (1)

    qemu-kvm和openvswitch安装部署 本文包含两个部分: qemu-kvm的安装部署 openvswitch的安装部署 参考文档: kvm官网:http://www.linux-kvm.o ...

  3. 慕课网-安卓工程师初养成-1-5 使用Eclipse开发Java程序

    来源: http://www.imooc.com/video/1412 eclipse --- IDE 集成开发环境(IDE)是一类软件 将程序开发环境和程序调试环境集合在一起,提高开发效率 其他ID ...

  4. 集合函数COUNT

    直接计算函数COUNT(*)的值,例如,计算pet表中猫的只数: 计算pet表中species的列的数目: 假如你想知道有多少不同种类的的宠物数目.你可以通过使用关键字DISTINCT来得到该数目: ...

  5. DownLoadFile - FileHandler

    C# 跳转新页面 判断URL文件是不是在于在. C# 指定物理目录下载文件,Response.End导致“正在中止线程”异常的问题 public class FileHandler { public ...

  6. TCP/IP详解学习笔记(7)-- 初识运输层

    作为TCP和UDP协议的学习前奏,简单的介绍一下运输层的相关内容,方便对TCP,UDP的学习. 1.概述      运输层的任务主要是负责主机中两个进程之间的通信.      运输层的基本功能: 复用 ...

  7. asp.net中如何绑定combox下拉框数据(调用存储过程)

    #region 绑定类型(商品类型.仓库名称) public void DataType_Bind(int _peoid) { DataTable dt_goodsname = new DataTab ...

  8. ionic 不同view的數據交互

    angular中通過service factory 等服務來對不同的控制器進行數據交互 ,ionic 也一樣... var app = angular.module('ionicApp', ['ion ...

  9. 【MySQL】MySQL无基础学习和入门之一:数据库基础概述和实验环境搭建

    数据库基础概述  大部分互联网公司都选择MySQL作为业务数据存储数据库,除了MySQL目前还有很多公司使用Oracle(甲骨文).SQLserver(微软).MongoDB等. 从使用成本来区分可以 ...

  10. NTP服务搭建

    1:实验环境 前提条件:虚拟机环境,windows 客户端,关闭防火墙:linux 服务器关闭防火墙,关闭selinux. Cent OS :NTP服务器 IP: 192.168.80.134  /2 ...