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在界面設計的機能上還有完善,是以界面設計詳細代碼我們就不評論辯論,收集上有許多如許的示例。