欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JS設(shè)計(jì)模式之命令模式概念與用法分析

 更新時(shí)間:2018年02月06日 09:24:13   作者:itpinpai  
這篇文章主要介紹了JS設(shè)計(jì)模式之命令模式概念與用法,簡單描述了命令模式的原理、功能并結(jié)合javascript實(shí)例形式分析了命令模式相關(guān)定義與使用技巧,需要的朋友可以參考下

本文實(shí)例講述了JS設(shè)計(jì)模式之命令模式概念與用法。分享給大家供大家參考,具體如下:

客戶創(chuàng)建命令;調(diào)用者執(zhí)行該命令;接收者在命令執(zhí)行時(shí)執(zhí)行相應(yīng)操作
簡單命令對(duì)象一般用來消除二個(gè)對(duì)象(調(diào)用者和接收者)之間的耦合,而復(fù)雜的命令對(duì)象則一般用來封裝不可分的或事務(wù)性的指令。

命令模式的主要用途是把調(diào)用對(duì)象(用戶界面、API和代理等)與實(shí)現(xiàn)操作的對(duì)象隔離開。凡是兩個(gè)對(duì)象間互動(dòng)方式需要有更高的模塊化程度時(shí)都可以用到這種模式。

命令的意思是用一個(gè)簡單方法或函數(shù)去執(zhí)行和這個(gè)命令相關(guān)的實(shí)際操作。就如同用遙控器打開電視一樣,只按一個(gè)按鍵就可以打開電視,簡單、方便。它具體的實(shí)現(xiàn)操作我們不用關(guān)心。那是有電視器來處理的。電視對(duì)遙控器提供了一個(gè)接口(信號(hào)),遙控器只需要在點(diǎn)擊時(shí)實(shí)現(xiàn)這個(gè)接口就可以了。

Command:
定義命令的接口,聲明執(zhí)行的方法。
ConcreteCommand:
命令接口實(shí)現(xiàn)對(duì)象,是“虛”的實(shí)現(xiàn);通常會(huì)持有接收者,并調(diào)用接收者的功能來完成命令要執(zhí)行的操作。
Receiver:
接收者,真正執(zhí)行命令的對(duì)象。任何類都可能成為一個(gè)接收者,只要它能夠?qū)崿F(xiàn)命令要求實(shí)現(xiàn)的相應(yīng)功能。
Invoker:
要求命令對(duì)象執(zhí)行請(qǐng)求,通常會(huì)持有命令對(duì)象,可以持有很多的命令對(duì)象。這個(gè)是客戶端真正觸發(fā)命令并要求命令執(zhí)行相應(yīng)操作的地方,也就是說相當(dāng)于使用命令對(duì)象的入口。
Client:
創(chuàng)建具體的命令對(duì)象,并且設(shè)置命令對(duì)象的接收者。注意這個(gè)不是我們常規(guī)意義上的客戶端,而是在組裝命令對(duì)象和接收者,或許,把這個(gè)Client稱為裝配者會(huì)更好理解,因?yàn)檎嬲褂妹畹目蛻舳耸菑腎nvoker來觸發(fā)執(zhí)行

模式分析

1.命令模式的本質(zhì)是對(duì)命令進(jìn)行封裝,將發(fā)出命令的責(zé)任和執(zhí)行命令的責(zé)任分割開。
2.每一個(gè)命令都是一個(gè)操作:請(qǐng)求的一方發(fā)出請(qǐng)求,要求執(zhí)行一個(gè)操作;接收的一方收到請(qǐng)求,并執(zhí)行操作。
3.命令模式允許請(qǐng)求的一方和接收的一方獨(dú)立開來,使得請(qǐng)求的一方不必知道接收請(qǐng)求的一方的接口,更不必知道請(qǐng)求是怎么被接收,以及操作是否被執(zhí)行、何時(shí)被執(zhí)行,以及是怎么被執(zhí)行的。
4.命令模式使請(qǐng)求本身成為一個(gè)對(duì)象,這個(gè)對(duì)象和其他對(duì)象一樣可以被存儲(chǔ)和傳遞。
5.命令模式的關(guān)鍵在于引入了抽象命令接口,且發(fā)送者針對(duì)抽象命令接口編程,只有實(shí)現(xiàn)了抽象命令接口的具體命令才能與接收者相關(guān)聯(lián)。

模式優(yōu)點(diǎn)

1.降低對(duì)象之間的耦合度。
2.新的命令可以很容易地加入到系統(tǒng)中。
3.可以比較容易地設(shè)計(jì)一個(gè)組合命令。
4.調(diào)用同一方法實(shí)現(xiàn)不同的功能

// 命令
var CreateCommand = function( receiver ){
 this.receiver = receiver;
}
CreateCommand.prototype.execute = function() {
 this.receiver.action();
}
// 接收者 電視
var TVOn = function() {}
TVOn.prototype.action = function() {
  alert("TVOn");
}
// 接收者 電視
var TVOff = function() {}
TVOff.prototype.action = function() {
  alert("TVOff");
}
// 調(diào)用者 遙控器
var Invoker = function( tvOnCommand, tvOffCommand ) {
  this.tvOnCommand = tvOnCommand;
  this.tvOffCommand = tvOffCommand;
}
Invoker.prototype.tvOn = function() {
  this.tvOnCommand.execute();
}
Invoker.prototype.tvOff = function() {
  this.tvOffCommand.execute();
}

執(zhí)行Client

var tvOnCommand = new CreateCommand( new TVOn() );
var tvOffCommand = new CreateCommand( new TVOff() );
var invoker = new Invoker( tvOnCommand, tvOffCommand );
invoker.tvOn();
invoker.tvOff();

更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript切換特效與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)

希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。

相關(guān)文章

最新評(píng)論