锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
涓嬭竟鐨勬潯鍒楀彧鏄畝鍗曠殑浠嬬粛錛屼互渚垮繕璁頒簡鍋跺皵榪囨潵娓歌涓涓嬶紝璇︾粏鐨勪粙緇嶈鍙傞槄錛氥?/SPAN>Java妯″紡銆嬨併?/SPAN>UML鍜屾ā寮忓簲鐢?/SPAN>-闈㈠悜瀵硅薄鍒嗘瀽涓庤璁″璁恒?/SPAN>
1. GRASP妯″紡
GRASP鏄?/SPAN>General Responsibility Assignment Software Pattern(閫氱敤鎸囪矗鍒嗛厤杞歡妯″紡)鐨勭緝鍐欍?/SPAN>
1) 涓撳妯″紡(Expert)
瑙e喅鏂規(guī)錛氬皢鑱岃矗鍒嗛厤緇欏叿鏈夊飽琛岃亴璐f墍闇瑕佺殑淇℃伅鐨勭被
閫氫織鐐瑰氨鏄細(xì)璇ュ共鍢涘共鍢涘幓錛屽埆綆″埆浜虹殑闂蹭簨鎴栬呮垜鐨勮亴璐e氨鏄悶榪欎釜錛屽埆鐨勪簨涓嶇銆?/SPAN>
涓句釜綆鍗曠殑渚嬪瓙錛屽鏋滄湁涓涓被鏄笓闂ㄥ鐞嗗瓧絎︿覆鐩稿叧鐨勭被錛岄偅涔堣繖涓被鍙兘鏈夊瓧絎︿覆澶勭悊鐩稿叧鐨勬柟娉曪紝鑰屼笉瑕佸皢鏃ユ湡澶勭悊鐨勬柟娉曞姞榪涙潵銆備篃灝辨槸鎻愰珮杞歡楂樺唴鑱氫竴縐嶅師鍒欍?/SPAN>
2) 鍒涘緩鑰?/SPAN>(Creator)
瑙e喅鏂規(guī)錛氬皢鍒涘緩涓涓被A鐨勫疄渚嬬殑鑱岃矗鎸囨淳緇欑被B鐨勫疄渚嬶紝濡傛灉涓嬪垪鏉′歡婊¤凍鐨勮瘽錛?/SPAN>
a) B鑱氬悎浜?/SPAN>A瀵硅薄
b) B鍖呭惈浜?/SPAN>A瀵硅薄
c) B綰綍浜?/SPAN>A瀵硅薄鐨勫疄渚?/SPAN>
d) B瑕佺粡甯鎬嬌鐢?/SPAN>A瀵硅薄
e) 褰?/SPAN>A鐨勫疄渚嬭鍒涘緩鏃訛紝B鍏鋒湁瑕佷紶閫掔粰A鐨勫垵濮嬪寲鏁版嵁(涔熷氨鏄B鏄垱寤?/SPAN>A鐨勫疄渚嬭繖欏逛換鍔$殑淇℃伅涓撳)
f) B鏄?/SPAN>A瀵硅薄鐨勫垱寤鴻?/SPAN>
濡傛灉浠ヤ笂鏉′歡涓笉姝竴鏉℃垚绔嬬殑璇濓紝閭d箞鏈濂借B鑱氶泦鎴栧寘鍚?/SPAN>A
閫氫織鐐瑰氨鏄細(xì)鎴戣鐢ㄤ綘鎵浠ユ垜鏉ュ垱寤轟綘錛岃涓嶈璁╁埆浜哄垱寤轟綘
榪欎釜妯″紡鏄敮鎸佷綆鑰﹀悎搴﹀師鍒欑殑涓涓綋鐜?/SPAN>
3) 楂樿仛鍚堝害鎴栭珮鍐呰仛(High Cohesion)
瑙e喅鏂規(guī)錛氬垎閰嶄竴涓亴璐g殑鏃跺欒淇濇寔綾葷殑楂樿仛鍚堝害
鑱氬悎搴︽垨鍐呰仛搴?/SPAN>(cohesion)鏄竴涓被涓殑鍚勪釜鑱岃矗涔嬮棿鐩稿叧紼嬪害鍜岄泦涓▼搴︾殑搴﹂噺銆備竴涓叿鏈夐珮搴︾浉鍏寵亴璐g殑綾誨茍涓旇繖涓被鎵鑳藉畬鎴愮殑宸ヤ綔閲忎笉鏄壒鍒法澶э紝閭d箞浠栧氨鏄叿鏈夐珮鑱氬悎搴︺?/SPAN>
4) 浣庤﹀悎搴︽垨浣庤﹀悎(Low Coupling)
瑙e喅鏂規(guī)錛氬湪鍒嗛厤涓涓亴璐f椂瑕佷嬌淇濇寔浣庤﹀悎搴︺?/SPAN>
鑰﹀悎搴?/SPAN>(coupling)鏄竴涓被涓庡叾瀹冪被鍏寵仈銆佺煡閬撳叾浠栫被鐨勪俊鎭垨鑰呬緷璧栧叾浠栫被鐨勫己寮辯▼搴︾殑搴﹂噺銆備竴涓叿鏈変綆(寮?/SPAN>)鑰﹀悎搴︾殑綾諱笉渚濊禆浜庡お澶氱殑鍏朵粬綾匯?/SPAN>
5) 鎺у埗鑰?/SPAN>(Controller)
瑙e喅鏂規(guī)錛氬皢澶勭悊緋葷粺浜嬩歡娑堟伅鐨勮亴璐e垎媧劇粰浠h〃涓嬪垪浜嬬墿鐨勭被錛?/SPAN>
a) 浠h〃鏁翠釜鈥滅郴緇熲濈殑綾伙紙铏氬寘鎺у埗鑰咃級
b) 浠h〃鏁翠釜浼佷笟鎴栫粍緇囩殑綾伙紙铏氬寘鎺у埗鑰咃級
c) 浠h〃鐪熷疄涓栫晫涓弬涓庤亴璐o紙瑙掕壊鎺у埗鑰咃級鐨勪富鍔ㄥ璞$被錛堜緥錛屼竴涓漢鐨勮鑹詫級
d) 浠h〃涓涓敤鍐典腑鎵鏈変簨浠剁殑浜哄伐澶勭悊鑰呯被錛岄氬父鐢ㄢ?/SPAN><鐢ㄤ緥鍚?/SPAN>>澶勭悊鑰呪濈殑鏂瑰紡鍛藉悕錛堢敤渚嬫帶鍒惰咃級
榪欐槸涓涓帶鍒惰呰鑹茶亴璐e垎閰嶇殑鍘熷垯錛屽氨鏄摢浜涙帶鍒跺簲璇ュ垎媧劇粰鍝釜瑙掕壊銆?/SPAN>
6)澶氭?/SPAN>
褰撶浉鍏崇殑鍙夋嫨鐨勬柟娉曟垨琛屼負(fù)闅忕潃綾誨瀷鍙樺寲鏃訛紝灝嗚涓虹殑鑱岃矗-浣跨敤澶氭佺殑鎿嶄綔-鍒嗛厤緇欓偅浜涜涓哄彉鍖栫殑綾誨瀷
涔熷氨鏄灝介噺瀵規(guī)娊璞″眰緙栫▼錛岀敤澶氭佺殑鏂規(guī)硶鏉ュ垽鏂叿浣撳簲璇ヤ嬌鐢ㄩ偅涓被錛岃屼笉鏄敤if instanceof 鏉ュ垽鏂綾繪槸浠涔堟帴鏉ユ墽琛屼粈涔堛?/SPAN>
7)綰櫄鏋?/SPAN>
涓涓函铏氭瀯鎰忓懗鐫铏氭瀯鏌愪簺浜嬬墿錛岃屼笉鏄埌浜嗚揩涓嶅緱宸叉垜浠墠榪欐牱鍋氥?/SPAN>
渚嬶紝鎴戜滑鐨?/SPAN>Sale綾葷殑鏁版嵁瑕佸瓨鍏ユ暟鎹簱錛屼絾鏄粬蹇呴』鍜屾暟鎹簱鎺ュ彛鐩歌繛鎺ワ紝濡傛灉灝嗘帴鍙h繛鎺ユ斁鍏?/SPAN>Sale綾諱腑鍔垮繀澧炲姞璇ョ被鐨勮﹀悎搴︼紝鎵浠ユ垜浠彲浠ヨ櫄鏋勪竴涓被鏉ュ鐞嗕笌鏁版嵁搴撴帴鍙h繛鎺ョ殑闂銆傝繖涓被灝辨槸鎴戜滑铏氭瀯鍑烘潵鐨勪竴涓簨鐗┿?/SPAN>
8)涓粙鑰?/SPAN>
灝嗚亴璐e垎閰嶇粰涓涓腑闂村璞′互渚垮湪鍏朵粬鏋勪歡鎴栨湇鍔′箣闂翠徊瑁侊紝榪欐牱榪欎簺鏋勪歡鎴栨湇鍔℃病鏈夎鐩存帴鑰﹀悎銆傝繖涓腑闂村璞?/SPAN>(intermediary)鍦ㄥ叾浠栨瀯浠舵垨鏈嶅姟闂村垱寤轟竴涓腑浠嬭?/SPAN>(Indirection)銆傝繖涓腑闂村璞′篃灝變簨7)涓殑綰櫄鏋勩?/SPAN>
9)涓嶈鍜岄檶鐢熶漢璁茶瘽
鍒嗛厤鑱岃矗緇欎竴涓鎴風(fēng)鐨勭洿鎺ュ璞′互浣垮畠涓庝竴涓棿鎺ュ璞¤繘琛屽崗浣滐紝榪欐牱瀹㈡埛绔棤闇鐭ラ亾榪欎釜闂存帴瀵硅薄銆?/SPAN>
榪欎釜妯″紡-涔熻鍙仛(Demeter)鍑嗗垯銆?/SPAN>
閫氫織鐐瑰氨鏄細(xì)鍙笌浣犵洿鎺ョ殑鏈嬪弸浠氫俊
涓嶈璺熲滈檶鐢熶漢鈥濊璇?/SPAN>
姣忎釜杞歡鍗曚綅瀵瑰叾浠栫殑鍗曚綅閮藉彧鏈夋渶灝戠殑鐭ヨ瘑錛岃屼笖灞闄愪簬閭d簺涓庢湰鍗曚綅瀵嗗垏鐩稿叧鐨勮蔣浠跺崟浣?/SPAN>
2. 鍏朵粬璁捐鍘熷垯
1)鈥滃紑-闂濆師鍒欙紙Open-Closed Principle錛屾垨鑰?/SPAN>OCP錛?/SPAN>
涓涓蔣浠跺疄浣撳簲褰撳鎵╁睍寮鏀撅紝瀵逛慨鏀瑰叧闂?/SPAN>
鎰忔濆氨鏄湪璁捐涓涓ā鍧楃殑鏃跺欙紝搴斿綋浣胯繖涓ā鍧楀湪涓嶈淇敼鐨勫墠鎻愪笅琚墿灞曘傛崲璦涔嬶紝搴斿綋鍙互鍦ㄤ笉淇敼浠g爜鐨勬儏鍐典笅鏀瑰彉榪欎釜妯″潡鐨勮涓恒?/SPAN>
2)閲屾皬浠f崲鍘熷垯錛?/SPAN>Liskov Substitution Principle, 鎴栬?/SPAN>LSP錛?/SPAN>
榪欎釜灝辨槸灝介噺鐢ㄥ鎬佺殑鏂規(guī)硶緙栫▼錛屼篃灝辨槸GRASP妯″紡涓殑澶氭併?/SPAN>
3)渚濊禆鍊掕漿鍘熷垯錛?/SPAN>Dependency Inversion Principle, 鎴栬?/SPAN>DIP錛?/SPAN>
渚濊禆鍊掕漿鍘熷垯璁茬殑鏄細(xì)瑕佷緷璧栦簬鎶借薄錛屼笉瑕佷緷璧栦簬鍏蜂綋
灝辨槸璇存垜浠敖閲忓湪鎶借薄灞傝繘琛屾帶鍒剁紪紼嬶紝瑕侀拡瀵規(guī)帴鍙g紪紼嬶紝涓嶈閽堝瀹炵幇緙栫▼銆?/SPAN>
4)鎺ュ彛闅旂鍘熷垯錛?/SPAN>Interface Segregation Principle, 鎴栬?/SPAN>ISP錛?/SPAN>
浣跨敤澶氫釜涓撻棬鐨勬帴鍙f瘮浣跨敤鍗曚竴鐨勬繪帴鍙h濂姐備篃灝辨槸錛屼粠涓涓鎴風(fēng)被鐨勮搴︽潵璁詫細(xì)涓涓被瀵瑰彟澶栦竴涓被鐨勪緷璧栨у簲褰撴槸寤虹珛鍦ㄦ渶灝忕殑鎺ュ彛涓婄殑銆?/SPAN>
5)緇勫悎/鑱氬悎澶嶇敤鍘熷垯錛?/SPAN>Composition/Aggregation Principle, 鎴栬?/SPAN>CARP錛?/SPAN>
鍙堝彨鍚堟垚澶嶇敤鍘熷垯銆傚師鍒欏氨鏄湪涓涓柊鐨勫璞¢噷闈嬌鐢ㄤ竴浜涘凡鏈夌殑瀵硅薄錛屼嬌涔嬫垚涓烘柊瀵硅薄鐨勪竴閮ㄥ垎錛氭柊鐨勫璞¢氳繃鍚戣繖浜涘璞$殑濮旀淳杈懼埌澶嶇敤宸叉湁鍔熻兘鐨勭洰鐨勩備篃灝辨槸錛岃灝介噺浣跨敤綾葷殑鍚堟垚澶嶇敤錛屽敖閲忎笉瑕佷嬌鐢ㄧ戶鎵?/P>
6)鍙樹笌涓嶅彉鐨勫垎紱?BR> 鏇存墿灞曚竴姝?灝辨槸灝嗕笉鍚屽彉鍖栫殑緇勪歡榪涜闅旂.鏈綆鍗曠殑渚嬪瓙灝辨槸javabean涓殑瀛樺彇鍣ㄣ傚畠闅旂浜嗕笉鍙樼殑鎺ュ彛鍜屽彉鍖栫殑鍐呴儴灞炴с傝繖鏂歸潰浣撶幇鏈濂界殑涓漢瑙夊緱灝辨槸eclipse錛岄氳繃鍙樺寲鐨勬彃浠訛紝eclipse鍙互鐢ㄦ潵瀹炵幇浠諱綍鍔熻兘銆?/SPAN>