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

unity做网站牡丹江网站制作

unity做网站,牡丹江网站制作,排名优化专家,小型购物网站开发#x1f50d;目的 将请求封装为对象#xff0c;从而使你可以将具有不同请求的客户端参数化#xff0c;队列或记录请求#xff0c;并且支持可撤销操作。 #x1f50d;解释 真实世界例子 有一个巫师在地精上施放咒语。咒语在地精上一一执行。第一个咒语使地精缩小#xff0…目的 将请求封装为对象从而使你可以将具有不同请求的客户端参数化队列或记录请求并且支持可撤销操作。 解释 真实世界例子 有一个巫师在地精上施放咒语。咒语在地精上一一执行。第一个咒语使地精缩小第二个使他不可见。然后巫师将咒语一个个的反转。这里的每一个咒语都是一个可撤销的命令对象。 通俗描述 用命令对象的方式存储请求以在将来时可以执行它或撤销它。 维基百科 在面向对象编程中命令模式是一种行为型设计模式它把在稍后执行的一个动作或触发的一个事件所需要的所有信息封装到一个对象中。 程序示例 创建一个巫师类 public class Wizard {private static final Logger LOGGER LoggerFactory.getLogger(Wizard.class);private final DequeRunnable undoStack new LinkedList();private final DequeRunnable redoStack new LinkedList();public Wizard() {}public void castSpell(Command command, Target target) {LOGGER.info({} casts {} at {}, this, command, target);command.execute(target);undoStack.offerLast(command);}public void undoLastSpell() {if (!undoStack.isEmpty()) {var previousSpell undoStack.pollLast();redoStack.offerLast(previousSpell);LOGGER.info({} undoes {}, this, previousSpell);previousSpell.undo();}}public void redoLastSpell() {if (!redoStack.isEmpty()) {var previousSpell redoStack.pollLast();undoStack.offerLast(previousSpell);LOGGER.info({} redoes {}, this, previousSpell);previousSpell.redo();}}Overridepublic String toString() {return Wizard;} }创建咒语层级 public interface Command {void execute(Target target);void undo();void redo();String toString(); }public class InvisibilitySpell implements Command {private Target target;Overridepublic void execute(Target target) {target.setVisibility(Visibility.INVISIBLE);this.target target;}Overridepublic void undo() {if (target ! null) {target.setVisibility(Visibility.VISIBLE);}}Overridepublic void redo() {if (target ! null) {target.setVisibility(Visibility.INVISIBLE);}}Overridepublic String toString() {return Invisibility spell;} }public class ShrinkSpell implements Command {private Size oldSize;private Target target;Overridepublic void execute(Target target) {oldSize target.getSize();target.setSize(Size.SMALL);this.target target;}Overridepublic void undo() {if (oldSize ! null target ! null) {var temp target.getSize();target.setSize(oldSize);oldSize temp;}}Overridepublic void redo() {undo();}Overridepublic String toString() {return Shrink spell;} }创建咒语的目标地精  public abstract class Target {private static final Logger LOGGER LoggerFactory.getLogger(Target.class);private Size size;private Visibility visibility;public Size getSize() {return size;}public void setSize(Size size) {this.size size;}public Visibility getVisibility() {return visibility;}public void setVisibility(Visibility visibility) {this.visibility visibility;}Overridepublic abstract String toString();public void printStatus() {LOGGER.info({}, [size{}] [visibility{}], this, getSize(), getVisibility());} }public class Goblin extends Target {public Goblin() {setSize(Size.NORMAL);setVisibility(Visibility.VISIBLE);}Overridepublic String toString() {return Goblin;}}实践示例 var wizard new Wizard(); var goblin new Goblin(); goblin.printStatus(); // Goblin, [sizenormal] [visibilityvisible] wizard.castSpell(new ShrinkSpell(), goblin); // Wizard casts Shrink spell at Goblin goblin.printStatus(); // Goblin, [sizesmall] [visibilityvisible] wizard.castSpell(new InvisibilitySpell(), goblin); // Wizard casts Invisibility spell at Goblin goblin.printStatus(); // Goblin, [sizesmall] [visibilityinvisible] wizard.undoLastSpell(); // Wizard undoes Invisibility spell goblin.printStatus(); // Goblin, [sizesmall] [visibilityvisible]类图 适用场景 使用命令模式情况 通过操作将对象参数化。您可以使用回调函数即已在某处注册以便稍后调用的函数以过程语言表示这种参数化。命令是回调的一种面向对象替代方案。在不同的时间指定排队和执行请求。一个命令对象的生存期可以独立于原始请求。如果请求的接收方可以以地址空间无关的方式来表示那么你可以将请求的命令对象传输到其他进程并在那里执行请求。支持撤销。命令的执行操作可以在命令本身中存储状态以反转其效果。命令接口必须有添加的反执行操作该操作可以逆转上一次执行调用的效果。执行的命令存储在历史列表中。无限撤消和重做通过分别向后和向前遍历此列表来实现分别调用unexecute和execute。支持日志记录更改以便在系统崩溃时可以重新应用它们。通过使用加载和存储操作扩展命令接口你可以保留更改的永久日志。从崩溃中恢复涉及从磁盘重新加载记录的命令并通过执行操作重新执行它们。通过原始的操作来构建一个以高级操作围绕的系统。这种结构在支持事务的信息系统中很常见。事务封装了一组数据更改。命令模式提供了一种对事务进行建模的方法。命令具有公共接口让你以相同的方式调用所有事务。该模式还可以通过新的事务来轻松扩展系统。
http://www.pierceye.com/news/575186/

相关文章:

  • 网站备案注销原因网站建设入账
  • 番禺做网站哪家好wordpress 样式引用
  • 网站研发进度表下载网站建设亿码酷适合5
  • 对网站域名销户怎么做舆情监控都有哪些内容
  • 南宁做网站优化企业网站开发合同
  • 网站做京东联盟公司注册网上核名入口
  • jsp做的零食网站下载一分钟做网站
  • 营销网站竞品分析报告上海平面网站
  • 网站建设 邦机票网站制作
  • 网站开发从整体上用vps刷网站流量要怎么做
  • 搭建一个网站 优帮云网站无法访问的原因
  • 卖印花图案设计网站北京管庄网站建设公司
  • 北京石景山网站建设外贸网络推广经验
  • 好看的网站源码手机网站在线生成
  • 响应式网站设计的主页网站定制合同
  • 做查询网站有哪些杭州市建设部门网站
  • 免费做外贸的网站制作logo网站
  • 网站改版意义服务营销案例100例
  • 服装厂做1688网站效果好不好做lol数据的网站有哪些
  • 棋牌代理平台网站优化大赛
  • 网站制作视频教程新手必看深圳建网站哪个公
  • 做网站的公司盐城网站排名优化培训
  • 营销型网站搭建公司3d云打印网站开发
  • 网站建设首选沈阳高端网站建设搬家公司收费标准
  • 网站建设需要多少钱知乎企业管理软件行业未来的发展
  • 网站建设与管理 自考百度网站地图生成
  • 在线优化网站源码站
  • 中企动力做网站一次性付款零基础学室内设计
  • 企炬网站wordpress会员付费插件
  • 在哪里购买虚拟空间建设网站网页设计培训机构培训费