- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在阅读命令模式,并且看到来自不同站点的示例,这些示例似乎使用桥+命令模式来展示命令模式。
首先,来自维基百科:https://en.wikipedia.org/wiki/Command_pattern 、命令模式的定义:
The command pattern is a behavioral design pattern in which an object is used to encapsulate all information needed to perform an action or trigger an event at a later time. This information includes the method name, the object that owns the method and values for the method parameters.
因此,根据这个定义,命令模式看起来非常简单,阅读位于此处的书:https://addyosmani.com/resources/essentialjsdesignpatterns/book/#commandpatternjavascript ,这个例子就是这样做的。
(function(){
var carManager = {
// request information
requestInfo: function( model, id ){
return "The information for " + model + " with ID " + id + " is foobar";
},
// purchase the car
buyVehicle: function( model, id ){
return "You have successfully purchased Item " + id + ", a " + model;
},
// arrange a viewing
arrangeViewing: function( model, id ){
return "You have successfully booked a viewing of " + model + " ( " + id + " ) ";
}
};
carManager.execute = function ( name ) {
return carManager[name] && carManager[name].apply( carManager, [].slice.call(arguments, 1) );
};
console.log(carManager.execute( "arrangeViewing", "Ferrari", "14523" ));
console.log(carManager.execute( "requestInfo", "Ford Mondeo", "54323" ));
console.log(carManager.execute( "requestInfo", "Ford Escort", "34232" ));
console.log(carManager.execute( "buyVehicle", "Ford Escort", "34232" ));
})();
这个例子中没有多余的东西,我只看到了命令模式。然而,回到维基百科,他们使用以下示例来展示命令模式:
class Switch {
constructor() {
this._commands = [];
}
storeAndExecute(command) {
this._commands.push(command);
command.execute();
}
}
class Light {
turnOn() { console.log('turn on') }
turnOff() { console.log('turn off') }
}
class FlipDownCommand {
constructor(light) {
this._light = light;
}
execute() {
this._light.turnOff();
}
}
class FlipUpCommand {
constructor(light) {
this._light = light;
}
execute() {
this._light.turnOn();
}
}
var light = new Light();
var switchUp = new FlipUpCommand(light);
var switchDown = new FlipDownCommand(light);
var s = new Switch();
s.storeAndExecute(switchUp);
s.storeAndExecute(switchDown);
当我看到上面的示例时,我立即看到桥接模式,然后看到命令模式,因为它们正在存储命令,然后立即调用命令。
我的问题是这样的;我认为维基百科示例使用桥+命令模式来展示命令模式是否正确?
编辑:
如果我采用第二个示例,并删除命令部分,这不是桥接模式吗?
class Light {
turnOn() { console.log('turn on') }
turnOff() { console.log('turn off') }
}
class FlipDownCommand {
constructor(light) {
this._light = light;
}
execute() {
this._light.turnOff();
}
}
class FlipUpCommand {
constructor(light) {
this._light = light;
}
execute() {
this._light.turnOn();
}
}
var light = new Light();
var switchUp = new FlipUpCommand(light);
var switchDown = new FlipDownCommand(light);
switchUp.execute();
switchDown.execute();
最佳答案
首先,我发现 js 示例中 Addy Osmani 的解释与 GoF 的原始解释(以及维基百科的定义)有点不同。
来自 GoF 命令模式页面:
The command pattern is a design pattern that enables all of the information for a request to be contained within a single object. The command can then be invoked as required, often as part of a batch of queued commands with rollback capabilities.
这意味着命令对象应包含一个无参数 Execute
方法(有时还包含一个 Undo
)。命令的参数应该是已经包含在其中。该命令可以传递到调用程序、排队并在以后随时执行。
维基百科的示例与原始 GoF 非常相似,并遵循该定义。
它不使用桥接模式。
桥接模式用于添加抽象级别并向消费者隐藏服务的技术具体实现。桥接器可以具有由其接口(interface)定义的许多操作。
关于javascript - 桥+命令模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42429916/
我正在阅读命令模式,并且看到来自不同站点的示例,这些示例似乎使用桥+命令模式来展示命令模式。 首先,来自维基百科:https://en.wikipedia.org/wiki/Command_patte
我有一个超低延迟程序,需要与 Windows COM 组件交互。最快的方法是什么?使用像 JACOB 这样的 COM 桥,或者编写 native COM 库并使用像 ZeroMQ 这样的消息传递总线发
我正在开发一个应用程序,该应用程序具有托管在 Glassfish 服务器上的 Java Web 界面和作为 Linux 守护进程实现的 C 内核。 我现在最大的问题是如何进行远程过程调用。我需要双向调
我已经在带有KVM的Fedora 17上设置了VM,并为KVM配置了桥接网络。主机和VM均使用手动IP配置,主机的IP为192.168.0.2,VM的为192.168.0.10。 从VM可以毫无问题地
主 GUI 基于 SWT。我正在通过单击按钮从 printPDF 类运行打印操作。 public void startPDFPrint() throws Exception { Display
我开始尝试使用 SWT-AWT 桥,但我无法为位于 Composite 内的 JPanel 找到合适的尺寸。谁能告诉我代码有什么问题吗? import java.awt.BorderLayout; i
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Troubleshooting ClassNotFoundException when using PHP/
我对 Linux 很陌生,但我正在尽力学习。我们有CentOS 6的专用托管服务器。它配置了Apache服务器作为我们的公共(public)网站。现在我们需要在上面安装 PHP JAVA Bridge
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 2 年前。 Improve this qu
有没有类似铁轨搭桥 Pylons 的脚手架?我一直在搜索谷歌,但只发现了这个叫做 dbsprockets 的东西,这很好,虽然可能对我的需要来说太多了。我真正需要的是基于 SQLAlchemy 模型的
我正在寻找可用于集成任何源代码控制管理系统的通用 git 桥(如 git-svn、git-p4、git-tfs)模板。 如果没有这样的模板,至少有一些关于如何在 git 端集成基本操作的说明(对于其他
我正在开发一个应用程序,我将在 UIWebView 中同时使用 HTML5 和 native iOS 框架。我知道我可以实现 JavaScript 和 Objective-C 之间的通信。是否有任何库
我目前观察到第 3 方库(即 restfb)正在使用 java.util.logging,我看到这些日志最终出现在 STDOUT 中,即使我没有在我的 logback 中配置 SLF4J 控制台附加程
我正在尝试让 aurelia-materialize 桥接插件工作,但到目前为止无法使用 jspm 完成,所以我尝试使用 webpack。我将 typescript-webpack 框架提取到一个文件
我想使用 java 将 SFTP 客户端连接到 FTP 服务器。我知道这两种技术彼此无关。我想要完成的是通过互联网连接到 FTP 服务器,而不使用两个端口或更改服务器配置。 Java 中有 SFTP-
我有 MS Access 数据库文件,文本字段中带有德语变音符号。当我尝试阅读它们时,我有字符串?字符而不是带有变音符号的字符。我尝试为数据库连接设置不同的字符集,例如 properties.setP
我感觉这是 wpf 中的一个错误。让我知道你们对此有何看法。 为了简单起见,我在 .net 4.0 中制作了演示示例 我有一个 ContentControl,其中 Content 绑定(bind)到
我正在尝试让 PHPJAVA 桥在我目前的 Apache2 设置上工作。 虽然,坦率地说,我不知道从哪里开始。 我已经下载了 JavaBridgeTemplate621.war,但不知道放在哪里。 感
我需要在 php 上运行一些 java 代码所以我找到了这个 http://php-java-bridge.sourceforge.net/pjb/index.php 所以我下载了tomcat,把Ja
我正在使用 OrientDb 并希望通过 PHP 运行 Gremlin 命令。有谁知道是否有任何桥梁或产品可以连接这两种语言? 虽然我知道 OrientDB-PHP 和 OrientDB-REST 包
我是一名优秀的程序员,十分优秀!