当前位置: 首页 > news >正文

网址大全123官方网站牛商网

网址大全123官方网站,牛商网,自己做网站宣传产品,沈阳工程信息网官网1、简介 1.1、概述 在软件开发中,经常需要向某些对象发送请求(调用其中的某个或某些方法),但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个。此时,特别希望能够以一种松耦合的方式来设计软件&a…

1、简介

1.1、概述

在软件开发中,经常需要向某些对象发送请求(调用其中的某个或某些方法),但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个。此时,特别希望能够以一种松耦合的方式来设计软件,使得请求发送者与请求接收者能够消除彼此之间的耦合,让对象之间的调用关系更加灵活,可以灵活地指定请求接收者以及被请求的操作。命令模式为此类问题提供了一个较为完美的解决方案。

命令模式可以将请求发送者和接收者完全解耦。发送者与接收者之间没有直接引用关系,发送请求的对象只需要知道如何发送请求,而不必知道如何完成请求。

1.2、定义

将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式是一种对象行为型模式,其别名为动作(Action)模式或事务(Transaction)模式。

2、解析

2.1、UML类图

命令模式的核心在于引入了命令类。通过命令类来降低发送者和接收者的耦合度,请求发送者只需指定一个命令对象,再通过命令对象来调用请求接收者的处理方法,其结构如下图所示:
在这里插入图片描述
可以看出,在命令模式结构图中包含以下4个角色:

  1. Command(抽象命令类):抽象命令类一般是一个抽象类或接口,在其中声明了用于执行请求的execute()等方法,通过这些方法可以调用请求接收者的相关操作。
  2. ConcreteCommand(具体命令类):具体命令类是抽象命令类的子类,实现了在抽象命令类中声明的方法。它对应具体的接收者对象,将接收者对象的动作绑定其中。在实现execute()方法时,将调用接收者对象的相关操作(Action)。
  3. Invoker(调用者):调用者即请求发送者,它通过命令对象来执行请求。一个调用者并不需要在设计时确定其接收者,因此它只与抽象命令类之间存在关联关系。在程序运行时可以将一个具体命令对象注入其中,再调用具体命令对象的execute()方法,从而实现间接调用请求接收者的相关操作。
  4. Receiver(接收者):接收者执行与请求相关的操作,它具体实现对请求的业务处理。

2.2、代码示例

命令模式的本质是对请求进行封装。一个请求对应于一个命令,将发出命令的责任和执行命令的责任分割开。每个命令都是一个操作:请求的一方发出请求要求执行一个操作;接收的一方收到请求,并执行相应的操作。命令模式允许请求的一方和接收的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求如何被接收、操作是否被执行、何时被执行,以及是怎么被执行的。

命令模式的关键在于引入了抽象命令类。请求发送者针对抽象命令类编程,只有实现了抽象命令类的具体命令才与请求接收者相关联。在最简单的抽象命令类中只包含了一个抽象的execute()方法,每个具体命令类将一个Receiver类型的对象作为一个实例变量进行存储,从而具体指定一个请求的接收者。不同的具体命令类提供了execute()方法的不同实现,并调用不同接收者的请求处理方法。

典型的抽象命令类代码如下:

abstract class Command{public abstract void execute();
}

对于请求发送者即调用者而言,将针对抽象命令类进行编程,可以通过构造注入或者设值注入的方式在运行时传入具体命令类对象,并在业务方法中调用命令对象的execute()方法。其典型代码如下:

class Invoker{private Command command;// 构造注入public Invoker(Command command){this.commond=commond;}// 设值注入public void setCommand(Command command){this.commond=commond;}// 业务方法,用于调用命令类的execute()方法public void call(){command.execute();}
}

具体命令类继承了抽象命令类,它与请求接收者相关联,实现了在抽象命令类中声明的execute()方法,并在实现时调用接收者的请求响应方法action()。其典型代码如下:

class ConcreteCommand extends Commond{// 维持一个对请求接受者对象的引用private Receiver receiver=new Receiver();// 调用请求接受这的业务方法action()public void execute(){receiver.action();}
}

请求接收者Receiver类具体实现对请求的业务处理,它提供了action()方法,用于执行与请求相关的操作。其典型代码如下:

