锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
浣跨敤澶氫釜涓撻棬鐨勬帴鍙f瘮浣跨敤鍗曚竴鐨勬繪帴鍙h濂姐?span lang="EN-US">
涓涓被瀵瑰彟澶栦竴涓被鐨勪緷璧栨у簲褰撴槸寤虹珛鍦ㄦ渶灝忕殑鎺ュ彛涓婄殑銆?span lang="EN-US">
涓涓帴鍙d唬琛ㄤ竴涓鑹詫紝涓嶅簲褰撳皢涓嶅悓鐨勮鑹查兘浜ょ粰涓涓帴鍙c傛病鏈夊叧緋葷殑鎺ュ彛鍚堝茍鍦ㄤ竴璧鳳紝褰㈡垚涓涓噧鑲跨殑澶ф帴鍙o紝榪欐槸瀵硅鑹插拰鎺ュ彛鐨勬薄鏌撱?span lang="EN-US">
鈥?/span>涓嶅簲璇ュ己榪鎴蜂緷璧栦簬瀹冧滑涓嶇敤鐨勬柟娉曘傛帴鍙e睘浜庡鎴鳳紝涓嶅睘浜庡畠鎵鍦ㄧ殑綾誨眰嬈$粨鏋勩?span lang="EN-US">鈥?/span>榪欎釜璇村緱寰堟槑鐧戒簡錛屽啀閫氫織鐐硅錛屼笉瑕佸己榪鎴蜂嬌鐢ㄥ畠浠笉鐢ㄧ殑鏂規硶錛屽鏋滃己榪敤鎴蜂嬌鐢ㄥ畠浠笉浣跨敤鐨勬柟娉曪紝閭d箞榪欎簺瀹㈡埛灝變細闈復鐢變簬榪欎簺涓嶄嬌鐢ㄧ殑鏂規硶鐨勬敼鍙樻墍甯︽潵鐨勬敼鍙樸?span lang="EN-US">
浜屻佷婦渚嬭鏄庯細
鍙傝冧笅鍥劇殑璁捐錛屽湪榪欎釜璁捐閲岋紝鍙栨銆佸瓨嬈俱佽漿甯愰兘浣跨敤涓涓氱敤鐣岄潰鎺ュ彛錛屼篃灝辨槸璇達紝姣忎竴涓被閮借寮鴻揩渚濊禆浜嗗彟涓や釜綾葷殑鎺ュ彛鏂規硶錛岄偅涔堟瘡涓被鏈夊彲鑳藉洜涓哄彟澶栦袱涓被鐨勬柟娉?span lang="EN-US">(璺熻嚜宸辨棤鍏?span lang="EN-US">)鑰岃褰卞搷銆傛嬁鍙栨鏉ヨ錛屽畠鏍規湰涓嶅叧蹇?span lang="EN-US">鈥?/span>瀛樻鎿嶄綔鈥?/span>鍜?span lang="EN-US">鈥?/span>杞笎鎿嶄綔鈥?/span>錛屽彲鏄畠鍗磋鍙楀埌榪欎袱涓柟娉曠殑鍙樺寲鐨勫獎鍝嶃?span lang="EN-US">
閭d箞鎴戜滑璇ュ浣曡В鍐寵繖涓棶棰樺憿錛熷弬鑰冧笅鍥劇殑璁捐錛屼負姣忎釜綾婚兘鍗曠嫭璁捐涓撻棬鐨勬搷浣滄帴鍙o紝浣垮緱瀹冧滑鍙緷璧栦簬瀹冧滑鍏崇郴鐨勬柟娉曪紝榪欐牱灝變笉浼氫簰鐩稿獎浜嗭紒
涓夈佸疄鐜版柟娉曪細
1銆佷嬌鐢ㄥ鎵樺垎紱繪帴鍙?span lang="EN-US">
2銆佷嬌鐢ㄥ閲嶇戶鎵垮垎紱繪帴鍙?span lang="EN-US">
綆鍗曠殑璇達紝渚濊禆鍊掔疆鍘熷垯瑕佹眰瀹㈡埛绔緷璧栦簬鎶借薄鑰﹀悎銆傚師鍒欒〃榪幫細phpma寮婧?緗楁睙娓擱奔
鎶借薄涓嶅簲褰撲緷璧栦簬緇嗚妭錛涚粏鑺傚簲褰撲緷璧栦簬鎶借薄錛?span lang="EN-US">
瑕侀拡瀵規帴鍙g紪紼嬶紝涓嶉拡瀵瑰疄鐜扮紪紼嬨?span lang="EN-US">
鍙嶉潰渚嬪瓙錛?span lang="EN-US">
![]()
緙虹偣錛氳﹀悎澶揣瀵嗭紝Light鍙戠敓鍙樺寲灝嗗獎鍝?span lang="EN-US">ToggleSwitch銆?span lang="EN-US">
瑙e喅鍔炴硶涓錛?span lang="EN-US">
灝?span lang="EN-US">Light浣滄垚Abstract錛岀劧鍚庡叿浣撶被緇ф壙鑷?span lang="EN-US">Light銆?span lang="EN-US">
![]()
浼樼偣錛?span lang="EN-US">ToggleSwitch渚濊禆浜庢娊璞$被Light錛屽叿鏈夋洿楂樼殑紼沖畾鎬э紝鑰?span lang="EN-US">BulbLight涓?span lang="EN-US">TubeLight緇ф壙鑷?span lang="EN-US">Light錛屽彲浠ユ牴鎹?span lang="EN-US">"寮鏀撅紞灝侀棴"鍘熷垯榪涜鎵╁睍銆傚彧瑕?span lang="EN-US">Light涓嶅彂鐢熷彉鍖栵紝BulbLight涓?span lang="EN-US">TubeLight鐨勫彉鍖栧氨涓嶄細娉㈠強ToggleSwitch銆?span lang="EN-US">
緙虹偣錛氬鏋滅敤ToggleSwitch鎺у埗涓鍙扮數瑙嗗氨寰堝洶闅句簡銆傛諱笉鑳借TV緇ф壙鑷?span lang="EN-US">Light鍚с?span lang="EN-US">
浼樼偣錛氭洿涓洪氱敤銆佹洿涓虹ǔ瀹氥?span lang="EN-US">
緇撹錛?span lang="EN-US">
浣跨敤浼犵粺榪囩▼鍖栫▼搴忚璁℃墍鍒涘緩鐨勪緷璧栧叧緋伙紝絳栫暐渚濊禆浜庣粏鑺傦紝榪欐槸緋熺硶鐨勶紝鍥犱負絳栫暐鍙楀埌緇嗚妭鏀瑰彉鐨勫獎鍝嶃備緷璧栧掔疆鍘熷垯浣跨粏鑺傚拰絳栫暐閮戒緷璧栦簬鎶借薄錛屾娊璞$殑紼沖畾鎬у喅瀹氫簡緋葷粺鐨勭ǔ瀹氭с?span lang="EN-US">
瀹氫箟錛氬鏋滃浜庣被鍨?span lang="EN-US">S鐨勬瘡涓涓璞?span lang="EN-US">o1錛岄兘鏈変竴涓被鍨?span lang="EN-US">T鐨勫璞?span lang="EN-US">o2錛屼嬌瀵逛簬浠繪剰鐢ㄧ被鍨?span lang="EN-US">T瀹氫箟鐨勭▼搴?span lang="EN-US">P錛屽皢o2鏇挎崲涓?span lang="EN-US">o1錛?span lang="EN-US">P鐨勮涓轟繚鎸佷笉鍙橈紝鍒欑ОS涓?span lang="EN-US">T鐨勪竴涓瓙綾誨瀷銆?/font>
瀛愮被鍨嬪繀欏昏兘澶熸浛鎹㈠畠鐨勫熀綾誨瀷銆?span lang="EN-US">LSP鍙堢О閲屾皬鏇挎崲鍘熷垯銆?/font>
瀵逛簬榪欎釜鍘熷垯錛岄氫織涓浜涚殑鐞嗚В灝辨槸錛岀埗綾葷殑鏂規硶閮借鍦ㄥ瓙綾諱腑瀹炵幇鎴栬呴噸鍐欍?/font>
浜屻佷婦渚嬭鏄庯細
瀵逛簬渚濊禆鍊掔疆鍘熷垯錛岃鐨勬槸鐖剁被涓嶈兘渚濊禆瀛愮被錛屽畠浠兘瑕佷緷璧栨娊璞$被銆傝繖縐嶄緷璧栨槸鎴戜滑瀹炵幇浠g爜鎵╁睍鍜岃繍琛屾湡鍐呯粦瀹氾紙澶氭侊級鐨勫熀紜銆傚洜涓轟竴鏃︾被鐨勪嬌鐢ㄨ呬緷璧栨煇涓叿浣撶殑綾伙紝閭d箞瀵硅渚濊禆鐨勬墿灞曞氨鏃犱粠璋堣搗錛涜屼緷璧栨煇涓娊璞$被錛屽垯鍙瀹炵幇浜嗚鎶借薄綾葷殑瀛愮被錛岄兘鍙互琚被鐨勪嬌鐢ㄨ呬嬌鐢紝浠庤屽疄鐜頒簡緋葷粺鐨勬墿灞曘?/font>phpma寮婧?/span>
浣嗘槸錛屽厜鏈変緷璧栧掔疆鍘熷垯錛屽茍涓嶄竴瀹氬氨浣挎垜浠殑浠g爜鐪熸鍏鋒湁鑹ソ鐨勬墿灞曟у拰榪愯鏈熷唴緇戝畾銆傝鐪嬩笅闈㈢殑浠g爜錛?/font>
public class Animal
{
private string name;
public Animal(string name)
{
this.name = name;
}
public void Description()
{
Console.WriteLine("This is a(an) " + name);
}
}
//涓嬮潰鏄畠鐨勫瓙綾葷尗綾伙細phpma寮婧?/span>
public class Cat : Animal
{
public Cat(string name)
{
}
public void Mew()
{
Console.WriteLine("The cat is saying like 'mew'");
}
}
//涓嬮潰鏄畠鐨勫瓙綾葷嫍綾伙細phpma寮婧?/span>
public class Dog : Animal
{
public Dog(string name)
{
}
public void Bark()
{
Console.WriteLine("The dog is saying like 'bark'");
}
}
//鏈鍚庯紝鎴戜滑鏉ョ湅瀹㈡埛绔殑璋冪敤錛?/font>
public void DecriptionTheAnimal(Animal animal)
{
if (typeof(animal) is Cat)
{
Cat cat = (Cat)animal;
Cat.Decription();
Cat.Mew();
}
else if (typeof(animal) is Dog)
{
Dog dog = (Dog)animal;
Dog.Decription();
Dog.Bark();
}
}
閫氳繃涓婇潰鐨勪唬鐮侊紝鎴戜滑鍙互鐪嬪埌铏界劧瀹㈡埛绔殑渚濊禆鏄鎶借薄鐨勪緷璧栵紝浣嗕緷鐒惰繖涓璁$殑鎵╁睍鎬т笉濂斤紝榪愯鏈熺粦瀹氭病鏈夊疄鐜般?/font>phpma寮婧?/span>
鏄粈涔堝師鍥犲憿錛熷叾瀹炲氨鏄洜涓轟笉婊¤凍閲屾皬鏇挎崲鍘熷垯錛屽瓙綾誨Cat鏈?span lang="EN-US">Mew()鏂規硶鐖剁被鏍規湰娌℃湁錛?span lang="EN-US">Dog綾繪湁Bark()鏂規硶鐖剁被涔熸病鏈夛紝涓や釜瀛愮被閮戒笉鑳芥浛鎹㈢埗綾匯傝繖鏍峰鑷翠簡緋葷粺鐨勬墿灞曟т笉濂藉拰娌℃湁瀹炵幇榪愯鏈熷唴緇戝畾銆?/font>
鐜板湪鐪嬫潵錛屼竴涓郴緇熸垨瀛愮郴緇熻鎷ユ湁鑹ソ鐨勬墿灞曟у拰瀹炵幇榪愯鏈熷唴緇戝畾錛屾湁涓や釜蹇呰鏉′歡錛氱涓鏄緷璧栧掔疆鍘熷垯錛涚浜屾槸閲屾皬鏇挎崲鍘熷垯銆傝繖涓や釜鍘熷垯緙轟竴涓嶅彲銆?/font>
鎴戜滑鐭ラ亾錛屽湪鎴戜滑鐨勫ぇ澶氭暟鐨勬ā寮忎腑錛屾垜浠兘鏈変竴涓叡鍚岀殑鎺ュ彛錛岀劧鍚庡瓙綾誨拰鎵╁睍綾婚兘鍘誨疄鐜拌鎺ュ彛銆?/font>
涓嬮潰鏄竴孌靛師濮嬩唬鐮侊細
if(action.Equals(鈥渁dd鈥?)
{
//do add action
}
else if(action.Equals(鈥渧iew鈥?)
{
//do view action
}
else if(action.Equals(鈥渄elete鈥?)
{
//do delete action
}
else if(action.Equals(鈥渕odify鈥?)
{
//do modify action
}
鎴戜滑棣栧厛鎯沖埌鐨勬槸鎶婅繖浜涘姩浣滃垎紱誨嚭鏉ワ紝灝卞彲鑳藉啓鍑哄涓嬬殑浠g爜錛?/font>phpma寮婧?/span>
public class AddAction
{
public void add()
{
//do add action
}
}
public class ViewAction
{
public void view()
{
//do view action
}
}
public class deleteAction
{
public void delete()
{
//do delete action
}
}
public class ModifyAction
{
public void modify()
{
//do modify action
}
}
鎴戜滑鍙互鐪嬪埌錛岃繖鏍蜂唬鐮佸皢鍚勪釜琛屼負鐙珛鍑烘潵錛屾弧瓚充簡鍗曚竴鑱岃矗鍘熷垯錛屼絾榪欒繙榪滀笉澶燂紝鍥犱負瀹冧笉婊¤凍渚濊禆棰犲掑師鍒欏拰閲屾皬鏇挎崲鍘熷垯銆?/span>phpma寮婧?/span>
涓嬮潰鎴戜滑鏉ョ湅鐪嬪懡浠ゆā寮忓璇ラ棶棰樼殑瑙e喅鏂規硶錛?/font>
public interface Action
{
public void doAction();
}
//鐒跺悗鏄悇涓疄鐜幫細
public class AddAction : Action
{
public void doAction()
{
//do add action
}
}
public class ViewAction : Action
{
public void doAction()
{
//do view action
}
}
public class deleteAction : Action
{
public void doAction()
{
//do delete action
}
}
public class ModifyAction : Action
{
public void doAction()
{
//do modify action
}
}
//榪欐牱錛屽鎴風鐨勮皟鐢ㄥぇ姒傚涓嬶細
public void execute(Action action)
{
action.doAction();
}
鐪嬶紝涓婇潰鐨勫鎴風浠g爜鍐嶄篃娌℃湁鍑虹幇榪?span lang="EN-US">typeof榪欐牱鐨勮鍙ワ紝鎵╁睍鎬ц壇濂斤紝涔熸湁浜嗚繍琛屾湡鍐呯粦瀹氱殑浼樼偣銆?
涓夈?span lang="EN-US">LSP浼樼偣錛?/font>
1銆佷繚璇佺郴緇熸垨瀛愮郴緇熸湁鑹ソ鐨勬墿灞曟с傚彧鏈夊瓙綾昏兘澶熷畬鍏ㄦ浛鎹㈢埗綾伙紝鎵嶈兘淇濊瘉緋葷粺鎴栧瓙緋葷粺鍦ㄨ繍琛屾湡鍐呰瘑鍒瓙綾誨氨鍙互浜嗭紝鍥犺屼嬌寰楃郴緇熸垨瀛愮郴緇熸湁浜嗚壇濂界殑鎵╁睍鎬с?/font>
2銆佸疄鐜拌繍琛屾湡鍐呯粦瀹氾紝鍗充繚璇佷簡闈㈠悜瀵硅薄澶氭佹х殑欏哄埄榪涜銆傝繖鑺傜渷浜嗗ぇ閲忕殑浠g爜閲嶅鎴栧啑浣欍傞伩鍏嶄簡綾諱技instanceof榪欐牱鐨勮鍙ワ紝鎴栬?span lang="EN-US">getClass()榪欐牱鐨勮鍙ワ紝榪欎簺璇彞鏄潰鍚戝璞℃墍蹇岃鐨勩?/font>
3銆佹湁鍒╀簬瀹炵幇濂戠害寮忕紪紼嬨傚綰﹀紡緙栫▼鏈夊埄浜庣郴緇熺殑鍒嗘瀽鍜岃璁★紝鎸囨垜浠湪鍒嗘瀽鍜岃璁$殑鏃跺欙紝瀹氫箟濂界郴緇熺殑鎺ュ彛錛岀劧鍚庡啀緙栫爜鐨勬椂鍊欏疄鐜拌繖浜涙帴鍙e嵆鍙傚湪鐖剁被閲屽畾涔夊ソ瀛愮被闇瑕佸疄鐜扮殑鍔熻兘錛岃屽瓙綾誨彧瑕佸疄鐜拌繖浜涘姛鑳藉嵆鍙?/font>
鍥涖佷嬌鐢?span lang="EN-US">LSP娉ㄦ剰鐐癸細
1銆佹鍘熷垯鍜?span lang="EN-US">OCP鐨勪綔鐢ㄦ湁鐐圭被浼鹼紝鍏跺疄榪欎簺闈㈠悜瀵硅薄鐨勫熀鏈師鍒欏氨2鏉★細1錛氶潰鍚戞帴鍙g紪紼嬶紝鑰屼笉鏄潰鍚戝疄鐜幫紱2錛氱敤緇勫悎鑰屼笉涓誨紶鐢ㄧ戶鎵?/font>
2銆?span lang="EN-US">LSP鏄繚璇?span lang="EN-US">OCP鐨勯噸瑕佸師鍒?/font>
3銆佽繖浜涘熀鏈殑鍘熷垯鍦ㄥ疄鐜版柟娉曚笂涔熸湁涓叡鍚屽眰嬈★紝灝辨槸浣跨敤涓棿鎺ュ彛灞傦紝浠ユ鏉ヨ揪鍒扮被瀵硅薄鐨勪綆鍋跺悎錛屼篃灝辨槸鎶借薄鍋跺悎錛?/font>
4銆佹淳鐢熺被鐨勯鍖栧嚱鏁幫細媧劇敓綾葷殑鏌愪簺鍑芥暟閫鍖栵紙鍙樺緱娌℃湁鐢ㄥ錛夛紝Base鐨勪嬌鐢ㄨ呬笉鐭ラ亾涓嶈兘璋冪敤f錛屼細瀵艱嚧鏇挎崲榪濊銆傚湪媧劇敓綾諱腑瀛樺湪閫鍖栧嚱鏁板茍涓嶆繪槸琛ㄧず榪濆弽浜?span lang="EN-US">LSP錛屼絾鏄綋瀛樺湪榪欑鎯呭喌鏃訛紝搴旇寮曡搗娉ㄦ剰銆?/font>
5銆佷粠媧劇敓綾繪姏鍑哄紓甯革細濡傛灉鍦ㄦ淳鐢熺被鐨勬柟娉曚腑娣誨姞浜嗗叾鍩虹被涓嶄細鎶涘嚭鐨勫紓甯搞傚鏋滃熀綾葷殑浣跨敤鑰呬笉鏈熸湜榪欎簺寮傚父錛岄偅涔堟妸浠栦滑娣誨姞鍒版淳鐢熺被鐨勬柟娉曚腑灝卞彲浠ヨ兘浼氬鑷翠笉鍙浛鎹㈡с?span lang="EN-US">
灝變竴涓被鑰岃█錛屽簲璇ュ彧涓撴敞浜庡仛涓浠朵簨鍜屼粎鏈変竴涓紩璧峰畠鍙樺寲鐨勫師鍥犮?/span>PHP寮婧?span lang="EN-US">com
鎵璋撹亴璐o紝鎴戜滑鍙互鐞嗚В浠栦負鍔熻兘錛屽氨鏄璁$殑榪欎釜綾誨姛鑳藉簲璇ュ彧鏈変竴涓紝鑰屼笉鏄袱涓垨鏇村銆備篃鍙互鐞嗚В涓哄紩鐢ㄥ彉鍖栫殑鍘熷洜錛屽綋浣犲彂鐜版湁涓や釜鍙樺寲浼氳姹傛垜浠慨鏀硅繖涓被錛岄偅涔堜綘灝辮鑰冭檻鎾ゅ垎榪欎釜綾諱簡銆傚洜涓鴻亴璐f槸鍙樺寲鐨勪竴涓醬綰匡紝褰撻渶姹傚彉鍖栨椂錛岃鍙樺寲浼氬弽鏄犵被鐨勮亴璐g殑鍙樺寲銆?/span>
鈥?/span>灝卞儚涓涓漢韜吋鏁拌亴錛岃岃繖浜涗簨鎯呯浉浜掑叧鑱斾笉澶э紝錛岀敋鑷蟲湁鍐茬獊錛岄偅浠栧氨鏃犳硶寰堝ソ鐨勮В鍐寵繖浜涜亴璐o紝搴旇鍒嗗埌涓嶅悓鐨勪漢韜笂鍘誨仛鎵嶅銆?span lang="EN-US">鈥?/span>
浜屻佷婦渚嬭鏄庯細
榪濆弽SRP鍘熷垯浠g爜: PHP寮婧?span lang="EN-US">com
modem鎺ュ彛鏄庢樉鍏鋒湁涓や釜鑱岃矗錛氳繛鎺ョ鐞嗗拰鏁版嵁閫氳錛?span lang="EN-US">
interface Modem
{
public void dial(string pno);
public void hangup();
public void send(char c);
public void recv();
}
濡傛灉搴旂敤紼嬪簭鍙樺寲褰卞搷榪炴帴鍑芥暟錛岄偅涔堝氨闇瑕侀噸鏋勶細
interface DataChannel
{
public void send(char c);
public void recv();
}
interface Connection
{
public void dial(string pno);
public void hangup();
}
涓夈?span lang="EN-US">SRP浼樼偣錛?/span>PHP寮婧?span lang="EN-US">com
娑堥櫎鑰﹀悎錛屽噺灝忓洜闇姹傚彉鍖栧紩璧蜂唬鐮佸兊鍖栨ц嚟鍛?
鍥涖佷嬌鐢?span lang="EN-US">SRP娉ㄦ剰鐐癸細
1銆佷竴涓悎鐞嗙殑綾伙紝搴旇浠呮湁涓涓紩璧峰畠鍙樺寲鐨勫師鍥狅紝鍗沖崟涓鑱岃矗錛?span lang="EN-US">
2銆佸湪娌℃湁鍙樺寲寰佸厗鐨勬儏鍐典笅搴旂敤SRP鎴栧叾浠栧師鍒欐槸涓嶆槑鏅虹殑錛?span lang="EN-US">
3銆佸湪闇姹傚疄闄呭彂鐢熷彉鍖栨椂灝卞簲璇ュ簲鐢?span lang="EN-US">SRP絳夊師鍒欐潵閲嶆瀯浠g爜錛?span lang="EN-US">
4銆佷嬌鐢ㄦ祴璇曢┍鍔ㄥ紑鍙戜細榪嬌鎴戜滑鍦ㄨ璁″嚭鐜拌嚟鍛充箣鍓嶅垎紱諱笉鍚堢悊浠g爜錛?span lang="EN-US">
5銆佸鏋滄祴璇曚笉鑳借揩浣胯亴璐e垎紱伙紝鍍靛寲鎬у拰鑴嗗急鎬х殑鑷懗浼氬彉寰楀緢寮虹儓錛岄偅灝卞簲璇ョ敤Facade鎴?span lang="EN-US">Proxy妯″紡瀵逛唬鐮侀噸鏋勶紱
class Client
{
Server server;
void GetMessage()
{
server.Message();
}
}
class Server
{
void Message();
}
涓嬮潰涓轟慨鏀瑰悗絎﹀悎OCP鍘熷垯鐨勫疄鐜幫紝鎴戜滑鐪嬪埌Server綾繪槸浠?span lang="EN-US">ClientInterface緇ф壙鐨勶紝涓嶈繃ClientInterface鍗翠笉鍙?span lang="EN-US">ServerInterface錛屽師鍥犳槸鎴戜滑甯屾湜瀵?span lang="EN-US">Client鏉ヨClientInterface鏄浐瀹氫笅鏉ョ殑錛屽彉鍖栫殑鍙槸Server銆傝繖瀹為檯涓婂氨鍙樻垚浜嗕竴縐嶇瓥鐣ユā寮?span lang="EN-US">(Gof Strategy錛?span lang="EN-US">
interface ClientInterface
{
public void Message();
//Other functions
}
class Server:ClientInterface
{
public void Message();
}
class Client
{
ClientInterface ci;
public void GetMessage()
{
ci.Message();
}
public void Client(ClientInterface paramCi)
{
ci=paramCi;
}
}
//閭d箞鍦ㄤ富鍑芥暟(鎴栦富鎺х)鍒?span lang="EN-US">
public static void Main()
{
ClientInterface ci = new Server();
//鍦ㄤ笂闈㈠鏋滄湁鏂扮殑Server綾誨彧瑕佹浛鎹?span lang="EN-US">Server()灝辮浜嗭紟
Client client = new Client(ci);
client.GetMessage();
}
3銆佷緥瀛愪笁
浣跨敤Template Method瀹炵幇OCP錛?span lang="EN-US">
public abstract class Policy
{
private int[] i ={ 1, 1234, 1234, 1234, 132 };
public bool Sort()
{
SortImp();
}
protected virtual bool SortImp()
{
}
}
class Bubbleimp : Policy
{
protected override bool SortImp()
{
//鍐掓場鎺掑簭
}
}
class Bintreeimp : Policy
{
protected override bool SortImp()
{
//浜屽垎娉曟帓搴?span lang="EN-US">
}
}
//涓誨嚱鏁頒腑瀹炵幇
static void Main(string[] args)
{
//濡傛灉瑕佷嬌鐢ㄥ啋娉℃帓搴忥紝鍙鎶婁笅闈㈢殑Bintreeimp鏀逛負Bubbleimp
Policy sort = new Bintreeimp();
sort.Sort();
}
涓夈?span lang="EN-US">OCP浼樼偣錛?/b>
1銆侀檷浣庣▼搴忓悇閮ㄥ垎涔嬮棿鐨勮﹀悎鎬э紝浣跨▼搴忔ā鍧椾簰鎹㈡垚涓哄彲鑳斤紱
2銆佷嬌杞歡鍚勯儴鍒嗕究浜庡崟鍏冩祴璇曪紝閫氳繃緙栧埗涓庢帴鍙d竴鑷寸殑妯℃嫙綾伙紙Mock錛夛紝鍙互寰堝鏄撳湴瀹炵幇杞歡鍚勯儴鍒嗙殑鍗曞厓嫻嬭瘯錛?span lang="EN-US">
3銆佸埄浜庡疄鐜拌蔣浠剁殑妯″潡鐨勫懠鍞わ紝杞歡鍗囩駭鏃跺彲浠ュ彧閮ㄧ講鍙戠敓鍙樺寲鐨勯儴鍒嗭紝鑰屼笉浼氬獎鍝嶅叾瀹冮儴鍒嗭紱
鍥涖佷嬌鐢?span lang="EN-US">OCP娉ㄦ剰鐐癸細
1銆佸疄鐜?span lang="EN-US">OCP鍘熷垯鐨勫叧閿槸鎶借薄錛?span lang="EN-US">
2銆佷袱縐嶅畨鍏ㄧ殑瀹炵幇寮闂師鍒欑殑璁捐妯″紡鏄細Strategy pattern錛堢瓥鐣ユā寮忥級錛?span lang="EN-US">Template Methord錛堟ā鐗堟柟娉曟ā寮忥級錛?span lang="EN-US">
3銆佷緷鎹紑闂師鍒?span lang="EN-US">,鎴戜滑灝介噺涓嶈淇敼綾?span lang="EN-US">,鍙墿灞曠被,浣嗗湪鏈変簺鎯呭喌涓嬩細鍑虹幇涓浜涙瘮杈冩紓鐨勭姸鍐碉紝榪欐椂鍙互閲囩敤鍑犱釜綾昏繘琛岀粍鍚堟潵瀹屾垚錛?span lang="EN-US">
4銆佸皢鍙兘鍙戠敓鍙樺寲鐨勯儴鍒嗗皝瑁呮垚涓涓璞?span lang="EN-US">,濡?span lang="EN-US">: 鐘舵?span lang="EN-US">, 娑堟伅,,綆楁硶,鏁版嵁緇撴瀯絳夌瓑 , 灝佽鍙樺寲鏄疄鐜?span lang="EN-US">"寮闂師鍒?span lang="EN-US">"鐨勪竴涓噸瑕佹墜孌碉紝濡傜粡甯稿彂鐢熷彉鍖栫殑鐘舵佸?span lang="EN-US">,濡傛俯搴?span lang="EN-US">,姘斿帇,棰滆壊,縐垎,鎺掑悕絳夌瓑,鍙互灝嗚繖浜涗綔涓虹嫭绔嬬殑灞炴?span lang="EN-US">,濡傛灉鍙傛暟涔嬮棿鏈夊叧緋?span lang="EN-US">,鏈夊繀瑕佽繘琛屾娊璞°傚浜庤涓?span lang="EN-US">,濡傛灉鏄熀鏈笉鍙樼殑,鍒欏彲浠ョ洿鎺ヤ綔涓哄璞$殑鏂規硶,鍚﹀垯鑰冭檻鎶借薄鎴栬呭皝瑁呰繖浜涜涓猴紱
5銆佸湪璁稿鏂歸潰錛?span lang="EN-US">OCP鏄潰鍚戝璞¤璁$殑鏍稿績鎵鍦ㄣ傞伒寰繖涓師鍒欏彲甯︽潵闈㈠悜瀵硅薄鎶鏈墍澹扮О鐨勫法澶уソ澶勶紙鐏墊椿鎬с佸彲閲嶇敤鎬т互鍙婂彲緇存姢鎬э級銆傜劧鑰岋紝瀵逛簬搴旂敤紼嬪簭鐨勬瘡涓儴鍒嗛兘鑲嗘剰鍦拌繘琛屾娊璞″茍涓嶆槸涓涓ソ涓繪剰銆傚簲璇ヤ粎浠呭紼嬪簭涓憟鐜板嚭棰戠箒鍙樺寲鐨勯偅閮ㄥ垎浣滃嚭鎶借薄銆傛嫆緇濅笉鎴愮啛鐨勬娊璞″拰鎶借薄鏈韓涓鏍烽噸瑕侊紱
鍩烘湰鍘熷垯
路 灝佽鍙樺寲Encapsulate what varies.
路 闈㈠悜鎺ュ彛鍙樻垚鑰屼笉鏄疄鐜?span lang="EN-US"> Code to an interface rather than to an implementation.
路 浼樺厛浣跨敤緇勫悎鑰岄潪緇ф壙 Favor Composition Over Inheritance
SRP: The single responsibility principle 鍗曚竴鑱岃矗
緋葷粺涓殑姣忎竴涓璞¢兘搴旇鍙湁涓涓崟鐙殑鑱岃矗錛岃屾墍鏈夊璞℃墍鍏蟲敞鐨勫氨鏄嚜韜亴璐g殑瀹屾垚銆?span lang="EN-US">
Every object in your system should have a single responsibility ,and all the object s services should be focused on carrying out that single responsibility .
1. 姣忎竴涓亴璐i兘鏄竴涓璁$殑鍙樺洜錛岄渶姹傚彉鍖栫殑鏃跺欙紝闇姹傚彉鍖栧弽鏄犱負綾昏亴璐g殑鍙樺寲銆傚綋浣犵郴緇熼噷闈㈢殑瀵硅薄閮藉彧鏈変竴涓彉鍖栫殑鍘熷洜鐨勬椂鍊欙紝浣犲氨宸茬粡寰堝ソ鐨勯伒寰簡SRP鍘熷垯銆?
2. 濡傛灉涓涓被鎵挎媴鐨勮亴璐h繃澶氾紝灝辯瓑浜庢妸榪欎簺鑱岃矗鑰﹀悎鍦ㄤ簡涓璧楓備竴涓亴璐g殑鍙樺寲灝卞彲鑳藉墛寮辨垨鑰呮姂鍒惰繖涓被鍏跺畠鑱岃矗鐨勮兘鍔涖傝繖縐嶈璁′細瀵艱嚧鑴嗗急鐨勮璁°傚綋鍙樺寲鍙戠敓鐨勬椂鍊欙紝璁捐浼氶伃鍒版剰鎯充笉鍒扮殑鐮村潖銆?
3. SRP 璁╄繖涓郴緇熸洿瀹規槗綆$悊緇存姢錛屽洜涓轟笉鏄墍鏈夌殑闂閮芥悈鍦ㄤ竴璧楓?
4. 鍐呰仛Cohesion 鍏跺疄鏄?span lang="EN-US">SRP鍘熷垯鐨勫彟澶栦竴涓悕瀛?span lang="EN-US">.浣犲啓浜嗛珮鍐呰仛鐨勮蔣浠跺叾瀹炲氨鏄浣犲緢濂界殑搴旂敤浜?span lang="EN-US">SRP鍘熷垯銆?
5. 鎬庝箞鍒ゆ柇涓涓亴璐f槸涓嶆槸涓涓璞$殑鍛紵浣犺瘯鐫璁╄繖涓璞¤嚜宸辨潵瀹屾垚榪欎釜鑱岃矗錛屾瘮濡傦細鈥滀功鑷繁闃呰鍐呭鈥濓紝闃呰鐨勮亴璐f樉鐒朵笉鏄功鑷繁鐨勩?
6. 浠呭綋鍙樺寲鍙戠敓鏃訛紝鍙樺寲鐨勮醬綰挎墠鍏鋒湁瀹為檯鐨勬剰涔夛紝濡傛灉娌℃湁寰佸厗錛岄偅涔堝簲鐢?span lang="EN-US">SRP鎴栬呬換浣曞叾瀹冪殑鍘熷垯閮芥槸涓嶆槑鏅虹殑銆?
DRY : Don't repeat yourself Principle
閫氳繃鎶藉彇鍏叡閮ㄥ垎鏀劇疆鍦ㄤ竴涓湴鏂歸伩鍏嶄唬鐮侀噸澶?span lang="EN-US">.
Avoid duplicate code by abstracting out things that are common and placing those thing in a single location .
1. DRY 寰堢畝鍗曪紝浣嗗嵈鏄‘淇濇垜浠唬鐮佸鏄撶淮鎶ゅ拰澶嶇敤鐨勫叧閿?
2. 浣犲敖鍔涢伩鍏嶉噸澶嶄唬鐮佸欏疄闄呬笂鍦ㄥ仛涓浠朵粈涔堜簨鎯呭憿錛熸槸鍦ㄧ‘淇濇瘡涓涓渶姹傚拰鍔熻兘鍦ㄤ綘鐨勭郴緇熶腑鍙疄鐜頒竴嬈★紝鍚﹀垯灝卞瓨鍦ㄦ氮璐癸紒緋葷粺鐢ㄤ緥涓嶅瓨鍦ㄤ氦闆嗭紝鎵浠ユ垜浠殑浠g爜鏇翠笉搴旇閲嶅錛屼粠榪欎釜瑙掑害鐪?span lang="EN-US">DRY鍙氨涓嶅彧鏄湪璇翠唬鐮佷簡銆?
3. DRY 鍏蟲敞鐨勬槸緋葷粺鍐呯殑淇℃伅鍜岃涓洪兘鏀懼湪涓涓崟涓鐨勶紝鏄庢樉鐨勪綅緗傚氨鍍忎綘鍙互鐚滃埌姝e垯琛ㄨ揪寮忓湪.net涓殑浣嶇疆涓鏍鳳紝鍥犱負鍚堢悊鎵浠ュ彲浠ョ寽鍒般?
4. DRY 鍘熷垯錛氬浣曞緋葷粺鑱岃兘榪涜鑹ソ鐨勫垎鍓詫紒鑱岃矗娓呮櫚鐨勭晫闄愪竴瀹氱▼搴︿笂淇濊瘉浜嗕唬鐮佺殑鍗曚竴鎬с?span lang="EN-US">
OCP : Open-Close Principle寮闂師鍒?span lang="EN-US">
綾誨簲璇ュ淇敼鍏抽棴錛屽鎵╁睍鎵撳紑錛?span lang="EN-US">
Classes should be open for extension ,and closed for modification .
1. OCP 鍏蟲敞鐨勬槸鐏墊椿鎬э紝鏀瑰姩鏄氳繃澧炲姞浠g爜榪涜鐨勶紝鑰屼笉鏄敼鍔ㄧ幇鏈夌殑浠g爜錛?
2. OCP鐨勫簲鐢ㄩ檺瀹氬湪鍙兘浼氬彂鐢熺殑鍙樺寲涓婏紝閫氳繃鍒涘緩鎶借薄鏉ラ殧紱諱互鍚庡彂鐢熺殑鍚岀被鍙樺寲
3. OCP鍘熷垯浼犻掑嚭鏉ヨ繖鏍蜂竴涓濇兂錛氫竴鏃︿綘鍐欏嚭鏉ヤ簡鍙互宸ヤ綔鐨勪唬鐮侊紝灝辮鍔姏淇濊瘉榪欐浠g爜涓鐩村彲浠ュ伐浣溿傝繖鍙互璇存槸涓涓簳綰褲傜◢寰彁楂樹竴鐐硅姹?span lang="EN-US">,涓鏃︽垜浠殑浠g爜璐ㄩ噺鍒頒簡涓涓按騫籌紝鎴戜滑瑕佸敖鏈澶у姫鍔涗繚璇佷唬鐮佽川閲忎笉鍥為銆傝繖鏍風殑瑕佹眰浣挎垜浠潰瀵逛竴涓棶棰樼殑鏃跺欎笉浼氫嬌鐢ㄥ噾媧葷殑鏂規硶鏉ヨВ鍐籌紝鎴栬呰鏄斁浠昏嚜嫻佺殑鏂瑰紡鏉ヨВ鍐充竴涓棶棰橈紱姣斿浠g爜娣誨姞浜嗘棤鏁板鐗瑰畾鏁版嵁鐨勫鐞嗭紝鐗瑰寲鐨勪唬鐮佽秺鏉ヨ秺澶氾紝浠g爜鎰忓浘寮濮嬪惈娣蜂笉娓咃紝寮濮嬮鍖栥?
4. OCP 鑳屽悗鐨勬満鍒訛細灝佽鍜屾娊璞★紱灝侀棴鏄緩绔嬪湪鎶借薄鍩虹涓婄殑錛屼嬌鐢ㄦ娊璞¤幏寰楁樉紺虹殑灝侀棴錛涚戶鎵挎槸OCP鏈綆鍗曠殑渚嬪瓙銆傞櫎浜嗗瓙綾誨寲鍜屾柟娉曢噸杞芥垜浠繕鏈変竴浜涙洿浼橀泤鐨勬柟娉曟潵瀹炵幇姣斿緇勫悎錛?
鎬庢牱鍦ㄤ笉鏀瑰彉婧愪唬鐮侊紙鍏抽棴淇敼錛夌殑鎯呭喌涓嬫洿鏀瑰畠鐨勮涓哄憿錛熺瓟妗堝氨鏄娊璞★紝OCP鑳屽悗鐨勬満鍒跺氨鏄娊璞″拰澶氭?span lang="EN-US">
5. 娌℃湁涓涓彲浠ラ傚簲鎵鏈夋儏鍐電殑璐村垏鐨勬ā鍨嬶紒涓瀹氫細鏈夊彉鍖栵紝涓嶅彲鑳藉畬鍏ㄥ皝闂?span lang="EN-US">.瀵圭▼搴忎腑鐨勬瘡涓涓儴鍒嗛兘鑲嗘剰鐨勬娊璞′笉鏄竴涓ソ涓繪剰錛屾紜殑鍋氭硶鏄紑鍙戜漢鍛樹粎浠呭棰戠箒鍙樺寲鐨勯儴鍒嗗仛鍑烘娊璞°傛嫆緇濅笉鎴愮啛鐨勬娊璞″拰鎶借薄鏈韓涓鏍烽噸瑕併?
6. OCP鏄?span lang="EN-US">OOD寰堝璇存硶鐨勬牳蹇冿紝濡傛灉榪欎釜鍘熷垯鏈夋晥搴旂敤錛屾垜浠氨鍙互鑾鋒洿寮虹殑鍙淮鎶ゆу彲閲嶇敤 鐏墊椿鎬?鍋ュ.鎬?span lang="EN-US"> LSP鏄?span lang="EN-US">OCP鎴愪負鍙兘鐨勪富瑕佸師鍒欎箣涓
LSP: The Liskov substitution principle
瀛愮被蹇呴』鑳藉鏇挎崲鍩虹被銆?span lang="EN-US">
Subtypes must be substitutable for their base types.
1. LSP鍏蟲敞鐨勬槸鎬庢牱鑹ソ鐨勪嬌鐢ㄧ戶鎵?span lang="EN-US">.
2. 蹇呴』瑕佹竻妤氭槸浣跨敤涓涓?span lang="EN-US">Method榪樻槸瑕佹墿灞曞畠錛屼絾鏄粷瀵逛笉鏄敼鍙樺畠銆?
3. LSP娓呮櫚鐨勬寚鍑猴紝OOD鐨?span lang="EN-US">IS-A鍏崇郴鏄氨琛屼負鏂瑰紡鑰岃█錛岃涓烘柟寮忔槸鍙互榪涜鍚堢悊鍋囪鐨勶紝鏄鎴風▼搴忔墍渚濊禆鐨勩?
4. LSP璁╂垜浠緱鍑轟竴涓噸瑕佺殑緇撹錛氫竴涓ā鍨嬪鏋滃绔嬬殑鐪嬶紝騫朵笉鍏鋒湁鐪熸鎰忎箟鐨勬湁鏁堟с傛ā鍨嬬殑鏈夋晥鎬у彧鑳介氳繃瀹冪殑瀹㈡埛紼嬪簭鏉ヨ〃鐜般傚繀欏繪牴鎹璁$殑浣跨敤鑰呭仛鍑虹殑鍚堢悊鍋囪鏉ュ瑙嗗畠銆傝屽亣璁炬槸闅句互棰勬祴鐨勶紝鐩村埌璁捐鑷懗鍑虹幇鐨勬椂鍊欐墠澶勭悊瀹冧滑銆?
5. 瀵逛簬LSP鐨勮繚鍙嶄篃娼滃湪鐨勮繚鍙嶄簡OCP
DIP錛氫緷璧栧掔疆鍘熷垯
楂樺眰妯″潡涓嶅簲璇ヤ緷璧栦簬搴曞眰妯″潡浜岃呴兘搴旇渚濊禆浜庢娊璞?span lang="EN-US">
鎶借薄涓嶅簲璇ヤ緷璧栦簬緇嗚妭緇嗚妭搴旇渚濊禆浜庢娊璞?span lang="EN-US">
1. 浠涔堟槸楂樺眰妯″潡錛熼珮灞傛ā鍧楀寘鍚簡搴旂敤紼嬪簭涓噸瑕佺殑絳栫暐閫夋嫨鍜屼笟鍔℃ā鍨嬨傝繖浜涢珮灞傛ā鍧椾嬌鍏舵墍鍦ㄧ殑搴旂敤紼嬪簭鍖哄埆浜庡叾瀹冦?
2. 濡傛灉楂樺眰妯″潡渚濊禆浜庡簳灞傛ā鍧楋紝閭d箞鍦ㄤ笉鍚岀殑涓婁笅鏂囦腑閲嶇敤楂樺眰妯″潡灝變細鍙樺緱鍗佸垎鍥伴毦銆傜劧鑰岋紝濡傛灉楂樺眰妯″潡鐙珛浜庡簳灞傛ā鍧楋紝閭d箞楂樺眰妯″潡灝卞彲浠ラ潪甯稿鏄撶殑琚噸鐢ㄣ傝鍘熷垯灝辨槸妗嗘灦璁捐鐨勬牳蹇冨師鍒欍?
3. 榪欓噷鐨勫掔疆涓嶄粎浠呮槸渚濊禆鍏崇郴鐨勫掔疆涔熸槸鎺ュ彛鎵鏈夋潈鐨勫掔疆銆傚簲鐢ㄤ簡DIP鎴戜滑浼氬彂鐜板線寰鏄鎴鋒嫢鏈夋娊璞$殑鎺ュ彛錛岃屾湇鍔¤呬粠榪欎簺鎶借薄鎺ュ彛媧劇敓銆?
4. 榪欏氨鏄憲鍚嶇殑Hollywood鍘熷垯:"Don't call us we'll call you."搴曞眰妯″潡瀹炵幇浜嗗湪楂樺眰妯″潡澹版槑騫惰楂樺眰妯″潡璋冪敤鐨勬帴鍙c?
5. 閫氳繃鍊掔疆鎴戜滑鍒涘緩浜嗘洿鐏墊椿 鏇存寔涔呮洿瀹規槗鏀瑰彉鐨勭粨鏋?
6. DIP鐨勭畝鍗曠殑鍚彂瑙勫垯錛氫緷璧栦簬鎶借薄錛涜繖鏄竴涓畝鍗曠殑闄堣堪錛岃瑙勫垯寤鴻涓嶅簲璇ヤ緷璧栦簬鍏蜂綋鐨勭被錛屼篃灝辨槸璇寸▼搴忔眹鎬繪墍鏈夌殑渚濊禆閮藉簲璇ョ妞嶄簬鎶借薄綾繪垨鑰呮帴鍙c?
7. 濡傛灉涓涓被寰堢ǔ瀹氾紝閭d箞渚濊禆浜庡畠涓嶄細閫犳垚浼ゅ銆傜劧鑰屾垜浠嚜宸辯殑鍏蜂綋綾誨ぇ澶氭槸涓嶇ǔ瀹氱殑錛岄氳繃鎶婁粬浠殣钘忓湪鎶借薄鎺ュ彛鍚庨潰鍙互闅旂涓嶇ǔ瀹氭с?
8. 渚濊禆鍊掔疆鍙互搴旂敤浜庝換浣曞瓨鍦ㄤ竴涓被鍚戝彟涓涓被鍙戦佹秷鎭殑鍦版柟
9. 渚濊禆鍊掔疆鍘熷垯鏄疄鐜拌澶氶潰鍚戝璞℃妧鏈瀹gО鐨勫ソ澶勭殑鍩烘湰搴曞眰鏈哄埗錛屾槸闈㈠悜瀵硅薄鐨勬爣蹇楁墍鍦ㄣ?
ISP:鎺ュ彛闅旂鍘熷垯
涓嶅簲璇ュ己榪鎴風▼搴忎緷璧栧畠浠笉闇瑕佺殑浣跨敤鐨勬柟娉曘?span lang="EN-US">
1. 鎺ュ彛涓嶆槸楂樺唴鑱氱殑錛屼竴涓帴鍙e彲浠ュ垎鎴?span lang="EN-US">N緇勬柟娉曪紝閭d箞榪欎釜鎺ュ彛灝遍渶瑕佷嬌鐢?span lang="EN-US">ISP澶勭悊涓涓嬨?
2. 鎺ュ彛鐨勫垝鍒嗘槸鐢變嬌鐢ㄥ畠鐨勫鎴風▼搴忓喅瀹氱殑錛屽鎴風▼搴忔槸鍒嗙鐨勬帴鍙d篃搴旇鏄垎紱葷殑銆?
3. 涓涓帴鍙d腑鍖呭惈澶琛屼負鏃跺欙紝瀵艱嚧瀹冧滑鐨勫鎴風▼搴忎箣闂翠駭鐢熶笉姝e父鐨勪緷璧栧叧緋伙紝鎴戜滑瑕佸仛鐨勫氨鏄垎紱繪帴鍙o紝瀹炵幇瑙h︺?
4. 搴旂敤浜?span lang="EN-US">ISP涔嬪悗錛屽鎴風▼搴忕湅鍒扮殑鏄涓唴鑱氱殑鎺ュ彛銆?
灝變竴涓被鑰岃█錛屽簲璇ヤ粎鏈変竴涓紩璧峰畠鍙樺寲鐨勫師鍥犮?/span>
OCP 寮鏀?/span>鈥斺斺斺?/span>灝侀棴鍘熷垯
杞歡瀹炰綋錛堢被銆佹ā鍧椼佸嚱鏁扮瓑錛夊簲璇ユ槸鍙互寮灞曠殑錛屼絾鏄笉鍙慨鏀廣?/span>
LSP Liskov 鏇挎崲鍘熷垯
瀛愮被鍨嬪繀欏昏兘澶熸浛鎹㈡帀瀹冧滑鐨勭埗綾誨瀷銆?/span>
DIP 渚濊禆鍊掔疆鍘熷垯
鎶借薄涓嶅簲璇ヤ緷璧栦簬緇嗚妭銆傜粏鑺傚簲璇ヤ緷璧栦簬鎶借薄銆?/span>
ISP 鎺ュ彛闅旂鍘熷垯
涓嶅簲璇ュ己榪鎴蜂緷璧栦簬瀹冧滑涓嶇敤鐨勬柟娉曘傛帴鍙e睘浜庡鎴鳳紝涓嶅睘浜庡畠鎵鍦ㄧ殑綾誨眰嬈$粨鏋?/span>
REP 閲嶇敤鍙戝竷絳変環鍘熷垯
閲嶇敤鐨勭矑搴﹀氨鏄彂甯冪殑綺掑害
CCP 鍏卞悓灝侀棴鍘熷垯
鍖呬腑鐨勬墍鏈夌被瀵逛簬鍚屼竴綾繪ц川鐨勫彉鍖栧簲璇ユ槸鍏卞悓灝侀棴鐨勩備竴涓彉鍖栬嫢瀵逛竴涓寘浜х敓褰卞搷錛屽垯灝嗗璇ュ寘涓殑鎵鏈夌被浜х敓褰卞搷錛岃屽浜庡叾瀹冪殑鍖呬笉閫犳垚浠諱綍褰卞搷銆?/span>
CRP 鍏卞悓閲嶇敤鍘熷垯
涓涓寘涓殑鎵鏈夌被搴旇鏄叡鍚岄噸鐢ㄧ殑銆傚鏋滈噸鐢ㄤ簡鍖呬腑鐨勪竴涓被錛岄偅涔堝氨瑕侀噸鐢ㄥ寘涓殑鎵鏈夌被銆?/span>
ADP 鏃犵幆渚濊禆鍘熷垯
鍦ㄥ寘鐨勪緷璧栧叧緋誨浘涓笉鍏佽瀛樺湪鐜?/span>
SDP 紼沖畾渚濊禆鍘熷垯
鏈濈潃紼沖畾鐨勬柟鍚戣繘琛屼緷璧?/span>
SAP 紼沖畾鎶借薄鍘熷垯
鍖呯殑鎶借薄紼嬪害搴旇鍜屽叾紼沖畾紼嬪害涓鑷淬?/span>
銆銆閲屾皬浠f崲鍘熷垯涓錛屼換浣曞熀綾誨彲浠ュ嚭鐜扮殑鍦版柟錛屽瓙綾諱竴瀹氬彲浠ュ嚭鐜般?span lang=EN-US> LSP鏄戶鎵垮鐢ㄧ殑鍩虹煶錛屽彧鏈夊綋琛嶇敓綾誨彲浠ユ浛鎹㈡帀鍩虹被錛岃蔣浠跺崟浣嶇殑鍔熻兘涓嶅彈鍒板獎鍝嶆椂錛屽熀綾繪墠鑳界湡姝h澶嶇敤錛岃岃鐢熺被涔熻兘澶熷湪鍩虹被鐨勫熀紜涓婂鍔犳柊鐨勮涓恒?span lang=EN-US>
銆銆閲屾皬浠f崲鍘熷垯鏄“寮-闂?span lang=EN-US>”鍘熷垯鐨勮ˉ鍏呫傚疄鐜?span lang=EN-US>“寮-闂?span lang=EN-US>”鍘熷垯鐨勫叧閿楠ゅ氨鏄娊璞″寲銆傝屽熀綾諱笌瀛愮被鐨勭戶鎵垮叧緋誨氨鏄娊璞″寲鐨勫叿浣撳疄鐜幫紝鎵浠ラ噷姘忎唬鎹㈠師鍒欐槸瀵瑰疄鐜版娊璞″寲鐨勫叿浣撴楠ょ殑瑙勮寖銆?span lang=EN-US>
銆銆涓鑸岃█錛岃繚鍙嶉噷姘忎唬鎹㈠師鍒欑殑錛屼篃榪濊儗“寮-闂?span lang=EN-US>”鍘熷垯錛屽弽榪囨潵涓嶄竴瀹氭垚绔嬨?span lang=EN-US>
銆銆LSP璁茬殑鏄熀綾誨拰瀛愮被鐨勫叧緋匯傚彧鏈夊綋榪欑鍏崇郴瀛樺湪鏃訛紝閲屾皬浠f崲鍏崇郴鎵嶅瓨鍦ㄣ傚鏋滀袱涓叿浣撶殑綾?span lang=EN-US>A錛?span lang=EN-US>B涔嬮棿鐨勫叧緋昏繚鍙嶄簡LSP鐨勮璁★紝(鍋囪鏄粠B鍒?span lang=EN-US>A鐨勭戶鎵垮叧緋?span lang=EN-US>)閭d箞鏍規嵁鍏蜂綋鐨勬儏鍐靛彲浠ュ湪涓嬮潰鐨勪袱縐嶉噸鏋勬柟妗堜腑閫夋嫨涓縐嶃?span lang=EN-US>
銆銆-----鍒涘緩涓涓柊鐨勬娊璞$被C錛屼綔涓轟袱涓叿浣撶被鐨勮秴綾伙紝灝?span lang=EN-US>A錛?span lang=EN-US>B鐨勫叡鍚岃涓虹Щ鍔ㄥ埌C涓潵瑙e喅闂銆?span lang=EN-US>
銆銆-----浠?span lang=EN-US>B鍒?span lang=EN-US>A鐨勭戶鎵垮叧緋繪敼涓哄媧懼叧緋匯?span lang=EN-US>
銆銆涓轟簡璇存槑錛屾垜浠厛鐢ㄧ涓縐嶆柟娉曟潵鐪嬩竴涓緥瀛愶紝絎簩縐嶅姙娉曞湪鍙﹀涓涓師鍒欎腑璇存槑銆傛垜浠氨鐪嬮偅涓憲鍚嶇殑闀挎柟褰㈠拰姝f柟褰㈢殑渚嬪瓙銆傚浜庨暱鏂瑰艦鐨勭被錛屽鏋滃畠鐨勯暱瀹界浉絳夛紝閭d箞瀹冨氨鏄竴涓鏂瑰艦錛屽洜姝わ紝闀挎柟褰㈢被鐨勫璞′腑鏈変竴浜涙鏂瑰艦鐨勫璞°傚浜庝竴涓鏂瑰艦鐨勭被錛屽畠鐨勬柟娉曟湁涓?span lang=EN-US>setSide鍜?span lang=EN-US>getSide錛屽畠涓嶆槸闀挎柟褰㈢殑瀛愮被錛屽拰闀挎柟褰篃涓嶄細絎﹀悎LSP銆?span lang=EN-US>
銆銆eg:
銆銆闀挎柟褰㈢被錛?span lang=EN-US>
銆銆public class Rectangle{
銆銆...
銆銆setWidth(int width){
銆銆this.width=width;
銆銆}
銆銆setHeight(int height){
銆銆this.height=height
銆銆}
銆銆}
銆銆姝f柟褰㈢被錛?span lang=EN-US>
銆銆public class Square{
銆銆...
銆銆setWidth(int width){
銆銆this.width=width;
銆銆this. height=width;
銆銆}
銆銆setHeight(int height){
銆銆this.setWidth(height);
銆銆}
銆銆}
銆銆渚嬪瓙涓敼鍙樿竟闀跨殑鍑芥暟錛?span lang=EN-US>
銆銆public void resize(Rectangle r){
銆銆while(r.getHeight()<r.getWidth){
銆銆r.setHeight(r.getWidth+1);
銆銆}
銆銆}
銆銆閭d箞錛屽鏋滆姝f柟褰㈠綋鍋氭槸闀挎柟褰㈢殑瀛愮被錛屼細鍑虹幇浠涔堟儏鍐靛憿錛熸垜浠姝f柟褰粠闀挎柟褰㈢戶鎵匡紝鐒跺悗鍦ㄥ畠鐨勫唴閮ㄨ緗?span lang=EN-US>width絳変簬height錛岃繖鏍鳳紝鍙width鎴栬?span lang=EN-US>height琚祴鍊鹼紝閭d箞width鍜?span lang=EN-US>height浼氳鍚屾椂璧嬪鹼紝榪欐牱灝變繚璇佷簡姝f柟褰㈢被涓紝width鍜?span lang=EN-US>height鎬繪槸鐩哥瓑鐨?span lang=EN-US>.鐜板湪鎴戜滑鍋囪鏈変釜瀹㈡埛綾伙紝鍏朵腑鏈変釜鏂規硶錛岃鍒欐槸榪欐牱鐨勶紝嫻嬭瘯浼犲叆鐨勯暱鏂瑰艦鐨勫搴︽槸鍚﹀ぇ浜庨珮搴︼紝濡傛灉婊¤凍灝卞仠姝笅鏉ワ紝鍚﹀垯灝卞鍔犲搴︾殑鍊箋傜幇鍦ㄦ垜浠潵鐪嬶紝濡傛灉浼犲叆鐨勬槸鍩虹被闀挎柟褰紝榪欎釜榪愯鐨勫緢濂姐傛牴鎹?span lang=EN-US>LSP錛屾垜浠妸鍩虹被鏇挎崲鎴愬畠鐨勫瓙綾伙紝緇撴灉搴旇涔熸槸涓鏍風殑錛屼絾鏄洜涓烘鏂瑰艦綾葷殑width鍜?span lang=EN-US>height浼氬悓鏃惰祴鍊鹼紝榪欎釜鏂規硶娌℃湁緇撴潫鐨勬椂鍊欙紝鏉′歡鎬繪槸涓嶆弧瓚籌紝涔熷氨鏄錛屾浛鎹㈡垚瀛愮被鍚庯紝紼嬪簭鐨勮涓哄彂鐢熶簡鍙樺寲錛屽畠涓嶆弧瓚?span lang=EN-US>LSP銆?span lang=EN-US>
銆銆閭d箞鎴戜滑鐢ㄧ涓縐嶆柟妗堣繘琛岄噸鏋勶紝鎴戜滑鏋勯犱竴涓娊璞$殑鍥涜竟褰㈢被錛屾妸闀挎柟褰㈠拰姝f柟褰㈠叡鍚岀殑琛屼負鏀懼埌榪欎釜鍥涜竟褰㈢被閲岄潰錛岃闀挎柟褰㈠拰姝f柟褰㈤兘鏄畠鐨勫瓙綾伙紝闂灝?span lang=EN-US>OK浜嗐傚浜庨暱鏂瑰艦鍜屾鏂瑰艦錛屽彇width鍜?span lang=EN-US>height鏄畠浠叡鍚岀殑琛屼負錛屼絾鏄粰width鍜?span lang=EN-US>height璧嬪鹼紝涓よ呰涓轟笉鍚岋紝鍥犳錛岃繖涓娊璞$殑鍥涜竟褰㈢殑綾誨彧鏈夊彇鍊兼柟娉曪紝娌℃湁璧嬪兼柟娉曘備笂闈㈢殑渚嬪瓙涓偅涓柟娉曞彧浼氶傜敤浜庝笉鍚岀殑瀛愮被錛?span lang=EN-US>LSP涔熷氨涓嶄細琚牬鍧忋?span lang=EN-US>
銆銆鍦ㄨ繘琛岃璁$殑鏃跺欙紝鎴戜滑灝介噺浠庢娊璞$被緇ф壙錛岃屼笉鏄粠鍏蜂綋綾葷戶鎵褲傚鏋滀粠緇ф壙絳夌駭鏍戞潵鐪嬶紝鎵鏈夊彾瀛愯妭鐐瑰簲褰撴槸鍏蜂綋綾伙紝鑰屾墍鏈夌殑鏍戞灊鑺傜偣搴斿綋鏄娊璞$被鎴栬呮帴鍙c傚綋鐒惰繖涓彧鏄竴涓竴鑸х殑鎸囧鍘熷垯錛屼嬌鐢ㄧ殑鏃跺欒繕瑕佸叿浣撴儏鍐靛叿浣撳垎鏋愩?/span>