在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ HTML/ 命令模式
中介者模式
MVVM
亨元模式
設(shè)計(jì)模式分類概覽表
ES Harmony
組合模式
CommonJS
jQuery 插件的設(shè)計(jì)模式
外觀模式
觀察者模式
建造者模式
構(gòu)造器模式
外觀模式
簡(jiǎn)介
AMD
原型模式
設(shè)計(jì)模式的分類
觀察者模式
命名空間模式
代理模式
編寫(xiě)設(shè)計(jì)模式
適配器模式
反模式
什么是設(shè)計(jì)模式
模塊化模式
MVC
Mixin 模式
裝飾模式
設(shè)計(jì)模式的結(jié)構(gòu)
單例模式
迭代器模式
命令模式
工廠模式
MVP
暴露模塊模式
惰性初始模式

命令模式

命名模式的目標(biāo)是將方法的調(diào)用,請(qǐng)求或者操作封裝到一個(gè)單獨(dú)的對(duì)象中,給我們酌情執(zhí)行同時(shí)參數(shù)化和傳遞方法調(diào)用的能力.另外,它使得我們能將對(duì)象從實(shí)現(xiàn)了行為的對(duì)象對(duì)這些行為的調(diào)用進(jìn)行解耦,為我們帶來(lái)了換出具體的對(duì)象這一更深程度的整體靈活性。

具體類是對(duì)基于類的編程語(yǔ)言的最好解釋,并且同抽象類的理念聯(lián)系緊密.抽象類定義了一個(gè)接口,但并不需要提供對(duì)它的所有成員函數(shù)的實(shí)現(xiàn).它扮演著驅(qū)動(dòng)其它類的基類角色.被驅(qū)動(dòng)類實(shí)現(xiàn)了缺失的函數(shù)而被稱為具體類. 命令模式背后的一般理念是為我們提供了從任何執(zhí)行中的命令中分離出發(fā)出命令的責(zé)任,取而代之將這一責(zé)任委托給其它的對(duì)象。

實(shí)現(xiàn)明智簡(jiǎn)單的命令對(duì)象,將一個(gè)行為和對(duì)象對(duì)調(diào)用這個(gè)行為的需求都綁定到了一起.它們始終都包含一個(gè)執(zhí)行操作(比如run()或者execute()).所有帶有相同接口的命令對(duì)象能夠被簡(jiǎn)單地根據(jù)需要調(diào)換,這被認(rèn)為是命令模式的更大的好處之一。

為了展示命令模式,我們創(chuàng)建一個(gè)簡(jiǎn)單的汽車(chē)購(gòu)買(mǎi)服務(wù):

(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 + " ) ";
      }

    };

})();

看一看上面的這段代碼,它也許是通過(guò)直接訪問(wèn)對(duì)象來(lái)瑣碎的調(diào)用我們CarManager的方法。在技術(shù)上我們也許都會(huì)都會(huì)對(duì)這個(gè)沒(méi)有任何失誤達(dá)成諒解.它是完全有效的Javascript然而也會(huì)有情況不利的情況。

例如,想象如果CarManager的核心API會(huì)發(fā)生改變的這種情況.這可能需要所有直接訪問(wèn)這些方法的對(duì)象也跟著被修改.這可以被看成是一種耦合,明顯違背了OOP方法學(xué)盡量實(shí)現(xiàn)松耦合的理念.取而代之,我們可以通過(guò)更深入的抽象這些API來(lái)解決這個(gè)問(wèn)題。

現(xiàn)在讓我們來(lái)擴(kuò)展我們的CarManager,以便我們這個(gè)命令模式的應(yīng)用程序得到接下來(lái)的這種效果:接受任何可以在CarManager對(duì)象上面執(zhí)行的方法,傳送任何可以被使用到的數(shù)據(jù),如Car模型和ID。

這里是我們希望能夠?qū)崿F(xiàn)的樣子:

CarManager.execute( "buyVehicle", "Ford Escort", "453543" );

按照這種結(jié)構(gòu),我們現(xiàn)在應(yīng)該像下面這樣,添加一個(gè)對(duì)于"CarManager.execute()"方法的定義:

CarManager.execute = function ( name ) {
    return CarManager[name] && CarManager[name].apply( CarManager, [].slice.call(arguments, 1) );
};

最終我們的調(diào)用如下所示:

CarManager.execute( "arrangeViewing", "Ferrari", "14523" );
CarManager.execute( "requestInfo", "Ford Mondeo", "54323" );
CarManager.execute( "requestInfo", "Ford Escort", "34232" );
CarManager.execute( "buyVehicle", "Ford Escort", "34232" );
上一篇:裝飾模式下一篇:ES Harmony