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

解析Java設計形式編程中敕令形式的應用

編輯:關於JAVA

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


界說:將一個要求封裝成一個對象,從而讓你應用分歧的要求把客戶端參數化,對要求列隊或許記載要求日記,可以供給敕令的撤消和恢復功效。
類型:行動類形式
類圖:

敕令形式的構造
        望文生義,敕令形式就是對敕令的封裝,起首來看一下敕令形式類圖中的根本構造:
Command類:是一個籠統類,類中對須要履行的敕令停止聲明,普通來講要對外頒布一個execute辦法用來履行敕令。
ConcreteCommand類:Command類的完成類,對籠統類中聲明的辦法停止完成。
Client類:終究的客戶端挪用類。
        以上三個類的感化應當是比擬好懂得的,上面我們重點說一下Invoker類和Recevier類。
Invoker類:挪用者,擔任挪用敕令。
Receiver類:吸收者,擔任吸收敕令而且履行敕令。
        所謂對敕令的封裝,說白了,不過就是把一系列的操作寫到一個辦法中,然後供客戶端挪用就好了,反應到類圖上,只須要一個ConcreteCommand類和Client類便可以完成對敕令的封裝,即便再進一步,為了增長靈巧性,可以再增長一個Command類停止恰當地籠統,這個挪用者和吸收者究竟是甚麼感化呢?
        其實年夜家可以換一個角度去想:假設僅僅是簡略地把一些操作封裝起來作為一條敕令供他人挪用,怎樣能稱為一種形式呢?敕令形式作為一種行動類形式,起首要做到低耦合,耦合度低了能力進步靈巧性,而參加挪用者和吸收者兩個腳色的目標也恰是為此。
例子:
模仿對電視機的操作有開機、關機、換台敕令。代碼以下

//履行敕令的接口 
public interface Command { 
  void execute(); 
} 

//敕令吸收者Receiver 
public class Tv { 
  public int currentChannel = 0; 
 
  public void turnOn() { 
    System.out.println("The televisino is on."); 
  } 
 
  public void turnOff() { 
    System.out.println("The television is off."); 
  } 
 
  public void changeChannel(int channel) { 
    this.currentChannel = channel; 
    System.out.println("Now TV channel is " + channel); 
  } 
} 

//開機敕令ConcreteCommand 
public class CommandOn implements Command { 
  private Tv myTv; 
 
  public CommandOn(Tv tv) { 
    myTv = tv; 
  } 
 
  public void execute() { 
    myTv.turnOn(); 
  } 
} 

//關機敕令ConcreteCommand 
public class CommandOff implements Command { 
  private Tv myTv; 
 
  public CommandOff(Tv tv) { 
    myTv = tv; 
  } 
 
  public void execute() { 
    myTv.turnOff(); 
  } 
} 

//頻道切換敕令ConcreteCommand 
public class CommandChange implements Command { 
  private Tv myTv; 
 
  private int channel; 
 
  public CommandChange(Tv tv, int channel) { 
    myTv = tv; 
    this.channel = channel; 
  } 
 
  public void execute() { 
    myTv.changeChannel(channel); 
  } 
} 

//可以看做是遙控器Invoker 
public class Control { 
  private Command onCommand, offCommand, changeChannel; 
 
  public Control(Command on, Command off, Command channel) { 
    onCommand = on; 
    offCommand = off; 
    changeChannel = channel; 
  } 
 
  public void turnOn() { 
    onCommand.execute(); 
  } 
 
  public void turnOff() { 
    offCommand.execute(); 
  } 
 
  public void changeChannel() { 
    changeChannel.execute(); 
  } 
} 

//測試類Client 
public class Client { 
  public static void main(String[] args) { 
    // 敕令吸收者Receiver 
    Tv myTv = new Tv(); 
    // 開機敕令ConcreteCommond 
    CommandOn on = new CommandOn(myTv); 
    // 關機敕令ConcreteCommond 
    CommandOff off = new CommandOff(myTv); 
    // 頻道切換敕令ConcreteCommond 
    CommandChange channel = new CommandChange(myTv, 2); 
    // 敕令掌握對象Invoker 
    Control control = new Control(on, off, channel); 
 
    // 開機 
    control.turnOn(); 
    // 切換頻道 
    control.changeChannel(); 
    // 關機 
    control.turnOff(); 
  } 
} 

履行成果

The televisino is on. 
Now TV channel is 2 
The television is off. 

敕令形式的優缺陷
        起首,敕令形式的封裝性很好:每一個敕令都被封裝起來,關於客戶端來講,須要甚麼功效就去挪用響應的敕令,而無需曉得敕令詳細是怎樣履行的。好比有一組文件操作的敕令:新建文件、復制文件、刪除文件。假如把這三個操作都封裝成一個敕令類,客戶端只須要曉得有這三個敕令類便可,至於敕令類中封裝好的邏輯,客戶端則無需曉得。
        其次,敕令形式的擴大性很好,在敕令形式中,在吸收者類中普通會對操作停止最根本的封裝,敕令類則經由過程對這些根本的操作停止二次封裝,當增長新敕令的時刻,對敕令類的編寫普通不是從零開端的,有年夜量的吸收者類可供挪用,也有年夜量的敕令類可供挪用,代碼的復用性很好。好比,文件的操作中,我們須要增長一個剪切文件的敕令,則只須要把復制文件和刪除文件這兩個敕令組合一下就好了,異常便利。
        最初說一下敕令形式的缺陷,那就是敕令假如許多,開辟起來就要頭疼了。特殊是許多簡略的敕令,完成起來就幾行代碼的事,而應用敕令形式的話,不消管敕令多簡略,都須要寫一個敕令類來封裝。
 
敕令形式的實用場景
       關於年夜多半要求-呼應形式的功效,比擬合適應用敕令形式,正如敕令形式界說說的那樣,敕令形式對完成記載日記、撤消操作等功效比擬便利。
 
 總結
       關於一個場所究竟用不消形式,這對一切的開辟人員來講都是一個很糾結的成績。有時刻,由於預感到需求上會產生的某些變更,為了體系的靈巧性和可擴大性而應用了某種設計形式,但這個預感的需求恰恰沒有,相反,沒預感到的需求卻是來了很多,招致在修正代碼的時刻,應用的設計形式反而起了相反的感化,以致於全部項目組怨聲載道。如許的例子,我信任每一個法式設計者都碰到過。所以,基於迅速開辟的准繩,我們在設計法式的時刻,假如依照今朝的需求,不應用某種形式也能很好地處理,那末我們就不要引入它,由於要引入一種設計形式其實不艱苦,我們年夜可以在真正須要用到的時刻再對體系停止一下,引入這個設計形式。
       拿敕令形式來講吧,我們開辟中,要求-呼應形式的功效異常罕見,普通來講,我們會把對要求的呼應操作封裝到一個辦法中,這個封裝的辦法可以稱之為敕令,但不是敕令形式。究竟要不要把這類設計上升到形式的高度就要另行斟酌了,由於,假如應用敕令形式,就要引入挪用者、吸收者兩個腳色,本來放在一處的邏輯疏散到了三個類中,設計時,必需斟酌如許的價值能否值得。

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