PHP设计模式漫谈之命令模式_PHP
PHP设计模式漫谈我们已经连载了四期,我们知道了代理模式、责任链模式和结构模式;今天我们一起来讨论的是命令模式(Command),命令模式是封装一个通用操作的机制。
如果你熟悉C或PHP,你可能已经遇到过Command,它相当于程序中的:回调(callback)。回调通常使用一个函数指针或数据结构如PHP中的字符串和数组实现,Command是在一个方法调用之上的抽象,它吸收了所有面向对象的好处:合成、继承和处理。
例如,《设计模式》一书推荐使用Command存储用户行为链,以支持撤销和重做操作。
注意PHP 5.3函数编程能力(闭包)可以被当做Command模式的一个本地实现,但为每一个命令层次结构使用抽象数据类型有助于类型安全。
PHP设计模式中的命令模式
在这个模式中,Invoker(调用者)知道传递给它的Command,无需依赖于真实的ConcreteCommand(具体的命令)实现,解决了通过配置进行方法调用相关的问题,如UI控件按钮和菜单等引用一个Command,它们的行为是通过通用的ConcreteCommand实例呈现的。
参与者:
◆Command(命令):在一个方法调用之上定义一个抽象;
◆ConcreteCommand(具体的命令):一个操作的实现;
◆Invoker(调用者):引用Command实例作为它可用的操作。
下面的代码展示了Validator组件作为Command对象实现的示例:
<ol class="dp-c"> <li class="alt"><span><span><?php </span></span></span></li> <li> <span class="comment"><font color="#008200">/** </font></span> </li> <li class="alt"><span><span class="comment"><font color="#008200"> * The Command abstraction. </font></span> </span></li> <li><span><span class="comment"><font color="#008200"> * In this case the implementation must return a result, </font></span> </span></li> <li class="alt"><span><span class="comment"><font color="#008200"> * sometimes it only has side effects. </font></span> </span></li> <li><span><span class="comment"><font color="#008200"> */</font></span><span> </span></span></li> <li class="alt"> <span class="keyword"><strong><font color="#006699">interface</font></strong></span><span> Validator </span> </li> <li><span>{ </span></li> <li class="alt"> <span> </span><span class="comment"><font color="#008200">/** </font></span> </li> <li><span><span class="comment"><font color="#008200"> * The method could have any parameters. </font></span> </span></li> <li class="alt"><span><span class="comment"><font color="#008200"> * @param mixed </font></span> </span></li> <li><span><span class="comment"><font color="#008200"> * @return boolean </font></span> </span></li> <li class="alt"><span><span class="comment"><font color="#008200"> */</font></span><span> </span></span></li> <li> <span> </span><span class="keyword"><strong><font color="#006699">public</font></strong></span><span> </span><span class="keyword"><strong><font color="#006699">function</font></strong></span><span> isValid(</span><span class="vars"><font color="#dd0000">$value</font></span><span>); </span> </li> <li class="alt"><span>} </span></li> <li><span> </span></li> <li class="alt"> <span class="comment"><font color="#008200">/** </font></span> </li> <li><span><span class="comment"><font color="#008200"> * ConcreteCommand. </font></span> </span></li> <li class="alt"><span><span class="comment"><font color="#008200"> */</font></span><span> </span></span></li> <li> <span class="keyword"><strong><font color="#006699">class</font></strong></span><span> MoreThanZeroValidator </span><span class="keyword"><strong><font color="#006699">implements</font></strong></span><span> Validator </span> </li> <li class="alt"><span>{ </span></li> <li> <span> </span><span class="keyword"><strong><font color="#006699">public</font></strong></span><span> </span><span class="keyword"><strong><font color="#006699">function</font></strong></span><span> isValid(</span><span class="vars"><font color="#dd0000">$value</font></span><span>) </span> </li> <li class="alt"><span> { </span></li> <li> <span> </span><span class="keyword"><strong><font color="#006699">return</font></strong></span><span> </span><span class="vars"><font color="#dd0000">$value</font></span><span> > 0; </span> </li> <li class="alt"><span> } </span></li> <li><span>} </span></li> <li class="alt"><span> </span></li> <li> <span class="comment"><font color="#008200">/** </font></span> </li> <li class="alt"><span><span class="comment"><font color="#008200"> * ConcreteCommand. </font></span> </span></li> <li><span><span class="comment"><font color="#008200"> */</font></span><span> </span></span></li> <li class="alt"> <span class="keyword"><strong><font color="#006699">class</font></strong></span><span> EvenValidator </span><span class="keyword"><strong><font color="#006699">implements</font></strong></span><span> Validator </span> </li> <li><span>{ </span></li> <li class="alt"> <span> </span><span class="keyword"><strong><font color="#006699">public</font></strong></span><span> </span><span class="keyword"><strong><font color="#006699">function</font></strong></span><span> isValid(</span><span class="vars"><font color="#dd0000">$value</font></span><span>) </span> </li> <li><span> { </span></li> <li class="alt"> <span> </span><span class="keyword"><strong><font color="#006699">return</font></strong></span><span> </span><span class="vars"><font color="#dd0000">$value</font></span><span> % 2 == 0; </span> </li> <li><span> } </span></li> <li class="alt"><span>} </span></li> <li><span> </span></li> <li class="alt"> <span class="comment"><font color="#008200">/** </font></span> </li> <li><span><span class="comment"><font color="#008200"> * The Invoker. An implementation could store more than one </font></span> </span></li> <li class="alt"><span><span class="comment"><font color="#008200"> * Validator if needed. </font></span> </span></li> <li><span><span class="comment"><font color="#008200"> */</font></span><span> </span></span></li> <li class="alt"> <span class="keyword"><strong><font color="#006699">class</font></strong></span><span> ArrayProcessor </span> </li> <li><span>{ </span></li> <li class="alt"> <span> </span><span class="keyword"><strong><font color="#006699">protected</font></strong></span><span> </span><span class="vars"><font color="#dd0000">PHP设计模式漫谈我们已经连载了四期,我们知道了代理模式、责任链模式和<font color="#0000ff">结构模式</font>;今天我们一起来讨论的是命令模式(Command),命令模式是封装一个通用操作的机制。 <p>如果你熟悉C或PHP,你可能已经遇到过Command,它相当于程序中的:回调(callback)。回调通常使用一个函数指针或数据结构如PHP中的字符串和数组实现,Command是在一个方法调用之上的抽象,它吸收了所有面向对象的好处:合成、继承和处理。</p> <p>例如,《设计模式》一书推荐使用Command存储用户行为链,以支持撤销和重做操作。</p> <p>注意PHP 5.3函数编程能力(闭包)可以被当做Command模式的一个本地实现,但为每一个命令层次结构使用抽象数据类型有助于类型安全。</p> <p style="TEXT-ALIGN: center"><img class="fit-image lazy" src="/static/imghw/default1.png" data-src="http://img.bitscn.com/upimg/allimg/100413/115P52291-0.jpg" onmousewheel="javascript:return big(this)" style="max-width:90%" style="max-width:90%" alt="PHP设计模式中的命令模式" style="max-width:90%" onload="javascript:if(this.width>498)this.style.width=498;" border="0"> <br><strong><span style="FONT-SIZE: smaller"><font size="2">PHP设计模式中的命令模式</font></span></strong></p> <p>在这个模式中,Invoker(调用者)知道传递给它的Command,无需依赖于真实的ConcreteCommand(具体的命令)实现,解决了通过配置进行方法调用相关的问题,如UI控件按钮和菜单等引用一个Command,它们的行为是通过通用的ConcreteCommand实例呈现的。</p> <p><strong>参与者:</strong></p> <p>◆Command(命令):在一个方法调用之上定义一个抽象;</p> <p>◆ConcreteCommand(具体的命令):一个操作的实现;</p> <p>◆Invoker(调用者):引用Command实例作为它可用的操作。</p> <p>下面的代码展示了Validator组件作为Command对象实现的示例:</p> <pre class="brush:php;toolbar:false">___FCKpd___0
使用PHP设计模式中的命令模式的一些注意事项:
◆方法调用中的某些参数可以在构造ConcreteCommand时提供,有效地局部套用(currying)原始函数;
◆一个Command可以被看作是一个非常简单的只有一个方法的策略(Strategy),重点放在对象的操作上;
◆ConcreteCommands也要组织它们需要的每一个资源,以实现它们的目标,主要是行为的Receiver(接受者),它们调用方法执行一个Command;
◆复合模式,装饰模式和其它模式都可以和命令模式组合,获得更多的Command,装饰Command等等。
rule;使用PHP设计模式中的命令模式的一些注意事项:
◆方法调用中的某些参数可以在构造ConcreteCommand时提供,有效地局部套用(currying)原始函数;
◆一个Command可以被看作是一个非常简单的只有一个方法的策略(Strategy),重点放在对象的操作上;
◆ConcreteCommands也要组织它们需要的每一个资源,以实现它们的目标,主要是行为的Receiver(接受者),它们调用方法执行一个Command;
◆复合模式,装饰模式和其它模式都可以和命令模式组合,获得更多的Command,装饰Command等等。

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Was bedeutet der „Bitte nicht stören“-Modus von WeChat? Mit der Popularität von Smartphones und der rasanten Entwicklung des mobilen Internets sind Social-Media-Plattformen zu einem unverzichtbaren Bestandteil des täglichen Lebens der Menschen geworden. WeChat ist eine der beliebtesten Social-Media-Plattformen in China und fast jeder hat ein WeChat-Konto. Über WeChat können wir in Echtzeit mit Freunden, Familie und Kollegen kommunizieren, Momente in unserem Leben teilen und die aktuelle Situation des anderen verstehen. Allerdings sind wir in dieser Zeit zwangsläufig auch mit den Problemen der Informationsüberflutung und des Verlusts der Privatsphäre konfrontiert, insbesondere für diejenigen, die sich konzentrieren müssen oder

Mit dem Befehl sudo können Benutzer Befehle im Modus mit erhöhten Rechten ausführen, ohne in den Superuser-Modus wechseln zu müssen. In diesem Artikel erfahren Sie, wie Sie Funktionen simulieren, die Sudo-Befehlen in Windows-Systemen ähneln. Was ist das Shudao-Kommando? Sudo (kurz für „Superuser Do“) ist ein Befehlszeilentool, das es Benutzern von Unix-basierten Betriebssystemen wie Linux und MacOS ermöglicht, Befehle mit erhöhten Rechten auszuführen, die normalerweise Administratoren vorbehalten sind. Ausführen von SUDO-Befehlen in Windows 11/10 Mit der Veröffentlichung der neuesten Vorschauversion von Windows 11 Insider können Windows-Benutzer diese Funktion nun nutzen. Mit dieser neuen Funktion können Benutzer Folgendes tun

Dieser Artikel führt Leser in die Verwendung der Eingabeaufforderung (CommandPrompt) ein, um die physische Adresse (MAC-Adresse) des Netzwerkadapters im Win11-System zu finden. Eine MAC-Adresse ist eine eindeutige Kennung für eine Netzwerkschnittstellenkarte (NIC), die eine wichtige Rolle bei der Netzwerkkommunikation spielt. Über die Eingabeaufforderung können Benutzer problemlos die MAC-Adressinformationen aller Netzwerkadapter auf dem aktuellen Computer abrufen, was für die Fehlerbehebung im Netzwerk, die Konfiguration von Netzwerkeinstellungen und andere Aufgaben sehr hilfreich ist. Methode 1: „Eingabeaufforderung“ verwenden 1. Drücken Sie die Tastenkombination [Win+X] oder klicken Sie mit der rechten Maustaste auf das [Windows-Logo] in der Taskleiste und wählen Sie im sich öffnenden Menüelement [Ausführen] aus . Führen Sie das Fenster aus, geben Sie den Befehl [cmd] ein und dann

Im Win11-System können Sie den erweiterten Hyper-V-Sitzungsmodus über Befehle aktivieren oder deaktivieren. In diesem Artikel wird die Verwendung von Befehlen zur Bedienung vorgestellt und Benutzern dabei geholfen, Hyper-V-Funktionen im System besser zu verwalten und zu steuern. Hyper-V ist eine von Microsoft bereitgestellte Virtualisierungstechnologie, die in Windows Server und Windows 10 und 11 (außer Home Edition) integriert ist und es Benutzern ermöglicht, virtuelle Betriebssysteme in Windows-Systemen auszuführen. Obwohl virtuelle Maschinen vom Host-Betriebssystem isoliert sind, können sie über Einstellungen dennoch die Ressourcen des Hosts wie Soundkarten und Speichergeräte nutzen. Eine der wichtigsten Einstellungen ist die Aktivierung des erweiterten Sitzungsmodus. Der erweiterte Sitzungsmodus ist Hyper

1. Übersicht Der Befehl sar zeigt Systemnutzungsberichte anhand von Daten an, die aus Systemaktivitäten gesammelt wurden. Diese Berichte bestehen aus verschiedenen Abschnitten, die jeweils die Art der Daten und den Zeitpunkt der Datenerfassung enthalten. Der Standardmodus des Befehls sar zeigt die CPU-Auslastung in verschiedenen Zeitschritten für verschiedene Ressourcen an, die auf die CPU zugreifen (z. B. Benutzer, Systeme, E/A-Planer usw.). Darüber hinaus wird der Prozentsatz der inaktiven CPU für einen bestimmten Zeitraum angezeigt. Der Durchschnittswert für jeden Datenpunkt wird unten im Bericht aufgeführt. Standardmäßig erfasst sar alle 10 Minuten Daten. Sie können diese Berichte jedoch mithilfe verschiedener Optionen filtern und anpassen. Ähnlich wie der Befehl uptime kann Ihnen auch der Befehl sar dabei helfen, die CPU-Auslastung zu überwachen. Durch sar können Sie das Auftreten einer übermäßigen Belastung verstehen

Selbst das Beantworten von Anrufen im Modus „Bitte nicht stören“ kann ein sehr lästiges Erlebnis sein. Wie der Name schon sagt, deaktiviert der Modus „Bitte nicht stören“ alle Benachrichtigungen über eingehende Anrufe und Warnungen von E-Mails, Nachrichten usw. Sie können diesen Lösungssätzen folgen, um das Problem zu beheben. Fix 1 – Fokusmodus aktivieren Aktivieren Sie den Fokusmodus auf Ihrem Telefon. Schritt 1 – Wischen Sie von oben nach unten, um auf das Kontrollzentrum zuzugreifen. Schritt 2 – Aktivieren Sie als Nächstes den „Fokusmodus“ auf Ihrem Telefon. Der Fokusmodus aktiviert den „Bitte nicht stören“-Modus auf Ihrem Telefon. Es werden keine Benachrichtigungen über eingehende Anrufe auf Ihrem Telefon angezeigt. Fix 2 – Fokusmodus-Einstellungen ändern Wenn es Probleme mit den Fokusmoduseinstellungen gibt, sollten Sie diese beheben. Schritt 1 – Öffnen Sie Ihr iPhone-Einstellungsfenster. Schritt 2 – Als nächstes schalten Sie die Fokusmodus-Einstellungen ein

Linux ist ein leistungsstarkes Betriebssystem, das viele effiziente Kommunikationsmechanismen zwischen Prozessen bereitstellt, wie z. B. Pipes, Signale, Nachrichtenwarteschlangen, gemeinsam genutzten Speicher usw. Aber gibt es eine einfachere, flexiblere und effizientere Art der Kommunikation? Die Antwort ist ja, das ist eventfd. eventfd ist ein Systemaufruf, der in Linux Version 2.6 eingeführt wurde. Er kann zur Implementierung von Ereignisbenachrichtigungen verwendet werden, d. h. zur Übermittlung von Ereignissen über einen Dateideskriptor. eventfd enthält einen vom Kernel verwalteten 64-Bit-Ganzzahlzähler ohne Vorzeichen. Der Prozess kann den Zählerwert lesen/ändern, indem er diesen Dateideskriptor liest/schreibt, um eine Kommunikation zwischen Prozessen zu erreichen. Was sind die Vorteile von eventfd? Es verfügt über die folgenden Funktionen

Widgets sind eine neue Funktion des Win11-Systems. Es ist jedoch unvermeidlich, dass einige Benutzer Widgets nicht häufig verwenden, weil sie Speicherplatz beanspruchen. Der untenstehende Editor zeigt Ihnen die Bedienung und Sie können es ausprobieren. Was sind Widgets? Widgets sind kleine Karten, die dynamische Inhalte Ihrer bevorzugten Apps und Dienste auf Ihrem Windows-Desktop anzeigen. Sie werden auf dem Widget-Board angezeigt, wo Sie Widgets entdecken, anheften, lösen, anordnen, in der Größe ändern und an Ihre Interessen anpassen können. Das Widget-Board ist für die Anzeige relevanter Widgets und personalisierter Inhalte basierend auf der Nutzung optimiert. Öffnen Sie das Widget-Panel in der linken Ecke der Taskleiste, wo Sie das Live-Wetter sehen können
