程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java設計形式之敕令形式(Command形式)引見

Java設計形式之敕令形式(Command形式)引見

編輯:關於JAVA

Java設計形式之敕令形式(Command形式)引見。本站提示廣大學習愛好者:(Java設計形式之敕令形式(Command形式)引見)文章只能為提供參考,不一定能成為您想要的結果。以下是Java設計形式之敕令形式(Command形式)引見正文


Command形式是最使我困惑的一個形式,我在浏覽了許多代碼後,才感到模糊控制其年夜概道理,我以為懂得設計形式最重要是控制起道理結構,如許才對本身現實編程有指點感化。Command形式現實上不是個很詳細,劃定許多的形式,恰是這個靈巧性,讓人有些confuse。

Command界說

很多Command形式的代碼都是針對圖形界面的,它現實就是菜單敕令,我們在一個下拉菜單選擇一個敕令時,然後會履行一些舉措。

將這些敕令封裝成在一個類中,然後用戶(挪用者)再對這個類停止操作,這就是Command形式,換句話說,原來用戶(挪用者)是直接挪用這些敕令的,如菜單上翻開文檔(挪用者),就直接指向翻開文檔的代碼,應用Command形式,就是在這二者之間增長一個中央者,將這類直接關系拗斷,同時二者之間都隔離,根本沒有關系了。

明顯如許做的利益是相符封裝的特征,下降耦合度,Command是將對行動停止封裝的典范形式,Factory是將創立停止封裝的形式。

從Command形式,我也發明設計形式一個"通病":好象愛好將簡略的成績龐雜化,愛好在分歧類中增長圈外人,固然如許做有益於代碼的硬朗性 可保護性 還有復用性。

若何應用敕令形式

詳細的Command形式代碼林林總總,由於若何封裝敕令,分歧體系,有分歧的做法。上面事例是將敕令封裝在一個Collection的List中,任何對象一旦參加List中,現實上裝入了一個關閉的黑盒中,對象的特征消逝了,只要掏出時,才有能夠隱約的分辯出。

典范的Command形式須要有一個接口。接口中有一個同一的辦法,這就是"將敕令/要求封裝為對象":

public interface Command {
  public abstract void execute ( );
}

詳細分歧敕令/要求代碼是完成接口Command,上面有三個詳細敕令:

public class Engineer implements Command {
  public void execute( ) {
    //do Engineer's command
  }
}

public class Programmer implements Command {
  public void execute( ) {
    //do programmer's command
  }
}

public class Politician implements Command {
  public void execute( ) {
    //do Politician's command
  }
}

依照平日做法,我們便可以直接挪用這三個Command,然則應用Command形式,我們要將他們封裝起來,扔到黑盒子List裡去:

public class producer{
  public static List produceRequests() {
    List queue = new ArrayList();
    queue.add( new DomesticEngineer() );
    queue.add( new Politician() );
    queue.add( new Programmer() );
    return queue;
  }
}

這三個敕令進入List中後,曾經掉去了其表面特點,今後再掏出,也能夠沒法分辯出誰是Engineer 誰是Programmer了,看上面若何挪用Command形式:

public class TestCommand {
  public static void main(String[] args) {
    List queue = Producer.produceRequests();
    for (Iterator it = queue.iterator(); it.hasNext(); )
        //掏出List中東東,其他特點都不克不及肯定,只能包管一個特點是100%准確,
        // 他們至多是接口Command的"兒子".所以強迫轉換類型為接口Command
        ((Command)it.next()).execute();
  }
}

因而可知,挪用者根本只和接口打交道,不合詳細完成交互,這也表現了一個准繩,面向接口編程,如許,今後增長第四個詳細敕令時,就不用修正挪用者TestCommand中的代碼了。

懂得了下面的代碼的焦點道理,在應用中,就應當大家有本身辦法了,特殊是在若何分別挪用者和詳細敕令上,有許多完成辦法,下面的代碼是應用"從List過一遍"的做法。這類做法只是為了演示。

應用Command形式的一個好來由還由於它能完成Undo功效,每一個詳細敕令都可以記住它方才履行的舉措,而且在須要時恢復。

Command形式在界面設計中運用普遍。Java的Swing中菜單敕令都是應用Command形式,因為Java在界面設計的機能上還有完善,是以界面設計詳細代碼我們就不評論辯論,收集上有許多如許的示例。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved