锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
1.const int r=100; //鏍囧噯const鍙橀噺澹版槑鍔犲垵濮嬪寲錛屽洜涓洪粯璁ゅ唴閮ㄨ繛鎺ユ墍浠ュ繀欏昏鍒濆鍖栵紝鍏朵綔鐢ㄥ煙涓烘鏂囦歡錛岀紪璇戝櫒緇忚繃綾誨瀷媯鏌ュ悗鐩存帴鐢?00鍦ㄧ紪璇戞椂鏇挎崲銆?nbsp;
2.extend const int r=100; //灝哻onst鏀逛負(fù)澶栭儴榪炴帴錛屼綔鐢ㄤ簬鎵╁ぇ鑷沖叏灞錛岀紪璇戞椂浼?xì)鍒嗛厤鍐呭瓨锛岒q朵笖鍙互涓嶈繘琛屽垵濮嬪寲錛屼粎浠呬綔涓哄0鏄庯紝緙栬瘧鍣ㄨ涓哄湪紼嬪簭鍏朵粬鍦版柟榪涜浜嗗畾涔夈?nbsp;
3.const int r[ ]={1,2,3,4};
struct S {int a,b;};
const S s[ ]={(1,2),(3.4)}; //浠ヤ笂涓ょ閮芥槸甯擱噺闆嗗悎錛岀紪璇戝櫒浼?xì)湄?fù)鍏跺垎閰嶅唴瀛橈紝鎵浠ヤ笉鑳藉湪緙栬瘧鏈熼棿浣跨敤鍏朵腑鐨勫鹼紝渚嬪錛歩nt temp[r[2]];榪欐牱鐨勭紪璇戝櫒浼?xì)鎶ュ憡涓嶈兘鎵惧埌甯搁噺琛ㄨ緫旨?nbsp;
浜屻佸浜庢寚閽?nbsp;
1.const int *r=&x; //澹版槑r涓轟竴涓寚鍚戝父閲忕殑x鐨勬寚閽堬紝r鎸囧悜鐨勫璞′笉鑳借淇敼錛屼絾浠栧彲浠ユ寚鍚戜換浣曞湴鍧鐨勫父閲忋?nbsp;
2.int const *r=&x; //涓庣敤娉?瀹屽叏絳変環(huán)錛屾病鏈変換浣曞尯鍒?nbsp;
3.int * const r=&x; //澹版槑r涓轟竴涓父閲忔寚閽堬紝浠栨寚鍚憍錛宺榪欎釜鎸囬拡鐨勬寚鍚戜笉鑳借淇敼錛屼絾浠栨寚鍚戠殑鍦板潃鐨勫唴瀹瑰彲浠ヤ慨鏀廣?nbsp;
4.const int * const r=&x; //緇煎悎1銆?鐢ㄦ硶錛宺鏄竴涓寚鍚戝父閲忕殑甯擱噺鍨嬫寚閽堛?nbsp;
涓夈佸浜庣被鍨嬫鏌?nbsp;
鍙互鎶婁竴涓潪const瀵硅薄璧嬬粰涓涓寚鍚慶onst鐨勬寚閽堬紝鍥犱負(fù)鏈夋椂鍊欐垜浠笉鎯充粠榪欎釜鎸囬拡鏉ヤ慨鏀瑰叾瀵硅薄鐨勫鹼紱浣嗘槸涓嶅彲浠ユ妸涓涓猚onst瀵硅薄璧嬪肩粰涓涓潪const鎸囬拡錛屽洜涓鴻繖鏍峰彲鑳戒細(xì)閫氳繃榪欎釜鎸囬拡鏀瑰彉鎸囧悜瀵硅薄鐨勫鹼紝浣嗕篃瀛樺湪浣胯繖縐嶆搷浣滈氳繃鐨勫悎娉曞寲鍐欐硶錛屼嬌鐢ㄧ被鍨嬪己鍒惰漿鎹㈠彲浠ラ氳繃鎸囬拡鏀瑰彉const瀵硅薄錛?nbsp;
const int r=100;
int * ptr = const_cast<int *>(&r); //C++鏍囧噯錛孋璇█浣跨敤錛歩nt * ptr =(int*)&r;
鍥涖佸浜庡瓧絎︽暟緇?nbsp;
濡俢har * name = “china”; 榪欐牱鐨勮鍙ワ紝鍦ㄧ紪璇戞椂鏄兘澶熼氳繃鐨勶紝浣嗘槸”china”鏄父閲忓瓧絎︽暟緇勶紝浠諱綍鎯充慨鏀逛粬鐨勬搷浣滀篃鑳介氳繃緙栬瘧浣嗕細(xì)寮曡搗榪愯鏃墮敊璇紝濡傛灉鎴戜滑鎯充慨鏀瑰瓧絎︽暟緇勭殑璇濆氨瑕佷嬌鐢╟har name[ ] = “china”; 榪欑褰㈠紡銆?nbsp;
浜斻佸浜庡嚱鏁?nbsp;
1.void Fuction1 ( const int r ); //姝ゅ涓哄弬鏁頒紶閫抍onst鍊鹼紝鎰忎箟鏄彉閲忓垵鍊間笉鑳借鍑芥暟鏀瑰彉
2.const int Fuction1 (int); //姝ゅ榪斿洖const鍊鹼紝鎰忔濇寚榪斿洖鐨勫師鍑芥暟閲岀殑鍙橀噺鐨勫垵鍊間笉鑳借淇敼錛屼絾鏄嚱鏁版寜鍊艱繑鍥炵殑榪欎釜鍙橀噺琚埗鎴愬壇鏈紝鑳戒笉鑳借淇敼灝辨病鏈変簡鎰忎箟錛屽畠鍙互琚祴緇欎換浣曠殑const鎴栭潪const綾誨瀷鍙橀噺錛屽畬鍏ㄤ笉闇瑕佸姞涓婅繖涓猚onst鍏抽敭瀛椼備絾榪欏彧瀵逛簬鍐呴儴綾誨瀷鑰岃█錛堝洜涓哄唴閮ㄧ被鍨嬭繑鍥炵殑鑲畾鏄竴涓鹼紝鑰屼笉浼?xì)杩斿洖涓涓彉閲忥紝涓嶄細(xì)浣滀負(fù)宸﹀間嬌鐢級錛屽浜庣敤鎴瘋嚜瀹氫箟綾誨瀷錛岃繑鍥炲兼槸甯擱噺鏄潪甯擱噸瑕佺殑錛岃涓嬮潰鏉℃3銆?nbsp;
3.Class CX; //鍐呴儴鏈夋瀯閫犲嚱鏁幫紝澹版槑濡侰X(int r =0)
CX Fuction1 () { return CX(); }
const CX Fuction2 () { return CX(); }
濡傛湁涓婇潰鐨勮嚜瀹氫箟綾籆X錛屽拰鍑芥暟Fuction1()鍜孎uction2(),鎴戜滑榪涜濡備笅鎿嶄綔鏃訛細(xì)
Fuction1() = CX(1); //娌℃湁闂錛屽彲浠ヤ綔涓哄乏鍊艱皟鐢?nbsp;
Fuction2() = CX(1); //緙栬瘧閿欒錛宑onst榪斿洖鍊肩姝綔涓哄乏鍊艱皟鐢ㄣ傚洜涓哄乏鍊兼妸榪斿洖鍊間綔涓哄彉閲忎細(xì)淇敼鍏惰繑鍥炲鹼紝const澹版槑紱佹榪欑淇敼銆?nbsp;
4.鍑芥暟涓寚閽堢殑const浼犻掑拰榪斿洖錛?nbsp;
int F1 (const char * pstr); //浣滀負(fù)浼犻掔殑鏃跺欎嬌鐢╟onst淇グ鍙互淇濊瘉涓嶄細(xì)閫氳繃榪欎釜鎸囬拡鏉ヤ慨鏀逛紶閫掑弬鏁扮殑鍒濆鹼紝榪欓噷鍦ㄥ嚱鏁板唴閮ㄤ換浣曚慨鏀?pstr鐨勪紒鍥鵑兘浼?xì)寮曡碉L(fēng)紪璇戦敊璇?nbsp;
const char * F2 (); //鎰忎箟鏄嚱鏁拌繑鍥炵殑鎸囬拡鎸囧悜鐨勫璞℃槸涓涓猚onst瀵硅薄錛屽畠蹇呴』璧嬬粰涓涓悓鏍鋒槸鎸囧悜const瀵硅薄鐨勬寚閽堛?nbsp;
const char * const F3(); //姣斾笂闈㈠浜嗕竴涓猚onst錛岃繖涓猚onst鐨勬剰涔夊彧鏄湪浠栬鐢ㄤ綔宸﹀兼椂鏈夋晥錛屽畠琛ㄦ槑浜嗚繖涓寚閽堥櫎浜嗘寚鍚慶onst瀵硅薄澶栵紝瀹冩湰韜篃涓嶈兘琚慨鏀癸紝鎵浠ュ氨涓嶈兘褰撲綔宸﹀兼潵澶勭悊銆?nbsp;
5.鍑芥暟涓紩鐢ㄧ殑const浼犻掞細(xì)
void F1 ( const X& px); //榪欐牱鐨勪竴涓猚onst寮曠敤浼犻掑拰鏈鏅氱殑鍑芥暟鎸夊間紶閫掔殑鏁堟灉鏄竴妯′竴鏍風(fēng)殑錛屼粬紱佹瀵瑰紩鐢ㄧ殑瀵硅薄鐨勪竴鍒囦慨鏀癸紝鍞竴涓嶅悓鐨勬槸鎸夊間紶閫掍細(xì)鍏堝緩绔嬩竴涓被瀵硅薄鐨勫壇鏈紝鐒跺悗浼犻掕繃鍘伙紝鑰屽畠鐩存帴浼犻掑湴鍧錛屾墍浠ヨ繖縐嶄紶閫掓瘮鎸夊間紶閫掓洿鏈夋晥銆?nbsp;
**鍙﹀鍙湁寮曠敤鐨刢onst浼犻掑彲浠ヤ紶閫掍竴涓復(fù)鏃跺璞★紝鍥犱負(fù)涓存椂瀵硅薄閮芥槸const灞炴э紝涓旀槸涓嶅彲瑙佺殑錛屼粬鐭椂闂村瓨鍦ㄤ竴涓眬閮ㄥ煙涓紝鎵浠ヤ笉鑳戒嬌鐢ㄦ寚閽堬紝鍙湁寮曠敤鐨刢onst浼犻掕兘澶熸崟鎹夊埌榪欎釜瀹朵紮銆?nbsp;
鍏佸浜庣被
1.棣栧厛錛屽浜巆onst鐨勬垚鍛樺彉閲忥紝鍙兘鍦ㄦ瀯閫犲嚱鏁伴噷浣跨敤鍒濆鍖栨垚鍛樺垪琛ㄦ潵鍒濆鍖栵紝璇曞浘鍦ㄦ瀯閫犲嚱鏁頒綋鍐呰繘琛屽垵濮嬪寲const鎴愬憳鍙橀噺浼?xì)寮曡碉L(fēng)紪璇戦敊璇傚垵濮嬪寲鎴愬憳鍒楄〃褰㈠錛?nbsp;
2.X:: X ( int ir ): r(ir) {} //鍋囪r鏄被X鐨刢onst鎴愬憳鍙橀噺
2.const鎴愬憳鍑芥暟銆傛彁鍒拌繖涓蹇甸鍏堣璋堝埌const瀵硅薄錛屾璞″唴緗被鍨嬭兘澶熷畾涔塩onst瀵硅薄涓鏍鳳紙const int r=10;錛夛紝鐢ㄦ埛鑷畾涔夌被鍨嬩篃鍙互瀹氫箟const瀵硅薄(const X px(10);)錛岀紪璇戝櫒瑕佷繚璇佽繖涓璞″湪鍏剁敓鍛藉懆鏈熷唴涓嶈兘澶熻鏀瑰彉銆傚鏋滀綘瀹氫箟浜嗚繖鏍風(fēng)殑涓涓猚onst瀵硅薄錛岄偅涔堝浜庤繖涓璞$殑涓鍒囬潪const鎴愬憳鍑芥暟鐨勮皟鐢紝緙栬瘧鍣ㄤ負(fù)浜嗕繚璇佸璞$殑const鐗規(guī)э紝閮戒細(xì)紱佹騫跺湪緙栬瘧鏈熼棿鎶ラ敊銆傛墍浠ュ鏋滀綘鎯寵浣犵殑鎴愬憳鍑芥暟鑳藉鍦╟onst瀵硅薄涓婅繘琛屾搷浣滅殑璇濓紝灝辮鎶婅繖涓嚱鏁板0鏄庝負(fù)const鎴愬憳鍑芥暟銆傚亣濡俧( )鏄被涓殑鎴愬憳鍑芥暟鐨勮瘽錛屽畠鐨勫0鏄庡艦濡傦細(xì)
int f( ) const; //const鏀懼湪鍑芥暟鐨勬渶鍚庯紝緙栬瘧鍣ㄤ細(xì)瀵硅繖涓嚱鏁拌繘琛屾鏌ワ紝鍦ㄨ繖涓嚱鏁頒腑鐨勪換浣曡瘯鍥炬敼鍙樻垚鍛樺彉閲忓拰璋冪敤闈瀋onst鎴愬憳鍑芥暟鐨勬搷浣滈兘琚涓洪潪娉?nbsp;
娉ㄦ剰錛氱被鐨勬瀯閫犲拰鏋愭瀯鍑芥暟閮戒笉鑳芥槸const鍑芥暟銆?nbsp;
3.寤虹珛浜嗕竴涓猚onst鎴愬憳鍑芥暟錛屼絾浠嶇劧鎯崇敤榪欎釜鍑芥暟鏀瑰彉瀵硅薄鍐呴儴鐨勬暟鎹傝繖鏍風(fēng)殑涓涓姹備篃浼?xì)缁忓笖R亣鍒幫紝灝ゅ叾鏄湪涓涓嫑鍒葷殑闈㈣瘯鑰冨畼閭i噷銆傞鍏堟垜浠寮勬竻妤氳冨畼鐨勮姹傦紝鍥犱負(fù)鏈変袱縐嶆柟娉曞彲浠ュ疄鐜幫紝濡傛灉榪欎綅鑰冨畼瑕佹眰涓嶆敼鍙樺師鏉ョ被鐨勪換浣曚笢瑗匡紝鍙浣犱粠褰撳墠榪欎釜const鎴愬憳鍑芥暟鍏ユ墜錛岄偅涔堜綘鍙湁浣跨敤鍓嶉潰鎻愬埌鐨勭被鍨嬪己鍒惰漿鎹㈡柟娉曘傚疄渚嬪涓嬶細(xì)
//鍋囧鏈変竴涓彨鍋歑鐨勭被錛屽畠鏈変竴涓猧nt鎴愬憳鍙橀噺r錛屾垜浠渶瑕侀氳繃涓涓猚onst鎴愬憳鍑芥暟f( )鏉ュ榪欎釜r榪涜++r鎿嶄綔錛屼唬鐮佸涓?nbsp;
void X::f( ) const
{ (const_cast(this)) -> ++r; } //閫氳繃this鎸囬拡榪涜綾誨瀷寮哄埗杞崲瀹炵幇
鍙﹀涓縐嶆柟娉曞氨鏄嬌鐢ㄥ叧閿瓧錛歮utable銆傚鏋滀綘鐨勬垚鍛樺彉閲忓湪瀹氫箟鏃舵槸榪欎釜鏍峰瓙鐨勶細(xì)
mutable int r ;
閭d箞瀹冨氨鍛婅瘔緙栬瘧鍣ㄨ繖涓垚鍛樺彉閲忓彲浠ラ氳繃const鎴愬憳鍑芥暟鏀瑰彉銆傜紪璇戝櫒灝變笉浼?xì)鍐嶇悊浼?xì)瀵逛粬鐨勬鏌ヤ簡銆?nbsp;
]]>
vec.push_back(1);
vec.push_back(14);
浼楁墍鍛ㄧ煡錛寁ector浣跨敤鐨勬槸綰挎ц繛緇瓨鍌ㄧ┖闂達(dá)紝涓婂浘涓殑_First鍜宊Last鍒嗗埆鎸囧悜閰嶇疆寰楁潵鐨勮繛緇┖闂翠腑鐩墠宸茶浣跨敤鐨勮寖鍥達(dá)紝鑰宊End鎸囧悜鏁村潡榪炵畫絀洪棿鐨勫熬绔?br>鍥犳錛屾垜浠彲浠ョ敤濡備笅鏂瑰紡鏉ユ煡鐪媣ector閲岀殑鍐呭錛?br>vec._First[0]
vec._First[1]
鍚岀悊錛屽浜庡祵濂楃殑vector(濡備笅浠g爜涓殑vv)
vector<int> vec;
vec.push_back(1);
vec.push_back(14);
vector< vector<int> > vv;
vv.push_back(vec);
vec.push_back(15);
vv.push_back(vec);
]]>
鍍忎笂闈㈣繖鏍峰彧鏄垹闄ゅ崟涓妭鐐?map鐨勫艦涓轟笉浼?xì)鍑虹庮C換鍔¢棶棰?
浣嗘槸褰撳湪涓涓驚鐜噷鐢ㄧ殑鏃跺?寰寰浼?xì)琚鐢?閭f槸鍥犱負(fù)浣跨敤鑰呮病鏈夋紜悊瑙terator鐨勬蹇?
鍍忎笅闈㈣繖鏍風(fēng)殑涓涓緥瀛愬氨鏄敊璇殑鍐欐硶,
eg:
榪欐槸涓縐嶉敊璇殑鍐欐硶,浼?xì)瀵艰嚧绋嬪簭琛屼皋Z笉鍙煡.絀跺叾鍘熷洜鏄痬ap 鏄叧鑱斿鍣?瀵逛簬鍏寵仈瀹瑰櫒鏉ヨ錛屽鏋滄煇涓涓厓绱犲凡緇忚鍒犻櫎錛岄偅涔堝叾瀵瑰簲鐨勮凱浠e櫒灝卞け鏁堜簡錛屼笉搴旇鍐嶈浣跨敤錛涘惁鍒欎細(xì)瀵艱嚧紼嬪簭鏃犲畾涔夌殑琛屼負(fù)銆?br>鍙互鐢ㄤ互涓嬫柟娉曡В鍐寵繖闂:
姝g‘鐨勫啓娉?br>1.浣跨敤鍒犻櫎涔嬪墠鐨勮凱浠e櫒瀹氫綅涓嬩竴涓厓绱犮係TL寤鴻鐨勪嬌鐢ㄦ柟寮?br>
2. erase() 鎴愬憳鍑芥暟榪斿洖涓嬩竴涓厓绱犵殑榪唬鍣?/p>
GMOS錛?span>goals/objects/methods/slecetion rules錛?/span>
鍩烘湰鎿嶄綔鏃墮棿
|
鍚嶇О鍜屽姪璁?/span> |
鍏稿瀷鍊?/span> |
鍚箟 |
|
鍑婚敭錛?span>Keying錛夛紝K |
0.2縐?/span> |
鏁插嚮閿洏涓婄殑涓涓敭鎵闇瑕佺殑鏃墮棿 |
|
鎸囧悜錛?span>Pointing錛夛紝P |
1.1縐?/span> |
鐢ㄦ埛鎸囧悜鏄劇ず灞忎笂鏌愪竴浣嶇疆鎵闇瑕佺殑鏃墮棿 |
|
褰掍綅錛?span>Homing錛夛紝H |
0.4縐?/span> |
鐢ㄦ埛灝嗘墜浠庨敭鐩樼Щ鍔ㄥ埌榧犳爣鎴栬呬粠榧犳爣縐誨姩鍒伴敭鐩橀渶瑕佺殑鏃墮棿 |
|
蹇冪悊鍑嗗錛?span>Mentally preparing錛夛紝M |
1.35縐?/span> |
鐢ㄦ埛榪涘叆涓嬩竴姝ユ墍闇瑕佺殑蹇冪悊鍑嗗鏃墮棿 |
|
鍝嶅簲錛?span>Responding錛夛紝R |
|
|
鎻掑叆鍒犻櫎蹇冪悊鍑嗗媧誨姩鐨勮鍒?/span>
|
瑙勫垯0 鍊欓?span>M鐨勫垵濮嬫彃鍏?/span> |
鍦ㄦ墍鏈夌殑K涔嬪墠鎻掑叆M銆傚湪鎵鏈夌敤浜庨夋嫨鍛戒護(hù)鐨?span>P涔嬪墠鎻掑叆M銆備絾鏄浜庨夋嫨鍛戒護(hù)鍙傛暟鐨?span>P錛屼笉瑕佹彃鍏?span>M銆?/span> |
|
瑙勫垯1 棰勬湡M鐨勫垹闄?/span> |
濡傛灉M鍓嶉潰鐨勬搷浣滅鍙瘋兘瀹屽叏棰勬湡M鍚庤竟鐨勪竴涓搷浣滅錛屽垯灝嗚M鍒犻櫎銆備緥濡傜Щ鍔ㄩ紶鏍囧茍鐐瑰嚮鐩爣錛屽氨闇瑕佸垹闄ゆ寜瑙勫垯0鎻掑叆鐨?span>M錛屽彉PMK涓?span>PK銆?/span> |
|
瑙勫垯2 璁ょ煡浣嗘効鍐?span>M鐨勫垹闄?/span> |
濡傛灉涓涓?span>MK灞炰簬鍚屼竴涓鐭ュ崟鍏冿紝鍒欏垹闄ら櫎浜嗙涓涓互澶栫殑鎵鏈?span>M銆備緥濡傝繛緇緭鍏ヤ竴涓崟璇嶆垨鑰呭涓暟瀛椼?/span> |
|
瑙勫垯3 榪炵畫緇堢粨絎︿箣鍓?span>M鐨勫垹闄?/span> |
濡傛灉K鏄竴涓鐭ュ崟鍏冨悗闈㈢殑澶氫綑鍒嗛殧絎︼紝濡傚懡浠ょ殑鍒嗛殧絎﹀悗闈㈢揣璺熺潃鍙傛暟鐨勫垎闅旂錛屽垯灝嗕箣鍓嶇殑M鍒犻櫎銆?/span> |
|
瑙勫垯4 浣滀負(fù)鍛戒護(hù)緇堢粨絎︾殑M鐨勫垹闄?/span> |
濡傛灉K鏄竴涓垎闅旂錛屼笖鍚庨潰绱ц窡鐫涓涓父閲忓瓧絎︿覆錛屽垯灝嗕箣鍓嶇殑M鍒犻櫎銆?/span> |
|
瑙勫垯5 閲嶅彔M鐨勫垹闄?/span> |
涓嶈璁板叆浠諱綍涓?span>R閲嶅彔鐨?span>M銆?/span> |
涓句緥錛?/span>
璁捐涓涓蔣浠跺彲浠ュ畬鎴愬涓嬪姛鑳斤紝鍙互鎶婃憚姘忔俯搴﹁漿鎹㈡垚鍗庢皬娓╁害錛屼篃鍙互鎶婂崕姘忔俯搴﹁漿鎹㈡垚鎽勬皬娓╁害銆?/span>
鐣岄潰涓濡備笅錛?/span>
緙虹渷閫夐」娌℃湁閫変腑
HPKHKKKKK
HMPMKMHMKMKMKMKMK
HMPKHMKKKKMK
2H
緙虹渷閫夐」閫変腑
MKKKKMK
鍙栦袱鑰呯殑騫沖潎鍊鹼紙7.15 + 3.7錛?span>/2 =5.4縐?/span>
1錛嶥uplicated Code
銆銆浠g爜閲嶅鍑犱箮鏄渶甯歌鐨勫紓鍛充簡銆備粬涔熸槸Refactoring 鐨勪富瑕佺洰鏍囦箣涓銆備唬鐮侀噸澶嶅線寰鏉ヨ嚜浜巆opy-and-paste 鐨勭紪紼嬮鏍箋備笌浠栫浉瀵瑰簲OAOO 鏄竴涓ソ緋葷粺鐨勯噸瑕佹爣蹇椼?
2錛嶭ong method
銆銆瀹冩槸浼犵粺緇撴瀯鍖栫殑“閬楁瘨“銆備竴涓柟娉曞簲褰撳叿鏈夎嚜鎴戠嫭绔嬬殑鎰忓浘錛屼笉瑕佹妸鍑犱釜鎰忓浘鏀懼湪涓璧楓?
3錛嶭arge Class
銆銆澶х被灝辨槸浣犳妸澶鐨勮矗浠諱氦緇欎簡涓涓被銆傝繖閲岀殑瑙勫垯鏄疧ne Class One Responsibility銆?
4錛嶥ivergent Change
銆銆涓涓被閲岄潰鐨勫唴瀹瑰彉鍖栫巼涓嶅悓銆傛煇浜涚姸鎬佷竴涓皬鏃跺彉涓嬈★紝鏌愪簺鍒欏嚑涓湀涓騫存墠鍙樹竴嬈★紱鏌愪簺鐘舵佸洜涓鴻繖鏂歸潰鐨勫師鍥犲彂鐢熷彉鍖栵紝鑰屽彟涓浜涘垯鍥犱負(fù)鍏朵粬鏂歸潰鐨勫師鍥犲彉涓嬈°傞潰鍚戝璞$殑鎶借薄灝辨槸鎶婄浉瀵逛笉鍙樼殑鍜岀浉瀵瑰彉鍖栫浉闅旂銆傛妸闂鍙樺寲鐨勪竴鏂歸潰鍜屽彟涓鏂歸潰鐩擱殧紱匯傝繖浣垮緱榪欎簺鐩稿涓嶅彉鐨勫彲浠ラ噸鐢ㄣ傞棶棰樺彉鍖栫殑姣忎釜鏂歸潰閮藉彲浠ュ崟鐙噸鐢ㄣ傝繖縐嶇浉寮傚彉鍖栫殑鍏卞瓨浣垮緱閲嶇敤闈炲父鍥伴毦銆?
5錛嶴hotgun Surgery
銆銆榪欐濂藉拰涓婇潰鐩稿弽銆傚緋葷粺涓涓湴鏂圭殑鏀瑰彉娑夊強(qiáng)鍒板叾浠栬澶氬湴鏂圭殑鐩稿叧鏀瑰彉銆傝繖浜涘彉鍖栫巼鍜屽彉鍖栧唴瀹圭浉浼肩殑鐘舵佸拰琛屼負(fù)閫氬父搴斿綋鏀懼湪鍚屼竴涓被涓?
6錛嶧eature Envy
銆銆瀵硅薄鐨勭洰鐨勫氨鏄皝瑁呯姸鎬佷互鍙?qiáng)涓帢q欎簺鐘舵佺揣瀵嗙浉鍏崇殑琛屼負(fù)銆傚鏋滀竴涓被鐨勬柟娉曢綣佺敤get 鏂規(guī)硶瀛樺彇鍏朵粬綾葷殑鐘舵佽繘琛岃綆楋紝閭d箞浣犺鑰冭檻鎶婅涓虹Щ鍒版秹鍙?qiáng)鐘舵佹暟鐩渶澶氱殑閭d釜綾匯?
7錛嶥ata Clumps
銆銆鏌愪簺鏁版嵁閫氬父鍍忓瀛愪竴鏍鋒垚緹ょ帺鑰嶏細(xì)涓璧峰嚭鐜板湪寰堝綾葷殑鎴愬憳鍙橀噺涓紝涓璧峰嚭鐜板湪璁稿鏂規(guī)硶鐨勫弬鏁頒腑…..錛岃繖浜涙暟鎹垨璁稿簲璇ヨ嚜宸辯嫭绔嬪艦鎴愬璞°?
8錛嶱rimitive Obsession
銆銆闈㈠悜瀵硅薄鐨勬柊鎵嬮氬父涔?fàn)鎯娇鐢ㄥ嚑涓師濮嬀c誨瀷鐨勬暟鎹潵琛ㄧず涓涓蹇點傝濡傚浜庤寖鍥達(dá)紝浠栦滑浼?xì)鋴社敤涓や釜鏁板瓧銆傚浜嶮oney錛屼粬浠細(xì)鐢ㄤ竴涓誕鐐規(guī)暟鏉ヨ〃紺恒傚洜涓轟綘娌℃湁浣跨敤瀵硅薄鏉ヨ〃杈鵑棶棰樹腑瀛樺湪鐨勬蹇碉紝榪欎嬌寰椾唬鐮佸彉鐨勯毦浠ョ悊瑙o紝瑙e喅闂鐨勯毦搴﹀ぇ澶у鍔犮?
銆銆濂界殑涔?fàn)鎯槸鎵╁厖璇a鎵鑳芥彁渚涘師濮嬬被鍨嬶紝鐢ㄥ皬瀵硅薄鏉ヨ〃紺鴻寖鍥淬侀噾棰濄佽漿鍖栫巼銆侀偖鏀跨紪鐮佺瓑絳夈?
9錛嶴witch Statement
銆銆鍩轟簬甯擱噺鐨勫紑鍏寵鍙ユ槸 OO 鐨勫ぇ鏁岋紝浣犲簲褰撴妸浠栧彉涓哄瓙綾匯乻tate 鎴杝trategy銆?
10錛?Parallel Inheritance Hierarchies
銆銆騫惰鐨勭戶鎵垮眰嬈℃槸shotgun surgery 鐨勭壒孌婃儏鍐點傚洜涓哄綋浣犳敼鍙樹竴涓眰嬈′腑鐨勬煇涓涓被鏃訛紝浣犲繀欏誨悓鏃舵敼鍙樺彟澶栦竴涓眰嬈$殑騫惰瀛愮被銆?
11錛?Lazy Class
銆銆涓涓共媧諱笉澶氱殑綾匯傜被鐨勭淮鎶ら渶瑕侀澶栫殑寮閿錛屽鏋滀竴涓被鎵挎媴浜嗗お灝戠殑璐d換錛屽簲褰撴秷闄ゅ畠銆?
12錛?Speculative Generality
銆銆涓涓被瀹炵幇浜嗕粠鏈敤鍒扮殑鍔熻兘鍜岄氱敤鎬с傞氬父榪欐牱鐨勭被鎴栨柟娉曞敮涓鐨勭敤鎴鋒槸testcase銆備笉瑕佺姽璞紝鍒犻櫎瀹冦?
13錛?Temporary Field
銆銆涓涓璞$殑灞炴у彲鑳藉彧鍦ㄦ煇浜涙儏鍐典笅鎵嶆湁鎰忎箟銆傝繖鏍風(fēng)殑浠g爜灝嗛毦浠ョ悊瑙c備笓闂ㄥ緩绔嬩竴涓璞℃潵鎸佹湁榪欐牱鐨勫鍎垮睘鎬э紝鎶婂彧鍜屼粬鐩稿叧鐨勮涓虹Щ鍒拌綾匯傛渶甯歌鐨勬槸涓涓壒瀹氱殑綆楁硶闇瑕佹煇浜涘彧鏈夎綆楁硶鎵嶆湁鐢ㄧ殑鍙橀噺銆?
14錛?Message Chain
銆銆娑堟伅閾懼彂鐢熶簬褰撲竴涓鎴峰悜涓涓璞¤姹傚彟涓涓璞★紝鐒跺悗瀹㈡埛鍙堝悜榪欏彟涓瀵硅薄瑕佹眰鍙︿竴涓璞★紝鍐嶅悜榪欏彟涓涓璞¤姹傚彟涓涓璞★紝濡傛濡傛銆傝繖鏃訛紝浣犻渶瑕侀殣钘忓垎媧俱?
15錛?Middle Man
銆銆瀵硅薄鐨勫熀鏈壒鎬т箣涓灝辨槸灝佽錛岃屼綘緇忓父浼?xì)閫氳繃鍒嗘淳鍘誨疄鐜板皝瑁呫備絾鏄繖涓姝ヤ笉鑳借蛋寰楀お榪滐紝濡傛灉浣犲彂鐜頒竴涓被鎺ュ彛鐨勪竴澶у崐鏂規(guī)硶閮藉湪鍋氬垎媧撅紝浣犲彲鑳介渶瑕佺Щ鍘昏繖涓腑闂翠漢銆?
16錛?Inappropriate Intimacy
銆銆鏌愪簺綾葷浉浜掍箣闂村お浜插瘑錛屽畠浠姳璐逛簡澶鐨勬椂闂村幓鐮栫爺鍒漢鐨勭鏈夐儴鍒嗐傚浜虹被鑰岃█錛屾垜浠篃璁鎬笉搴旇澶亣姝g粡錛屼絾鎴戜滑搴斿綋璁╄嚜宸辯殑綾諱弗鏍奸伒瀹堢嬈蹭富涔夈?
17錛?Alternative Classes with Different Interfaces
銆銆鍋氱浉鍚屼簨鎯呯殑鏂規(guī)硶鏈変笉鍚岀殑鍑芥暟signature錛屼竴鑷存妸瀹冧滑寰綾誨眰嬈′笂縐伙紝鐩磋嚦鍗忚涓鑷淬?
18錛?Incomplete Library Class
銆銆瑕佸緩绔嬩竴涓ソ鐨勭被搴撻潪甯稿洶闅俱傛垜浠ぇ閲忕殑紼嬪簭宸ヤ綔閮藉熀浜庣被搴撳疄鐜般傜劧鑰岋紝濡傛騫挎硾鑰屽張鐩稿紓鐨勭洰鏍囧搴撴瀯寤鴻呮彁鍑轟簡鑻涘埢鐨勮姹傘傚簱鏋勫緩鑰呬篃涓嶆槸涓囪兘鐨勩傛湁鏃跺欐垜浠細(xì)鍙戠幇搴撶被鏃犳硶瀹炵幇鎴戜滑闇瑕佺殑鍔熻兘銆傝岀洿鎺ュ搴撶被鐨勪慨鏀規(guī)湁闈炲父鍥伴毦銆傝繖鏃跺欏氨闇瑕佺敤鍚勭鎵嬫榪涜Refactoring銆?
19錛?Data Class
銆銆瀵硅薄鍖呮嫭鐘舵佸拰琛屼負(fù)銆傚鏋滀竴涓被鍙湁鐘舵佹病鏈夎涓猴紝閭d箞鑲畾鏈変粈涔堝湴鏂瑰嚭闂浜嗐?
20錛?Refused Bequest
銆銆瓚呯被浼犱笅鏉ュ緢澶氳涓哄拰鐘舵侊紝鑰屽瓙綾誨彧鏄敤浜嗗叾涓殑寰堝皬涓閮ㄥ垎銆傝繖閫氬父鎰忓懗鐫浣犵殑綾誨眰嬈℃湁闂銆?
21錛?Comments
銆銆緇忓父瑙夊緱瑕佸啓寰堝娉ㄩ噴琛ㄧず浣犵殑浠g爜闅句互鐞嗚В銆傚鏋滆繖縐嶆劅瑙夊お澶氾紝琛ㄧず浣犻渶瑕丷efactoring銆?