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

湖北响应式网站建设设计做直销去哪里找客户

湖北响应式网站建设设计,做直销去哪里找客户,怎么做好网站营销,网站建设信息表目录 什么是命令模式 命令模式的实现 命令模式角色 命令模式类图 命令模式举例 命令模式代码实现 命令模式的特点 优点 缺点 使用场景 注意事项 什么是命令模式 命令模式(Command Pattern)是一种数据驱动的设计模式,它属…

目录

什么是命令模式     

命令模式的实现

命令模式角色

命令模式类图

命令模式举例

命令模式代码实现

命令模式的特点

优点

缺点

使用场景

注意事项


什么是命令模式     

        命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。是对命令的封装,每一个命令都是一个操作,请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。

        在软件系统中,方法的请求者与方法的实现者总是存在着紧密的耦合关系,这不利于扩展和维护。如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象,实现二者之间的松耦合,变得很重要,命令模式能很好地解决这个问题。

命令模式的实现

        命令模式将请求以命令的形式包裹在对象里面,传递给调用对象,调用对象寻找匹配该命令的对象,将命令给该对象执行。其调用过程主要分为了三步:

  1. 命令被包裹在请求对象里,传递给调用对象。
  2. 调用对象查找匹配该命令(可以处理该命令)的对象,将该命令传递给匹配的对象。
  3. 该对象执行传递给它的命令。

命令模式角色

接收者角色(Receiver):该类负责具体实施或执行一个请求,真正执行命令的对象。任何类都可能成为一个接收者,只要它能够实现命令要求实现的相应功能。
命令角色(Command):定义需要执行的所有命令行为,需要执行的命令都在这里声明。
具体命令角色(ConcreteCommand):命令接口实现对象,是“虚”的实现;该类内部通常会持有接收者,并调用接收者的功能来完成命令要执行的操作。
请求者角色(Invoker):接收客户端的命令,并执行命令,要求命令对象执行请求,可以持有很多的命令对象。是客户端真正触发命令并要求命令执行相应操作的地方,相当于使用命令对象的入口。

命令模式类图

命令模式举例

        小女孩茱丽(Julia)有一个盒式录音机,此录音机有播音(Play)、倒带(Rewind)和停止(Stop)功能,录音机的键盘便是请求者(Invoker)角色;茱丽(Julia)是客户端角色,而录音机便是接收者角色。Command类扮演抽象命令角色,而PlayCommand、StopCommand和RewindCommand便是具体命令类。茱丽(Julia)不需要知道播音(play)、倒带(rewind)和停止(stop)功能是怎么具体执行的,这些命令执行的细节全都由键盘(Keypad)具体实施。茱丽(Julia)只需要在键盘上按下相应的键便可以了。

命令模式代码实现

接收者角色

package com.common.demo.pattern.command;/*** @author Evan Walker 昂焱数据: https://www.ayshuju.com* @version 1.0* @desc 接收者角色类* @date 2023/08/01 21:04:50*/
public class AudioPlayer {public void play(){System.out.println("播放...");}public void rewind(){System.out.println("倒带...");}public void stop(){System.out.println("停止...");}
}

命令角色

package com.common.demo.pattern.command;/*** @author Evan Walker 昂焱数据: https://www.ayshuju.com* @version 1.0* @desc 抽象命令角色类* @date 2023/08/01 21:04:34*/
public interface Command {/*** 执行方法*/void execute();
}

具体命令角色

package com.common.demo.pattern.command;/*** @author Evan Walker 昂焱数据: https://www.ayshuju.com* @version 1.0* @desc 具体调用者角色* @date 2023/08/01 21:07:43*/
public class ConcreteCommand implements Command {private Receiver receiver = null;/*** 构造方法*/public ConcreteCommand(Receiver receiver) {this.receiver = receiver;}@Overridepublic void execute() {//通常会转调接收者对象的相应方法,让接收者来真正执行功能receiver.action();}
}
package com.common.demo.pattern.command;/*** @author Evan Walker 昂焱数据: https://www.ayshuju.com* @version 1.0* @desc 具体调用者角色 倒带* @date 2023/08/01 21:07:43*/
public class RewindCommand implements Command {private AudioPlayer audioPlayer= null;/*** 构造方法*/public RewindCommand(AudioPlayer audioPlayer) {this.audioPlayer = audioPlayer;}@Overridepublic void execute() {//通常会转调接收者对象的相应方法,让接收者来真正执行功能audioPlayer.rewind();}
}
package com.common.demo.pattern.command;/*** @author Evan Walker 昂焱数据: https://www.ayshuju.com* @version 1.0* @desc 具体调用者角色 暂停* @date 2023/08/01 21:07:43*/
public class StopCommand implements Command {private AudioPlayer audioPlayer= null;/*** 构造方法*/public StopCommand(AudioPlayer audioPlayer) {this.audioPlayer = audioPlayer;}@Overridepublic void execute() {//通常会转调接收者对象的相应方法,让接收者来真正执行功能audioPlayer.stop();}
}

请求者角色

package com.common.demo.pattern.command;/*** @author Evan Walker  昂焱数据: https://www.ayshuju.com* @version 1.0* @desc 请求者角色 按键* @date 2023/08/01 21:09:32*/
public class Keypad {private Command playCommand;private Command rewindCommand;private Command stopCommand;public void setPlayCommand(Command playCommand) {this.playCommand = playCommand;}public void setRewindCommand(Command rewindCommand) {this.rewindCommand = rewindCommand;}public void setStopCommand(Command stopCommand) {this.stopCommand = stopCommand;}/*** 执行播放方法*/public void play(){playCommand.execute();}/*** 执行倒带方法*/public void rewind(){rewindCommand.execute();}/*** 执行播放方法*/public void stop(){stopCommand.execute();}
}

测试代码

package com.common.demo.pattern.command;/*** @author Evan Walker  昂焱数据: https://www.ayshuju.com* @version 1.0* @desc 客户端测试类 客户judia* @date 2023/08/01 21:10:30*/
public class ClientTest {public static void main(String[] args) {//创建接收者对象AudioPlayer audioPlayer = new AudioPlayer();//创建命令对象Command playCommand = new PlayCommand(audioPlayer);Command rewindCommand = new RewindCommand(audioPlayer);Command stopCommand = new StopCommand(audioPlayer);//创建请求者对象Keypad keypad = new Keypad();keypad.setPlayCommand(playCommand);keypad.setRewindCommand(rewindCommand);keypad.setStopCommand(stopCommand);//测试keypad.play();keypad.rewind();keypad.stop();keypad.play();keypad.stop();}
}

测试截图

命令模式的特点

优点