class Receiver{public void action(){// 具体操作}
}

3、宏命令

宏命令(Macro Command)又称为组合命令,它是组合模式和命令模式联用的产物。宏命令是一个具体命令类,它拥有一个集合属性,在该集合中包含了对其他命令对象的引用。通常宏命令不直接与请求接收者交互,而是通过它的成员来调用接收者的方法。当调用宏命令的execute()方法时,将递归调用它所包含的每个成员命令的execute()方法。一个宏命令的成员可以是简单命令,还可以继续是宏命令。执行一个宏命令将触发多个具体命令的执行,从而实现对命令的批处理。其结构如下图所示:
在这里插入图片描述

4、命令模式总结

命令模式是一种使用频率非常高的设计模式,用于将请求发送者与接收者解耦。请求发送者通过命令对象来间接引用请求接收者,使得系统具有更好的灵活性和可扩展性。在基于GUI的软件开发,无论是计算机桌面应用还是移动应用中命令模式都得以广泛应用。

4.1、主要优点

  1. 降低系统的耦合度。由于请求者与接收者之间不存在直接引用,因此请求者与接收者之间实现完全解耦,相同的请求者可以对应不同的接收者。同样,相同的接收者也可以供不同的请求者使用,两者之间具有良好的独立性。
  2. 新的命令可以很容易地加入系统中。由于增加新的具体命令类不会影响到其他类,因此增加新的具体命令类很容易,无须修改原有系统源代码甚至客户类代码,满足开闭原则的要求。
  3. 可以比较容易地设计一个命令队列或宏命令(组合命令)。
  4. 为请求的撤销(Undo)和恢复(Redo)操作提供了一种设计和实现方案。

4.2、主要缺点

使用命令模式可能会导致某些系统有过多的具体命令类。因为针对每一个对请求接收者的调用操作都需要设计一个具体命令类,因此在某些系统中可能需要提供大量的具体命令类,这将影响命令模式的使用。

4.3、适用场景

  1. 系统需要将请求调用者和请求接收者解耦,使得调用者和接收者不直接交互。请求调用者无须知道接收者的存在,也无须知道接收者是谁,接收者也无须关心何时被调用。
  2. 系统需要在不同的时间指定请求、将请求排队和执行请求。一个命令对象和请求的初始调用者可以有不同的生命期。换言之,最初的请求发出者可能已经不在了,而命令对象本身仍然是活动的,可以通过该命令对象去调用请求接收者,而无须关心请求调用者的存在性,可以通过请求日志文件等机制来具体实现。
  3. 系统需要支持命令的撤销(Undo)操作和恢复(Redo)操作。
  4. 系统需要将一组操作组合在一起形成宏命令。
http://www.yayakq.cn/news/588589/

相关文章:

  • 天津做做网站网站的搜索引擎方案
  • 汽车销售服务东莞网站建设有了域名怎样做淘客网站
  • 做电池网站的引导页wordpress wrapper
  • 网站icp备案查询截图wordpress留言功能
  • h5响应式音乐网站模板厦门网络推广外包多少钱
  • 湖北正规网站建设质量保障河北网络公司排名
  • wap网站开发需要多少钱对文化传播网站建设的建议
  • 建站公司排名 软通搭建网站需要程序
  • 新手制作网站马格南摄影网站
  • 网站建设维诺之星如何做网站动态图标
  • 帝国cms网站搬家教程长沙本土网站建设公司
  • 你们需要网站建设网站建设思维导图模版
  • 二手车网站设计获取网站全站代码
  • 仪征网站建设网站安装代码
  • 那个网站是响应式的网站建设技术难点
  • 管理手机网站首页域名是干嘛的
  • 如何更换网站服务商做学校网站素材图片大全
  • 毕业设计 旅游网站建设肇庆seo按天计费
  • 网站开发流程 百度文库做行业网站广告能赚多少钱
  • 自己动手做导航网站潮州市网站建设公司
  • 手机网站建设的教程视频教程新浪短链接在线生成
  • 网络网站推广首荐乐云seo跳转网站正在建设中
  • 公司要做网站域名注册长沙有限公司
  • 专注旅游网站网站开发免费建站体验
  • 网站架构设计师面试技巧湖南建设网招标公告
  • 网站评论做外链制作一个简单网页html
  • 怎么分析网站建设的优缺点wordpress 文件下载功能
  • 做设计的分析图网站有哪些网站制作找私人多少钱
  • 山东省建设部网站创建一个网站的条件有哪些
  • php 网站 发布盗版小说网站建设