知识大全 java设计模式之Command(菜单命令)

Posted 命令

篇首语:人之所以有一张嘴,而有两只耳朵,原因是听的要比说的多一倍。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 java设计模式之Command(菜单命令)相关的知识,希望对你有一定的参考价值。

java设计模式之Command(菜单命令)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  Command模式是最让我疑惑的一个模式 我在阅读了很多代码后 才感觉隐约掌握其大概原理 我认为理解设计模式最主要是掌握起原理构造 这样才对自己实际编程有指导作用 Command模式实际上不是个很具体 规定很多的模式 正是这个灵活性 让人有些confuse      Command定义  不少Command模式的代码都是针对图形界面的 它实际就是菜单命令 我们在一个下拉菜单选择一个命令时 然后会执行一些动作     将这些命令封装成在一个类中 然后用户(调用者)再对这个类进行操作 这就是Command模式 换句话说 本来用户(调用者)是直接调用这些命令的 如菜单上打开文档(调用者) 就直接指向打开文档的代码 使用Command模式 就是在这两者之间增加一个中间者 将这种直接关系拗断 同时两者之间都隔离 基本没有关系了     显然这样做的好处是符合封装的特性 降低耦合度 Command是将对行为进行封装的典型模式 Factory是将创建进行封装的模式   从Command模式 我也发现设计模式一个 通病 :好象喜欢将简单的问题复杂化 喜欢在不同类中增加第三者 当然这样做有利于代码的健壮性 可维护性 还有复用性      如何使用?  具体的Command模式代码各式各样 因为如何封装命令 不同系统 有不同的做法 下面事例是将命令封装在一个Collection的List中 任何对象一旦加入List中 实际上装入了一个封闭的黑盒中 对象的特性消失了 只有取出时 才有可能模糊的分辨出:    典型的Command模式需要有一个接口 接口中有一个统一的方法 这就是 将命令/请求封装为对象 :  public interface Command     public abstract void execute ( );       具体不同命令/请求代码是实现接口Command 下面有三个具体命令  public class Engineer implements Command       public void execute( )       //do Engineer s mand         public class Programmer implements Command       public void execute( )       //do programmer s mand          public class Politician implements Command       public void execute( )       //do Politician s mand           按照通常做法 我们就可以直接调用这三个Command 但是使用Command模式 我们要将他们封装起来 扔到黑盒子List里去:    public class producer    public static List produceRequests()       List queue = new ArrayList();      queue add( new DomesticEngineer() );      queue add( new Politician() );      queue add( new Programmer() );      return queue;              这三个命令进入List中后 已经失去了其外表特征 以后再取出 也可能无法分辨出谁是Engineer 谁是Programmer了 看下面如何调用Command模式:    [code]public class TestCommand     public static void main(String[] args)             List queue = Producer produceRequests();      for (Iterator it = erator(); it hasNext(); )          //取出List中东东 其他特征都不能确定 只能保证一个特征是 %正确           // 他们至少是接口Command的 儿子 所以强制转换类型为接口Command            ((Command)it next()) execute();           [/code]     由此可见 调用者基本只和接口打交道 不合具体实现交互 这也体现了一个原则 面向接口编程 这样 以后增加第四个具体命令时 就不必修改调用者TestCommand中的代码了     理解了上面的代码的核心原理 在使用中 就应该各人有自己方法了 特别是在如何分离调用者和具体命令上 有很多实现方法 上面的代码是使用 从List过一遍 的做法 这种做法只是为了演示     使用Command模式的一个好理由还因为它能实现Undo功能 每个具体命令都可以记住它刚刚执行的动作 并且在需要时恢复 cha138/Article/program/Java/gj/201311/27499

相关参考

知识大全 Java设计模式-----Command模式

Java设计模式-----Command模式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  源自

知识大全 设计模式分解java(6)

  /***/  行为模式Command  Command模式是最让我疑惑的一个模式我在阅读了很多代码后  才感觉隐约掌握其大概原理我认为理解设计模式最主要是掌握起原理构造  这样才对自己实际编程有指

知识大全 戏说java设计模式中的命令模式

  JAVA的设计模式我想大家都知道但每个人的理解并不相同我在这里只是阐述我的观点要是与您的观点不同请您原谅和提出您的宝贵意见    为了把命令模式讲清楚我要举一个大家都影象深刻的例子以便大家的理解那

知识大全 Java执行Shell&Command

Java执行Shell&Command  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  主要使用R

知识大全 业务系统设计之系统菜单设计

  很久没写文章了前几天有几个朋友问了我很多关于业务系统(ERPDRPCRM等)设计里很多概念性东西花了很长时间给他解释最后他门还是知其然不知其所以然这对于刚跨出学校大门的朋友来说理解起确实有点枯燥这

菜单命令旁带有黑三角符号时,表示__

菜单命令旁带有黑三角符号时,表示_____。A、执行该命令打开一个对话框B、执行该命令弹出一个子菜单C、执行该命令会出现相应的“帮助”信息D、执行该命令弹出相应的工具栏答案:B解析:菜单命令旁带有黑三

知识大全 php设计模式之命令模式的应用详解

  命令模式将一个请求封装为一个对象从而你可用不同的请求对客户进行参数化对请求排队或记录请求日志以及支持可撤销操作  代码如下:<?php//命令接口interfaceCom

知识大全 JS来实现浏览器菜单的命令

JS来实现浏览器菜单的命令  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一【文件(F)】菜单中

知识大全 21在windows xp系统中菜单命令后带有省略号,表示执行该命令后会出现( )A程序窗口B菜单栏C对话框D文档窗

21在windowsxp系统中菜单命令后带有省略号,表示执行该命令后会出现()A程序窗口B菜单栏C对话框D文档窗  以下文字资料是由(本站网www.cha138.com)

知识大全 项目重构之命令模式

  项目中有个业务处理类大小K代码行看此类差点雷死我如今如要增加业务逻辑大约个吧此类如果随着项目工程的二期三期如次添加逻辑迟早有一天大小达到M噢mygod细心研读前人的工作总结发现其中有点可改造的蛛丝