鍦ㄥ涓涓狫2EE欏圭洰鐨勯噸鏋勩佸鍔犳柊鍔熻兘鐨勮繃紼嬩腑錛屽瀹㈡埛绔疓UI紼嬪簭錛屾垜浠嬌鐢ㄤ簡State妯″紡銆傜粨鏋滄樉紺猴紝璇ユā寮忕殑浣跨敤錛屼笉浣嗗噺灝戜簡瀹㈡埛绔疓UI紼嬪簭鐨勭▼搴忚妯★紙LOC錛夛紝鑰屼笖錛岃閮ㄥ垎鐨勫紑鍙戝強鍗曞厓嫻嬭瘯鏃墮棿澶уぇ鍑忓皯錛屽悓鏃訛紝鍦ㄩ泦鎴愭祴璇曚腑鍙戠幇鐨勭己闄鋒暟閲忔瘮浣跨敤璇ユā寮忓墠騫沖潎鍑忓皯浜?鍊嶃傛湰鏂囧氨璇ラ」鐩腑浣跨敤State妯″紡鐨勬柟寮忚繘琛屼粙緇嶃?/BLOCKQUOTE>
寮曡█
鍦ㄥ垎灞傝蔣浠朵綋緋葷粨鏋勪腑錛屾湇鍔$紼嬪簭鍏蟲敞浜庡疄鐜頒笟鍔¢昏緫錛屽鎴風紼嬪簭鍒欏寘鍚敤鎴風晫闈€傛湇鍔$紼嬪簭鐢卞鎴風紼嬪簭璋冪敤錛屽叾璇鋒眰銆佸搷搴旀ā寮忓湪璁捐鏃跺凡緇忕‘瀹氾紝榪愯鏃跺嚭鐜伴棶棰樼殑姒傜巼杈冨皬銆傜浉鍙嶏紝瀹㈡埛绔▼搴忎笌鐢ㄦ埛鐩存帴浜や簰錛岃櫧鐒舵湁姝g‘瑙勫畾鐨勬搷浣滈『搴忔垨妯″紡錛屼絾鏄敤鎴風殑鎿嶄綔鏄笉鍙鐭ョ殑錛岀▼搴忓繀欏誨鐞嗗悇縐嶆搷浣滈敊璇佸姞涓婃暟鎹緭鍏ユ湁鏁堥獙璇佺瓑瑕佹眰錛屼嬌寰楀鎴風紼嬪簭鐨勫紑鍙戞垚鏈笂鍗囥?/P>
鍥犺岋紝涓鏃︽湁緇忚繃鍏呭垎嫻嬭瘯鐨勩佺敋鑷蟲槸閫氳繃楠屾敹鐨勭敤鎴蜂氦浜掔▼搴廏UI錛屽簲璇ュ敖鍙兘鐨勯噸鐢ㄨGUI錛屼互鎻愰珮杞歡鐨勫彲闈犳с佸彲緇存姢鎬с?/P>
鍦ㄥ涓涓狫2EE欏圭洰鐨勯噸鏋勩佸鍔犳柊鍔熻兘鐨勮繃紼嬩腑錛屽瀹㈡埛绔疓UI紼嬪簭錛屾垜浠嬌鐢ㄤ簡State妯″紡銆傜粨鏋滄樉紺猴紝璇ユā寮忕殑浣跨敤錛屼笉浣嗗噺灝戜簡瀹㈡埛绔疓UI紼嬪簭鐨勭▼搴忚妯★紙LOC錛夛紝鑰屼笖錛岃閮ㄥ垎鐨勫紑鍙戝強鍗曞厓嫻嬭瘯鏃墮棿澶уぇ鍑忓皯錛屽悓鏃訛紝鍦ㄩ泦鎴愭祴璇曚腑鍙戠幇鐨勭己闄鋒暟閲忔瘮浣跨敤璇ユā寮忓墠騫沖潎鍑忓皯浜?鍊嶃傛湰鏂囧氨璇ラ」鐩腑浣跨敤State妯″紡鐨勬柟寮忚繘琛屼粙緇嶃?/P>
1. State妯″紡
棣栧厛錛屽厛綆鍗曚粙緇嶄竴涓婼tate妯″紡銆?/P>
璇ユā寮忔槸鎸囧湪瀵硅薄鐨勫唴閮ㄧ姸鎬佹敼鍙樻椂鏀瑰彉瀵硅薄鐨勮涓恒?銆戙傚叾緇撴瀯濡傚浘1鎵紺恒?/P>
鍥? State妯″紡緇撴瀯