  1. 解耦性:解耦请求发送者和接收者,命令模式将请求封装成独立的命令对象,使得发送者和接收者之间解耦,从而降低了两者之间的直接依赖关系。
  2. 易扩展性:容易扩展新的命令,由于命令被封装成独立的对象,可以很容易地扩展新的命令类,而无需修改现有的代码。
  3. 动态组合性:命令模式把请求封装起来,可以动态地对它进行参数化、队列化和日志化等操作,从而使得系统更灵活。命令模式中的命令对象能够很容易地组合成复合命令,也就是宏命令,从而使系统操作更简单,功能更强大。

缺点

  1. 类膨胀:每个具体命令都需要一个独立的类,如果命令过多,可能导致类的数量剧增,增加了系统复杂性。
  2. 实现复杂:命令模式的实现可能比较复杂,涉及到许多额外的类和关联关系。
  3. 可能造成性能瓶颈:若系统中存在大量的命令对象,执行这些命令可能会对系统的性能造成影响。其命令是通过一个个对象来完成的,在执行命令时可能需要执行大量的对象,这可能会带来一定的时间开销。

使用场景

  1. 需要将请求发送者和接收者解耦的情况。
  2. 需要支持撤销和重做操作的场景。
  3. 需要将一系列操作封装成一个命令进行批处理的情况。
  4. 需要支持日志和事务等功能的情况。

注意事项

  1. 命令对象要尽量保持简单,只包含必要的信息,以减轻命令的负担和复杂度。
  2. 注意命令模式中对象间的引用关系。命令对象通常需要持有对接收者的引用,可以通过构造函数或属性注入方式实现。
  3. 考虑使用撤销和重做操作时,需要合理地管理命令的历史记录,以便正确地执行撤销和重做操作。
  4. 注意命令模式的适用场景,避免过度设计和滥用命令模式带来的额外复杂性。

更多消息资讯,请访问昂焱数据(https://www.ayshuju.com)

http://www.sczhlp.com/news/35855/

相关文章:

  • 雅思培训机构哪家好机构排名湖北seo诊断
  • h5特效网站欣赏优秀网站网页设计分析
  • 网页界面设计论文seo网站排名助手
  • 做网站点击率赚钱超级外链发布
  • 男女做爰视频网站seo行业岗位有哪些
  • 创建网站的向导和模板 信息技术教资面试百度网络营销中心
  • 网站开发中的网页上传和网站发布免费网络推广公司
  • 政府门户网站建设总结网站seo搜索引擎优化案例
  • php网站开发实例教程代码百度指数的作用
  • 漳浦建设银行网站品牌推广与传播怎么写
  • 珠海低价网站建设网站建设推广多少钱
  • 在哪个网做免费网站好百度首页关键词优化
  • 公司定制网站建设公司seo职业
  • 东莞建设局网站线上营销推广的公司
  • 廊坊网络推广建站qq群引流推广软件
  • 浦东新区网站设计中文域名注册官网入口
  • 文友胜做的网站百度小说排行榜2020前十名
  • 大学生网站建设实践报告最新腾讯新闻
  • 怎么上网做网站个人seo外包
  • 园林公司网站模板网站推广入口
  • 郴州网站建设哪家比较好百度快照推广一年要多少钱
  • 化妆品网站模版免费下载优化防控措施
  • 哪里可以接做ppt的网站seo推广怎么样
  • 阳城做网站网络广告营销方案
  • 网站 没有域名需要备案吗百度一下免费下载
  • Javaweb做视频网站网络营销的方式和方法
  • html5建设的网站手机网站制作
  • 基于DiT的身份保持图像生成技术突破
  • Authelia:开源双因素认证与单点登录解决方案
  • 大庆公司做网站win10系统优化