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

wordpress实现自动重定向谷歌优化排名哪家强

wordpress实现自动重定向,谷歌优化排名哪家强,做网站堵怕犯法吗,杨凌开发建设局网站目录 什么是命令模式 命令模式的实现 命令模式角色 命令模式类图 命令模式举例 命令模式代码实现 命令模式的特点 优点 缺点 使用场景 注意事项 什么是命令模式 命令模式(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.hengruixuexiao.com/news/28131.html

相关文章:

  • 完善的seo网站互联网公司网站模板
  • 之梦做的网站后台修改栏目描述东莞网站建设seo
  • 网站建设联盟如何宣传推广自己的产品
  • 关于政府网站建设的研究报告成都网络推广外包公司哪家好
  • 做网站需要什么cailiao山东关键词快速排名
  • 阿里云1核2g服务器能建设几个网站域名注册服务网站哪个好
  • 电子商务网站设计原理实践报告上海有什么seo公司
  • 小程序注册认证流程孔宇seo
  • 自己买个服务器有什么用seo推广专员
  • 网站建设排名优化技巧google搜索引擎入口下载
  • 做外贸的国际网站有哪些站长工具爱站网
  • 泰州做网站优化百度竞价点击软件奔奔
  • 珠宝行业做网站的好处seo产品是什么意思
  • 怎么做淘客网站推广长春网站建设定制
  • 网站后台使用百度推广找谁做靠谱
  • 英国电商网站千锋教育培训机构怎么样
  • 怎么样在网站上做跳转关键词筛选工具
  • css兼容性查询网站销售网站怎么做
  • 上海做网站的公司联系方式东莞网站推广方案
  • 可以在线做c语言的网站郑州seo学校
  • 网站备案 网站品牌策划公司哪家好
  • 优质手机网站建设企业微信引流推广怎么做
  • 东莞建站公司运转全网天下有 名公司网站如何制作
  • com域名续费多少钱免费seo网站自动推广
  • 网站上的flash怎么做精准网站seo诊断报告
  • 四川建设网工作时间优化人员配置
  • 西安手机网站自动引流免费app
  • 徐州学习网站建设广告联盟接单平台
  • 网站运营者推广链接
  • 网站资料如何做参考文献网站排名优化怎么做