妯″紡涓悇涓弬涓庤呰亴璐g畝浠嬪涓嬶細
- Context錛氱敤鎴峰璞★紝鎷ユ湁涓涓猄tate綾誨瀷鐨勬垚鍛橈紝浠ユ爣璇嗗璞$殑褰撳墠鐘舵侊紱
- State錛氭帴鍙f垨鍩虹被錛屽皝瑁呬笌Context鐨勭壒瀹氱姸鎬佺浉鍏崇殑琛屼負錛?
- ConcreteState錛氭帴鍙e疄鐜扮被鎴栧瓙綾伙紝瀹炵幇浜嗕竴涓笌Context鏌愪釜鐘舵佺浉鍏崇殑琛屼負銆?/LI>
榪愯鏃訛紝Context灝嗕笌鐘舵佺浉鍏崇殑璇鋒眰濮旀墭緇欏綋鍓嶇殑ConcreteState瀵硅薄澶勭悊銆傚叧浜嶴tate妯″紡鏇磋灝界殑浠嬬粛錛岃鍙傞槄鍙傝冩枃鐚?銆?/P>
2. 瀹㈡埛绔簲鐢?/SPAN>
鏈ā寮忕殑鐩爣鏄垎紱誨鎴風杞歡涓殑鍙樺寲閮ㄥ垎涓庝笉鍙橀儴鍒嗭紝浠ヤ嬌寰楀彉鍖栫殑閮ㄥ垎鍙嫭绔嬩簬涓嶅彉鐨勯儴鍒嗭紝鏈夊埄浜庢墿鍏呮柊鐨勫姛鑳斤紝涔熸湁鍒╀簬緇存姢銆?/P>
鍦ㄩ」鐩腑錛屽浜庡鎴風GUI鐨勯噸鐢ㄦ湁涓ょ鏂瑰紡銆?/P>
- 鏂瑰紡1閫傜敤浜庯細鐩稿悓鏁版嵁闆嗗悎錛屼笉鍚屾搷浣滄ā寮忥紱姝ゆ椂錛屽湪GUI涓畾涔夊鎴風鏁版嵁澶勭悊楠岃瘉閫昏緫錛屼笉鍚岀殑鐘舵佸璞″皝瑁呬簡涓嶅悓鐨勬搷浣滄ā寮忥紱
- 鏂瑰紡2閫傜敤浜庯細涓嶅悓鏁版嵁闆嗗悎錛岀浉鍚屾搷浣滄ā寮忥紱姝ゆ椂錛屽湪鐘舵佸璞′腑瀹氫箟瀹㈡埛绔暟鎹鐞嗛獙璇侀昏緫錛屼笉鍚岀殑鐘舵佸璞″皝瑁呬簡涓嶅悓鐨勬暟鎹泦鍚堟搷浣溿?/LI>
2.1 綾誨瀷1錛?Read-Only & Normal
2.1.1 鍔ㄦ満
瀹㈡埛绔疓UI鎺ュ彈鐢ㄦ埛杈撳叆錛岀粡榪囨暟鎹湁鏁堟ч獙璇侊紝鐒跺悗灝嗘暟鎹紶杈撳埌鏈嶅姟绔紝鏈嶅姟绔鏌ヤ笟鍔¢昏緫鏈夋晥鎬э紝淇濆瓨鏁版嵁錛涗絾鏄湪鐗瑰畾鎯呭喌涓嬶紙姣斿鏁版嵁宸茬粡瀛樺湪銆佷笖鍙兘緇忓巻涓嬈¤緭鍏ワ級錛屼緷鎹鎴風GUI鎵鎿嶄綔鏁版嵁鐨勭姸鎬侊紝涓氬姟閫昏緫瑕佹眰鏁版嵁涓哄彧璇伙紝鍗沖鎴風鍙叿鏈夋樉紺烘暟鎹殑鍔熻兘錛屽茍涓嶈兘鏀瑰彉鏈嶅姟鍣ㄤ笂鐨勬暟鎹?/P>
涓鑸湴錛岀紪紼嬪疄鐜版椂錛屼細鍦℅UI紼嬪簭涓姞鍏ュ垽鏂暟鎹槸鍚﹀簲璇ヤ負鍙鐨勯昏緫鍒ゆ柇璇彞銆傚鏋滈拡瀵圭浉鍚岀殑鏁版嵁闆嗗悎錛圡odel錛夛紝鏈夊涓鎴風GUI錛圴iew錛夛紝灝遍渶瑕佸湪姣忎釜紼嬪簭涓姞鍏ヨ鍒ゆ柇銆傚姝ら檷浣庝簡紼嬪簭鐨勫彲緇存姢鎬э紝鍐沖畾鏁版嵁鏄惁涓哄彧璇葷殑榪欐牱涓涓笟鍔¢昏緫灝嗗垎鏁e湪紼嬪簭涓澶勶紝涓嶆槗緇存姢錛屽湪涓氬姟閫昏緫鍙戠敓鏀瑰彉鏃訛紝鏄撻犳垚涓嶄竴鑷淬?/P>
鎴戜滑鍙互灝嗗彉鍖栭儴鍒嗭紙鍦∟ormal鍜孯ead-Only鐘舵佷笅涓嶅悓鐨勯儴鍒嗭級浠嶨UI涓娊鍙栧嚭鏉ワ紝鍒嗗埆鐢ㄤ笉鍚岀殑綾繪潵琛ㄧず錛岃繖鏍鳳紝褰揋UI鐨勭姸鎬佸彂鐢熸敼鍙樻椂錛屽彧闇瑕佹敼鍙樺叾瀵圭姸鎬佸璞$殑寮曠敤鍗沖彲錛岀姸鎬佺浉鍏蟲搷浣滃鎵樼粰鐘舵佸璞″幓瀹屾垚銆?/P>
2.1.2 閫傜敤鎬?/B>
鏈被鍨嬮傜敤鐜錛氱浉鍚屾暟鎹泦鍚堬紝涓嶅悓鎿嶄綔妯″紡銆傚嵆鐗瑰畾鐨凣UI鏍規嵁鎿嶄綔涓婁笅鏂囩幆澧冿紝鏀瑰彉鍏跺搷搴旀ā寮忥紝鏍規嵁鏁版嵁鏄惁鍙紪杈戯紝鍒嗕負涓ょ鐘舵丷ead-Only State銆?Normal State銆?/P>
2.1.3 緇撴瀯錛堝浘2錛?/B>
鍥? 鐩稿悓鏁版嵁闆嗗悎錛屼笉鍚屾搷浣滄ā寮?/B>
![鍥? 鐩稿悓鏁版嵁闆嗗悎錛屼笉鍚屾搷浣滄ā寮? src=]()
2.1.4 鍙備笌鑰?/B>
- ClientStateChangeable錛氬鎴風GUI鎻愪緵緇橲tate瀵硅薄鐨勬搷浣滄帴鍙o紝浣垮緱State瀵硅薄鍙互璁塊棶GUI鐨勬垚鍛橈紝浠ュ畬鎴愯鐘舵佺浉鍏蟲搷浣滐紱
- getChangeableComponents()錛氳繑鍥炲湪鐘舵佽漿鎹負Read-Only鏃訛紝涓嶅彲緙栬緫鐨勬帶浠禖ollection錛?
- saveChangeToServer()錛氬湪鍙紪杈戠姸鎬佹椂錛屽皢瀹㈡埛绔暟鎹繚瀛樺埌鏈嶅姟绔?/LI>
- AClientGUI錛氬畬鎴愬浘1涓殑Context鍔熻兘錛屽嵆鍏剁姸鎬佽榪涜鏀瑰彉鐨勫鎴風GUI錛涚淮鎶lientState鐨勪竴涓疄渚嬶紙state錛夛紱
- init()錛氬皢this寮曠敤浣滀負鍙傛暟錛岃皟鐢╯tate.setComponents(this) 浠ヨ緗彲鍙樻帶浠剁殑鍒濆鐘舵侊紱
- okButtonActionPerformed(e:ActionEvent)錛氱敤鎴峰畬鎴愭搷浣滃悗錛屾湰鏂規硶鍙綔涓?"OK"鎸夐挳鎺т歡鐨凙ctionListener鏂規硶錛岃皟鐢╯tate.action(this) 浠ュ畬鎴愭湰鎿嶄綔銆?/LI>
- ClientState錛歋tate鎺ュ彛錛屽皝瑁呬笌瀹㈡埛绔疓UI鏌愪釜鐗瑰畾鐘舵佺浉鍏崇殑琛屼負錛?
- setComponents(gui:ClientStateChangeable)錛氳緗弬鏁癵ui鎸囧畾鐨勫鎴風GUI鐨勬帶浠剁姸鎬侊紱
- action(gui:ClientStateChangeable)錛氬畬鎴愭暟鎹繚瀛樺姛鑳姐?/LI>
- ClientNormalState錛氬彲緙栬緫鐘舵佸瓙綾伙紝瀹炵幇ClientState鎺ュ彛錛?
- setComponents(gui:ClientStateChangeable)錛氳皟鐢ㄥ弬鏁癵ui鎸囧畾鐨勫鎴風GUI鐨刧etChangeableComponents()鑾峰彇鎺т歡Collection錛岀劧鍚庨亶鍘嗚緗悇鎺т歡鐘舵佷負鍙紪杈戯紱
- action(gui:ClientStateChangeable)錛氳皟鐢ㄥ弬鏁癵ui鎸囧畾鐨勫鎴風GUI鐨剆aveChangeToServer()瀹屾垚鏁版嵁淇濆瓨鍔熻兘銆?/LI>
- ClientReadOnlyState錛氬彧璇葷姸鎬佸瓙綾伙紝瀹炵幇ClientState鎺ュ彛錛?
- setComponents(gui:ClientStateChangeable)錛氳皟鐢ㄥ弬鏁癵ui鎸囧畾鐨勫鎴風GUI鐨刧etChangeableComponents()鑾峰彇鎺т歡Collection錛岀劧鍚庨亶鍘嗚緗悇鎺т歡鐘舵佷負ReadOnly錛?
- action(gui:ClientStateChangeable)錛氱┖鏂規硶錛屾湰鐘舵佷笅鏃犳暟鎹彉鍖栵紝鏃犻』淇濆瓨銆?/LI>
2.1.5 浠g爜紺轟緥
ClientStateChangeable鎺ュ彛錛?/P>
public interface ClientStateChangeable {
/**
* To get all changeable components in the GUI object.
* @return Collection contains Component objects.
*/
Collection getChageableComponents();
/**
* To save data to server.
*/
void saveChangeToServer();
}
|
AClientGUI綾伙細
public class AClientGUI extends JPanel implements ClientStateChangeable{
//鈥?
private ClientState state = null;
public DesignStep1View(ClientState state){
//鈥?
this.state = state;
this.state.setComponents(this);
}
private void okButton_actionPerformed(ActionEvent e){
state.action(this); //save data
}
public Collection getChageableComponents() {
Collection dataComponents = new ArrayList();
dataComponents.add(jComboBoxESEPattern);
//鈥?
return dataComponents;
}
public void saveChangeToServer() {
//鈥?
}
}
|
ClientState鎺ュ彛錛?/P>
public interface ClientState { /** * To set components' state in the GUI. * @param gui a GUI object which implements StateChangeable interface. */ void setComponents(ClientStateChangeable gui); /** * when user click OK-Button in a GUI, the GUI will call this method. * @param gui a GUI object which implements StateChangeable interface. */ void action(ClientStateChangeable gui); }
ClientNormalState綾伙細
olor="#CCCCCC">
public class ClientNormalState implements ClientState {
/**
* 姝e父鐘舵佷笅, 鍚勪釜鎺т歡榛樿涓哄彲緙栬緫鐨? 鎵浠ヤ笉鐢ㄥ仛浠諱綍鏇存敼
*/
public void setComponents(ClientStateChangeable gui) {}
/**
* 姝e父鐘舵佷笅, 闇瑕佸皢鐢ㄦ埛鎵浣滀慨鏀逛繚瀛樺埌鏈嶅姟绔?
*/
public void action(ClientStateChangeable gui) {
gui.saveChangeToServer();
}
}
|
ClientReadOnlyState綾伙細
public class ClientReadOnlyState implements ClientState {
/**
* 璁劇疆GUI鐨勬暟鎹帶浠朵負Read-Only
*/
public void setComponents(ClientStateChangeable gui) {
Collection components = gui.getChageableComponents();
Iterator iter = components.iterator();
while(iter.hasNext()){
JComponent jc = (JComponent)iter.next();
jc.setEnabled(false);
String toolTip = jc.getToolTipText();
String addedTip = "鍙鐘舵?;
if(toolTip == null)toolTip = addedTip;
else toolTip += ". " + addedTip;
jc.setToolTipText(toolTip);
}
}
/**
* GUI澶勪簬Read-Only鐘舵? 鏃犻渶灝嗘暟鎹繚瀛樺埌server绔?
*/
public void action(ClientStateChangeable gui) {}
}
|
2.2 綾誨瀷2錛氾紙Reuse GUI錛?/SPAN>
2.2.1 鍔ㄦ満
褰撳涓鎴風GUI甯冨眬銆佹帶浠剁被鍨嬪緢鐩鎬技錛屾墍瀹屾垚鐨勪換鍔′篃鐩鎬技鏃訛紝鍙渶瑕佺粡榪囩簿蹇冭璁★紝灝嗚繖浜汫UI鐨勫睍紺哄艦寮忕粺涓璧鋒潵錛屽悓涓涓狦UI鍙互鐢ㄥ埌澶氫釜鍦烘櫙涓紝杈懼埌閲嶇敤鐨勭洰鐨勩傛鏃訛紝榪欎簺涓嶅悓浠誨姟闇瑕佹搷浣滀笉鍚岀殑鏁版嵁闆嗗悎銆?/P>
鍙互鍦℅UI綾諱腑瀹炵幇榪欎簺涓嶅悓鏁版嵁闆嗗悎鐨勬搷浣滐紝浣嗘槸榪欎細緇欑▼搴忕淮鎶ゅ甫鏉ラ夯鐑︺傞鍏堬紝灞炰簬涓嶅悓閫昏緫鐨勬暟鎹搷浣滃嚭鐜板湪鍚屼竴綾繪枃浠朵腑錛岄犳垚閫昏緫娣蜂貢銆佺▼搴忚妯″澶э紝涓嶆槗浜庤皟璇曪紱鍏舵錛岃灝咷UI鐢ㄤ簬鏂扮殑鏁版嵁闆嗗悎鏃訛紝鍙兘鍦ㄧ浉鍚屾枃浠朵腑澧炲姞鏂扮殑浠g爜錛屾鏃訛紝璇ョ▼搴忕殑鍙淮鎶ゆч檷浣庯紝灝ゅ叾鏄柊鐨勫伐浣滅敱鍏朵粬紼嬪簭鍛樺畬鎴愭椂錛岃鐞嗚В鍘熸湁浠g爜鏄緢璐瑰姏鐨勩?/P>
鍜?.1.1鑺備腑鎻愬埌鐨勮В鍐蟲柟娉曠被浼鹼細灝嗗彉鍖栫殑閮ㄥ垎鍜屼笉鍙橀儴鍒嗗垎紱誨紑鏉ワ紝浣垮緱鍙樺寲鐨勯儴鍒嗗彲浠ョ嫭绔嬩慨鏀廣佹墿鍏呫傚叿浣撳湴錛屽垯鏄皢鏁版嵁闆嗗悎鐩稿叧鎿嶄綔浠嶨UI紼嬪簭涓娊鍙栧嚭鏉ワ紝瀹氫箟涓涓墍鏈夋暟鎹泦鍚堟搷浣滅殑鎺ュ彛錛堝嵆錛氱姸鎬佹帴鍙o級錛屼笉鍚屽湴鏁版嵁闆嗗悎鎿嶄綔浣滀負璇ユ帴鍙g殑涓涓疄鐜扮被瀛樺湪銆傝繖鏍鳳紝姣忎釜鏁版嵁闆嗗悎閮界嫭绔嬬殑灝佽浜庝竴涓姸鎬佸璞″唴錛涜屼笖錛岃瀵規柊鐨勬暟鎹嬌鐢ㄨGUI錛屽彧闇瑕佸畾涔夋柊鐨勭姸鎬佹帴鍙e疄鐜扮被鍗沖彲錛屾棤欏諱慨鏀瑰凡鏈夌被錛岀敋鑷充笉鍏沖績宸叉湁鐨勭姸鎬併?/P>
2.2.2 閫傜敤鎬?/B>
鏈被鍨嬮傜敤鐜錛氫笉鍚岀殑鏁版嵁闆嗗悎錛岀浉鍚岀殑鎿嶄綔妯″紡銆傚嵆涓嶅彉鍖栫殑瀹㈡埛绔疓UI錛屽皢涓嶅悓鐨勬暟鎹泦鍚堟搷浣滃鎵樼粰鍙樺寲鐨勭姸鎬佸璞″幓瀹屾垚銆?/P>
2.2.3 緇撴瀯錛堝浘3錛?/B>
鍥? 涓嶅悓鏁版嵁闆嗗悎錛岀浉鍚屾搷浣滄ā寮?/B>
![鍥? 涓嶅悓鏁版嵁闆嗗悎錛岀浉鍚屾搷浣滄ā寮? src=]()
2.2.4 鍙備笌鑰?/B>
- InvariableGUI錛氭湰韜笉鍙戠敓鍙樺寲鐨勫鎴風GUI綾伙紝緇存姢涓涓VariableDataState鐨勫紩鐢╯tate錛屽皢鏁版嵁鐩稿叧鎿嶄綔濮旀墭緇欒寮曠敤瀵硅薄 錛?
- saveChangeToServer()錛氳皟鐢╯tate.processData(this)瀹屾垚鏁版嵁鐩稿叧鎿嶄綔錛?/LI>
- VariableDataState錛歋tate鎺ュ彛錛屽皝瑁呬笌鏁版嵁鐩稿叧鎿嶄綔鐨勮涓猴紱
- ProcessData(gui:InvariableGUI)錛氳皟鐢ㄥ弬鏁癵ui鐨勬垚鍛樿幏鍙栨暟鎹茍瀹屾垚澶勭悊錛?/LI>
- DataState1銆丏ataState2銆?鈥?鈥?DataStateN錛氱姸鎬佸瓙綾伙紝瀹炵幇VariableDataState鎺ュ彛錛屽皝瑁呬簡鐗瑰畾鏌愪竴綾繪暟鎹泦鍚堢殑鎿嶄綔錛屽彲浠ユ牴鎹笉鍚岀殑鏁版嵁闆嗗悎瀹氫箟澶氫釜VariableDataState鎺ュ彛鐨勭姸鎬佺被錛屼粠鑰屽疄鐜頒簡瀵笽nvariableGUI鐨勯噸鐢ㄣ?/LI>
鏈被鍨嬬殑瀹炵幇浠g爜鍦ㄨ繖閲屽氨涓嶅垪鍑轟簡錛屽弬鐓?.1.5鑺備腑鐨勪唬鐮侊紝寰堝鏄撶殑灝卞彲瀹炵幇鏈被鍨嬬殑緇撴瀯銆?/P>
2.3 緇煎悎浠ヤ笂涓ょ綾誨瀷
鍙互灝嗕互涓婁袱縐嶇被鍨嬬粨鍚堣搗鏉ヤ嬌鐢紝鍗沖疄鐜頒簡瀹㈡埛绔蔣浠剁殑鏁版嵁闆嗗悎鏂歸潰瀵笹UI鐨勯噸鐢紝涔熷疄鐜頒簡鎿嶄綔妯″紡鏂歸潰瀵笹UI鐨勯噸鐢ㄣ?/P>
紼嬪簭瀹炵幇鏃訛紝鍙互鐢盙UI綾誨垎鍒淮鎶や竴涓狢lientState鐨勫紩鐢ㄥ拰涓涓猇ariableDataState鐨勫紩鐢細
- 鍒濆鍖朑UI綾繪椂錛孏UI鐨勬瀯閫犲櫒璋冪敤ClientState瀵硅薄鐨剆etComponents()鏂規硶璁劇疆鎺т歡鐨勭姸鎬侊紱
- 鐢ㄦ埛鎻愪氦鎿嶄綔鏃訛紝GUI璋冪敤ClientState瀵硅薄鐨刟ction()鏂規硶錛屽鍥?鎵紺猴紝璇ユ柟娉曚嬌鐢ㄤ紶閫掔殑gui鍙傛暟鍥炶皟GUI鐨剆aveChangeToServer()鏂規硶錛岃宻aveChangeToServer()鏂規硶鍒欐寜鐓у浘3鎵紺猴紝璋冪敤VariableDataState寮曠敤鐨勭姸鎬佸璞$殑processData()鏂規硶瀹屾垚鏁版嵁鎿嶄綔銆?/LI>
3 鎬葷粨
鏈枃浠嬬粛鐨凷tate妯″紡搴旂敤浜庡綾誨瀷鏁版嵁銆佸鎿嶄綔妯″紡鐨勫鎴風杞歡錛屽彲浠ュ彇寰楁槑鏄劇殑鏁堟灉錛涗絾濡傛灉瀹㈡埛绔被鍜岀姸鎬侀兘寰堝皯鏃訛紝浣跨敤鏈ā寮忥紝鍙嶈屽鍔犱簡瀹㈡埛绔被鏁伴噺錛屽鍔犱簡浣撶郴緇撴瀯鐨勫鏉傛э紝姝ゆ椂錛屽彲浠ヤ嬌鐢ㄧ戶鎵挎柟寮忕殑綾諱綋緋繪潵瀹炵幇閲嶇敤錛屾棤欏諱嬌鐢⊿tate鐘舵佸璞$殑濮旀墭鎿嶄綔鍜屽洖璋冩搷浣溿?/P>
]]>