当前位置: 首页 > Web前端 > JavaScript

JavaScriptDesignPatterns—StrategyPatterns

时间:2023-03-27 10:08:02 JavaScript

濡傛灉瑙夊緱鏂囩珷涓嶉敊锛岃鍏虫敞锛岀偣璧烇紝鍒嗕韩锛佺户缁垎浜妧鏈崥鏂囷紝鍏虫敞寰俊鍏紬鍙佛煈夝煆诲墠绔疞eBron寰堝揩杩庢潵浜咼avaScript璁捐妯″紡绯诲垪鐨勭浜岀瘒鈥斺€旂瓥鐣ユā寮忊€︹€︿粈涔堟槸绛栫暐妯″紡绛栫暐妯″紡瀹氫箟锛氬畾涔変竴涓郴鍒楃畻娉曪紝鎶婂畠浠竴涓竴涓皝瑁呰捣鏉ワ紝璁╁畠浠簰鐩告浛鎹€傜瓥鐣ユā寮忎竴鑸敱涓ら儴鍒嗙粍鎴愶細灏佽涓嶅悓绛栫暐鐨勭瓥鐣ョ粍锛堝寮轰唬鐮佺殑鍙噸鐢ㄦ€с€佸彲鎵╁睍鎬у拰鍙淮鎶ゆ€э紝閬垮厤澶ч噺鐨凜V浠g爜锛変笂涓嬫枃锛堝鎵樼畻娉曘€佹墽琛岀瓥鐣ワ級浠€涔堟椂鍊欎娇鐢ㄧ瓥鐣ユā寮忥紵绛栫暐妯″紡鍦ㄧ▼搴忓紑鍙戜腑琚箍娉涗娇鐢ㄣ€傚綋闇€瑕佹牴鎹笉鍚岀殑鍓嶇疆鏉′欢鎵ц涓嶅悓鐨勭畻娉曟潵鑾峰緱缁撴灉鏃讹紝浣跨敤绛栫暐妯″紡濡備綍璁╀綘鐨勪唬鐮佹洿鍔犱紭闆呭憿锛熶笉鐩镐俊锛熼偅灏卞姞鐐逛唬鐮佽澶у鎰熷彈涓€涓嬸煉╁北鐨勫▉鍔涘惂锛佸亣璁句竴涓嚱鏁拌礋璐onsul锛堟湇鍔″彂鐜帮級鍜孡B锛堣礋杞藉潎琛★級銆傝繖閲孋onsul鍑芥暟灏辨槸Context锛屽悇绉峀B绠楁硶灏辨槸绛栫暐缁勩€備紶鍏ユ湇鍔$殑鍞竴鏍囪瘑绗﹀拰璐熻浇鍧囪 绠楁硶杩斿洖鏈嶅姟鍣ㄥ疄渚嬬殑IP鍦板潃銆傚鏋滀綘鎯充簡瑙B锛屽彲浠ョ湅鐪嬭繖绡囥€怢B绠€浠嬨€戝甫浣犲畬鎴愪竴涓礋杞藉潎琛″嚱鏁扮殑瀹炵幇consul(serviceId,algorithm){if(algorithm==='random'){//闅忔満娴?/...return'xxx.xxx.x鈥嬧€媥x.xxx';}elseif(algorithm==='weightedRoundRobin'){//weightedRoundRobin娴?/...return'xxx.xxx.xxx.xxx';}elseif(algorithm==='ipHash'){//ipHash娴?/...return'xxx.xxx.xxx.xxx';}elseif(algorithm==='urlHash'){//urlHash娴?/...return'xxx.xxx.xxx.xxx';}鍚﹀垯鎴慺(algorithm==='leastConnection'){//鏈€灏戣繛鎺ユ祦//...return'xxx.xxx.xxx.xxx';}elseif(algorithm==='fair'){//鍏钩娴佺▼//...return'xxx.xxx.xxx.xxx';}}鍙互鍙戠幇杩欐浠g爜瀛樺湪涓€浜涙槑鏄剧殑闂銆侰onsul鍔熻兘杩囧ぇ锛屼笉绗﹀悎鍗曚竴鑱岃矗鍘熷垯锛岄毦浠ョ淮鎶ゃ€傝繃澶氱殑IF-ELSE璇彞鍫嗙爩锛屼唬鐮佺湅璧锋潵姣旇緝鍐椾綑锛岃礋杞藉潎琛$畻娉曞鐢ㄦ€у樊銆傚鏋滈渶瑕佸湪鍏朵粬鍦版柟浣跨敤...锛堜笉鐭ラ亾鎬庝箞鐩存帴CV锛熻В鍐充笂闈㈢殑闂锛屾垜浠彲浠ヤ娇鐢ㄧ瓥鐣ユā寮忔潵浼樺寲涓€涓嬨€傞鍏堬紝灏佽姣忎釜LB绠楁硶鍒涘缓涓€涓嫭绔嬬殑鍑芥暟鏉ユ彁楂樺鐢ㄦ€у缓绔嬬畻娉曞悕->绠楁硶鎵ц鍑芥暟鏄犲皠锛屽幓鎺夊浣欑殑IF-ELSE锛堢畝鐩村氨鏄疘F-ELSE鐨勬晳鏄燂紝绠€鍖朇onsul鍑芥暟锛屽叿浣撶畻娉曞Consul鏄€滀笉鍙鈥濈殑锛屽崟涓殑鍙墿灞曟€esponsibilityisimproved.濡傛灉闇€瑕佹墿灞曟洿澶氱殑绠楁硶锛屽彧闇€瑕佸紩鍏ョ畻娉曪紝娣诲姞閰嶇疆鍑芥暟random(serviceId){//randomflow//...return'xxx.xxx.xxx.xxx';}functionweightedRoundRobin(serviceId){//weightedRoundRobin娴?/...return'xxx.xxx.xxx.xxx';}functionipHash(serviceId){//IPHash娴?/...return'xxx.xxx.xxx.xxx';}functionurlHash(serviceId){//URL鍝堝笇娴?/...return'xxx.xxx.xxx.xxx';}functionleastConnection(serviceId){//leaseConnection娴?/...return'xxx.xxx.xxx.xxx';}functionfair(serviceId){//鍏钩娴?/...return'xxx.xxx.xxx.xxx';}constALGORITHM={RANDOM:'random',WEIGHTED_ROUND_ROBIN:'weightedRoundRobin',IP_HASH:'ipHash',URL_HASH:'urlHash',LEAST_CONNECTION:'leastConnection',FAIR:'fair',};constALGORITHM_MAP={[ALGORITHM.RANDOM]:闅忔満,[ALGORITHM.WEIGHTED_ROUND_ROBIN]:weightedRoundRobin,[ALGORITHM.IP_HASH]锛歩pHash锛孾ALGORITHM.URL_HASH]锛歶rlHash锛孾ALGORITHM.LEAST_CONNECTION]锛氭渶灏戣繛鎺ワ紝[ALGORITHM.FAIR]锛氬叕骞筹紝};functionconsul(serviceId,algorithm){returnALGORITHM_MAP[algorithm](serviceId);}绛栫暐妯″紡搴旂敤鍦烘櫙琛ㄥ崟楠岃瘉绮楃暐琛ㄥ崟楠岃瘉//绮楃暐琛ㄥ崟楠岃瘉letloginFrom=document.getElementId("loginFrom")loginFrom.onsubmit=function(e){constusername=document.getElementId("username")constpwd=document.getElementId("pwd")constmobile=document.getElementId("mobile")if(username===''){alert("use璐︽埛鍚嶄笉鑳戒负绌?)returnfalse}if(pwd.length<6){alert("瀵嗙爜闀垮害涓嶈兘灏忎簬6浣?)returnfalse}if(!/^1(3\d|4[5-9]|5[0-35-9]|6[2567]|7[0-8]|8\d|9[0-35-9])\d{8}$/.test(鎵嬫満)){alert("鎵嬫満鍙锋牸寮忎笉姝g‘")returnfalse}}浣跨敤绛栫暐妯″紡鐨勪紭鍖栧舰寮忚繘琛岄獙璇丆ontext:validateStrategygroup:strategy//浣跨敤绛栫暐妯″紡杩涜浼樺寲conststrategy={isEmpty:function({value},errMsg){if(value===''){returnerrMsg;}},isMobile:function({value},errMsg){if(!/^1(3\d|4[5-9]|5[0-35-9]|6[2567]|7[0-8]|8\d|9[0-35-9])\d{8}$/.test(value)){returnerrMsg;}},isLongerThanMinLength:function({value,len},errMsg){if(value.length