馃専馃専 娆㈣繋鏉ュ埌鎴戠殑鎶€鏈皬绛戯紝涓€涓笓涓烘妧鏈帰绱㈣€呮墦閫犵殑浜ゆ祦绌洪棿銆傚湪杩欓噷锛屾垜浠笉浠呭垎浜唬鐮佺殑鏅烘収锛岃繕鎺㈣鎶€鏈殑娣卞害涓庡箍搴︺€傛棤璁烘偍鏄祫娣卞紑鍙戣€呰繕鏄妧鏈柊鎵嬶紝杩欓噷閮芥湁涓€鐗囧睘浜庢偍鐨勫ぉ绌恒€傝鎴戜滑鍦ㄧ煡璇嗙殑娴锋磱涓竴璧疯埅琛岋紝鍏卞悓鎴愰暱锛屾帰绱㈡妧鏈殑鏃犻檺鍙兘銆?/p>
馃殌 鎺㈢储涓撴爮锛氬姝鎶€鏈殑棣栭〉 鈥斺€?鎸佺画瀛︿範锛屼笉鏂繘姝ワ紝璁╁涔犳垚涓烘垜浠叡鍚岀殑涔犳儻锛岃鎬荤粨鎴愪负鎴戜滑鍓嶈繘鐨勫姩鍔涖€?/p>
馃攳 鎶€鏈鑸細
- 浜哄伐鏅鸿兘锛氭繁鍏ユ帰璁ㄤ汉宸ユ櫤鑳介鍩熸牳蹇冩妧鏈€?/li>
- 鑷姩椹鹃┒锛氬垎浜嚜鍔ㄩ┚椹堕鍩熸牳蹇冩妧鏈拰瀹炴垬缁忛獙銆?/li>
- 鐜閰嶇疆锛氬垎浜獿inux鐜涓嬬浉鍏虫妧鏈鍩熺幆澧冮厤缃墍閬囧埌鐨勯棶棰樿В鍐崇粡楠屻€?/li>
- 鍥惧儚鐢熸垚锛氬垎浜浘鍍忕敓鎴愰鍩熸牳蹇冩妧鏈拰瀹炴垬缁忛獙銆?/li>
- 铏氭嫙鐜板疄鎶€鏈?/strong>锛氬垎浜櫄鎷熺幇瀹炴妧鏈鍩熸牳蹇冩妧鏈拰瀹炴垬缁忛獙銆?/li>
馃寛 闈炲父鏈熷緟鍦ㄨ繖涓暟瀛椾笘鐣岄噷涓庢偍鐩搁亣锛屼竴璧峰涔犮€佹帰璁ㄣ€佹垚闀裤€備笉瑕佸繕浜嗚闃呮湰涓撴爮锛岃鎴戜滑鐨勬妧鏈箣鏃呬笉鍐嶅鍗曪紒
馃挅馃挅馃挅 鉁ㄢ湪 娆㈣繋鍏虫敞鍜岃闃咃紝涓€璧峰紑鍚妧鏈帰绱箣鏃咃紒 鉁ㄢ湪
鏂囩珷鐩綍
- 1. 鑳屾櫙浠嬬粛
- 2. 鍘熺悊
- 3. 浣跨敤鍦烘櫙
- 4. 浠g爜鏍蜂緥
- 5. 瀹為檯搴旂敤妗堜緥
- 6. 鎬荤粨
1. 鑳屾櫙浠嬬粛
鍦ㄨ蒋浠跺紑鍙戜腑锛屾垜浠粡甯镐細閬囧埌闇€瑕侀泦鎴愪笉鍚屾帴鍙f垨绯荤粺鐨勬儏鍐点€傞€傞厤鍣ㄦā寮忔彁渚涗簡涓€绉嶄紭闆呯殑鏂瑰紡鏉ヨВ鍐虫帴鍙d笉鍏煎鐨勯棶棰橈紝浣垮緱鍘熸湰涓嶅吋瀹圭殑鎺ュ彛鑳藉鍗忓悓宸ヤ綔銆傛湰鏂囧皢娣卞叆鎺㈣Python涓殑閫傞厤鍣ㄦā寮忥紝鍖呮嫭鍏惰儗鏅€佸師鐞嗐€佷娇鐢ㄥ満鏅€佷唬鐮佸疄鐜板拰瀹為檯搴旂敤妗堜緥銆?/p>
閫傞厤鍣ㄦā寮忔槸涓€绉嶇粨鏋勫瀷璁捐妯″紡锛屽畠鍏佽灏嗕笉鍏煎鐨勬帴鍙h浆鎹负涓€涓彲浠ヤ娇鐢ㄧ殑鍏煎鎺ュ彛銆傝繖绉嶆ā寮忓湪绯荤粺闆嗘垚銆佹彃浠跺紑鍙戝拰绗笁鏂瑰簱闆嗘垚绛夊満鏅腑闈炲父鏈夌敤銆?
2. 鍘熺悊
閫傞厤鍣ㄦā寮忕殑鏍稿績鍘熺悊鍖呮嫭锛?/p>
- 瀹氫箟鐩爣鎺ュ彛锛氬畾涔変竴涓洰鏍囨帴鍙o紝杩欐槸鎴戜滑甯屾湜涓庣幇鏈夌郴缁熸垨绫诲崗鍚屽伐浣滅殑鎺ュ彛銆?/li>
- 鍒涘缓閫傞厤鍣ㄧ被锛氬垱寤轰竴涓€傞厤鍣ㄧ被锛屽畠瀹炵幇浜嗙洰鏍囨帴鍙o紝骞跺唴閮ㄦ寔鏈変竴涓笉鍏煎鎺ュ彛鐨勫疄渚嬨€?/li>
- 瀹炵幇鎺ュ彛鍏煎锛氶€傞厤鍣ㄧ被閫氳繃璋冪敤涓嶅吋瀹规帴鍙g殑瀹炰緥鏂规硶锛屽苟灏嗗叾杞崲涓虹洰鏍囨帴鍙f墍闇€鐨勫舰寮忥紝浠庤€屽疄鐜版帴鍙g殑鍏煎銆?/li>
閫傞厤鍣ㄦā寮忔槸涓€绉嶅湪杞欢宸ョ▼涓父鐢ㄧ殑璁捐妯″紡锛屽畠涓昏鐢ㄤ簬瑙e喅涓や釜涓嶅吋瀹规帴鍙d箣闂寸殑闆嗘垚闂銆傞€氳繃寮曞叆涓€涓腑闂村眰鈥斺€旈€傞厤鍣紝浣垮緱鍘熸湰涓嶅吋瀹圭殑鎺ュ彛鑳藉鏃犵紳鍗忓悓宸ヤ綔銆備笅闈㈣缁嗘帰璁ㄩ€傞厤鍣ㄦā寮忕殑鏍稿績鍘熺悊锛?/p>
-
瀹氫箟鐩爣鎺ュ彛锛?鐩爣鎺ュ彛鏄€傞厤鍣ㄦā寮忎腑鐨勫叧閿蹇碉紝瀹冨畾涔変簡涓庣幇鏈夌郴缁熸垨绫诲崗鍚屽伐浣滄墍闇€鐨勬搷浣滃拰鎺ュ彛褰㈠紡銆傝繖涓帴鍙e厖褰撲簡绯荤粺鏈熸湜鐨勫鎴风鎺ュ彛锛屽畠瑙勫畾浜嗗鎴风鏈熸湜浣跨敤鐨勬柟娉曞拰灞炴€с€傜洰鏍囨帴鍙g殑寮曞叆浣垮緱绯荤粺璁捐鏇村姞鐏垫椿锛屽洜涓虹郴缁熷彧闇€瑕佸叧娉ㄧ洰鏍囨帴鍙g殑瀹炵幇锛岃€屼笉闇€瑕佸叧蹇冨叿浣撶殑瀹炵幇缁嗚妭銆?/p>
class TargetInterface: def request(self): pass
鍦ㄨ繖涓緥瀛愪腑锛?code>TargetInterface瀹氫箟浜嗗鎴风鏈熸湜浣跨敤鐨?code>request鏂规硶銆?/p>
-
鍒涘缓閫傞厤鍣ㄧ被锛?閫傞厤鍣ㄧ被鏄€傞厤鍣ㄦā寮忕殑鏍稿績锛屽畠瀹炵幇浜嗙洰鏍囨帴鍙o紝骞跺湪鍐呴儴鎸佹湁涓€涓笉鍏煎鎺ュ彛鐨勫疄渚嬨€傞€傞厤鍣ㄧ被鍏呭綋浜嗘ˉ姊佺殑瑙掕壊锛屽皢涓嶅吋瀹规帴鍙g殑瀹炵幇缁嗚妭灏佽璧锋潵锛屽苟閫氳繃鐩爣鎺ュ彛鏆撮湶缁欏閮ㄤ娇鐢ㄣ€傝繖鏍凤紝瀹㈡埛绔彧闇€瑕佷笌閫傞厤鍣ㄧ被浜や簰锛岃€屼笉闇€瑕佸叧蹇冧笉鍏煎鎺ュ彛鐨勫叿浣撳疄鐜般€?/p>
class IncompatibleClass: def specific_method(self): print("Incompatible Method Called") class AdapterClass(TargetInterface): def __init__(self, incompatible_obj): self._incompatible_obj = incompatible_obj def request(self): # 璋冪敤涓嶅吋瀹瑰璞$殑鏂规硶锛屽苟杞寲涓哄吋瀹圭殑杈撳嚭 self._incompatible_obj.specific_method()
鍦ㄨ繖涓緥瀛愪腑锛?code>AdapterClass瀹炵幇浜?code>TargetInterface锛屽苟鍦ㄥ唴閮ㄦ寔鏈変竴涓?code>IncompatibleClass鐨勫疄渚嬨€傚畠閫氳繃璋冪敤
IncompatibleClass
鐨勬柟娉曟潵瀹炵幇request
鏂规硶銆?/p> -
瀹炵幇鎺ュ彛鍏煎锛?閫傞厤鍣ㄧ被閫氳繃璋冪敤涓嶅吋瀹规帴鍙g殑瀹炰緥鏂规硶锛屽苟灏嗗叾杞崲涓虹洰鏍囨帴鍙f墍闇€鐨勫舰寮忥紝浠庤€屽疄鐜版帴鍙g殑鍏煎銆傝繖涓繃绋嬮€氬父娑夊強鍒版柟娉曡皟鐢ㄧ殑杞崲銆佹暟鎹牸寮忕殑杞崲鎴栬€呮搷浣滄祦绋嬬殑璋冩暣銆傞€傞厤鍣ㄧ被鐨勮璁′娇寰楄繖绉嶈浆鎹㈠浜庡鎴风鏄€忔槑鐨勶紝瀹㈡埛绔彧闇€瑕佹寜鐓х洰鏍囨帴鍙g殑绾﹀畾鏉ヤ娇鐢ㄩ€傞厤鍣ㄧ被銆?/p>
# 瀹㈡埛绔唬鐮?/span> adapter = AdapterClass(IncompatibleClass()) adapter.request() # 瀹㈡埛绔€氳繃閫傞厤鍣ㄧ被璋冪敤涓嶅吋瀹圭殑鏂规硶
鍦ㄨ繖涓緥瀛愪腑锛屽鎴风閫氳繃
AdapterClass
鐨勫疄渚嬭皟鐢?code>request鏂规硶锛岃€岃繖涓柟娉曞唴閮ㄥ疄闄呬笂鏄皟鐢ㄤ簡IncompatibleClass
鐨?code>specific_method鏂规硶銆傚鎴风涓嶉渶瑕佺煡閬?code>IncompatibleClass鐨勫瓨鍦紝涔熶笉闇€瑕佸叧蹇?code>specific_method鏂规硶鐨勫叿浣撳疄鐜般€?/p>
閫氳繃杩欎笁涓牳蹇冨師鐞嗭紝閫傞厤鍣ㄦā寮忔彁渚涗簡涓€绉嶇伒娲荤殑鏂瑰紡鏉ヨВ鍐虫帴鍙d笉鍏煎鐨勯棶棰橈紝浣垮緱涓嶅悓绯荤粺鎴栫粍浠惰兘澶熷崗鍚屽伐浣溿€傝繖绉嶆ā寮忓湪瀹為檯搴旂敤涓潪甯稿箍娉涳紝鐗瑰埆鏄湪绯荤粺闆嗘垚銆佺涓夋柟搴撻泦鎴愪互鍙婃彃浠跺紑鍙戠瓑棰嗗煙銆?/p>
3. 浣跨敤鍦烘櫙
閫傞厤鍣ㄦā寮忛€傜敤浜庝互涓嬪満鏅細
- 绯荤粺闆嗘垚锛氬綋闇€瑕侀泦鎴愮殑绯荤粺鎴栨ā鍧楁帴鍙d笉鍏煎鏃躲€?/li>
- 绗笁鏂瑰簱闆嗘垚锛氬綋闇€瑕佷娇鐢ㄧ涓夋柟搴擄紝浣嗗叾鎺ュ彛涓庣幇鏈夌郴缁熶笉鍏煎鏃躲€?/li>
- 淇濇寔鎺ュ彛涓€鑷存€?/strong>锛氬綋闇€瑕佷负澶氫釜绫绘彁渚涚粺涓€鐨勬帴鍙f椂銆?/li>
4. 浠g爜鏍蜂緥
浠ヤ笅鏄竴涓狿ython涓疄鐜伴€傞厤鍣ㄦā寮忕殑绀轰緥锛?/p>
# 瀹氫箟鐩爣鎺ュ彛
class Target:
def request(self):
pass
# 涓嶅吋瀹圭殑鎺ュ彛
class Adaptee:
def specific_request(self):
print("Specific Request")
# 閫傞厤鍣ㄧ被
class Adapter(Target):
def __init__(self, adaptee):
self.adaptee = adaptee
def request(self):
self.adaptee.specific_request()
# 瀹㈡埛绔唬鐮?/span>
def client_code(target: Target):
target.request()
# 浣跨敤閫傞厤鍣?/span>
adaptee = Adaptee()
adapter = Adapter(adaptee)
client_code(adapter)
5. 瀹為檯搴旂敤妗堜緥
鍋囪鎴戜滑姝e湪寮€鍙戜竴涓敮浠樼郴缁燂紝闇€瑕侀泦鎴愬涓敮浠樼綉鍏筹紝浣嗚繖浜涙敮浠樼綉鍏崇殑鎺ュ彛鍚勪笉鐩稿悓銆傛垜浠彲浠ヤ娇鐢ㄩ€傞厤鍣ㄦā寮忔潵瀹炵幇杩欎竴闇€姹傘€?/p>
# 瀹氫箟鏀粯缃戝叧鎺ュ彛
class PaymentGateway:
def pay(self, amount):
pass
# 绗笁鏂规敮浠樼綉鍏?/span>
class ThirdPartyGateway:
def process_payment(self, amount):
print(f"Processing payment of {amount}")
# 閫傞厤鍣ㄧ被
class ThirdPartyGatewayAdapter(PaymentGateway):
def __init__(self, gateway):
self.gateway = gateway
def pay(self, amount):
self.gateway.process_payment(amount)
# 瀹㈡埛绔唬鐮?/span>
def process_payment(gateway: PaymentGateway, amount):
gateway.pay(amount)
# 浣跨敤閫傞厤鍣?/span>
third_party_gateway = ThirdPartyGateway()
adapter = ThirdPartyGatewayAdapter(third_party_gateway)
process_payment(adapter, 100)
6. 鎬荤粨
閫傞厤鍣ㄦā寮忔槸涓€绉嶉潪甯稿疄鐢ㄧ殑璁捐妯″紡锛屽畠閫氳繃鍒涘缓涓€涓€傞厤鍣ㄧ被鏉ヨВ鍐虫帴鍙d笉鍏煎鐨勯棶棰橈紝浣垮緱鍘熸湰涓嶅吋瀹圭殑鎺ュ彛鑳藉鍗忓悓宸ヤ綔銆傚湪瀹為檯寮€鍙戜腑锛屽彲浠ユ牴鎹叿浣撻渶姹傞€夋嫨鍚堥€傜殑閫傞厤鍣ㄦā寮忓疄鐜版柟寮忥紝浠ユ弧瓒充笉鍚岀殑涓氬姟闇€姹傘€?/p>
璁捐妯″紡鏄蒋浠惰璁′腑鐨勮壓鏈紝閫傞厤鍣ㄦā寮忎綔涓哄叾涓殑涓€绉嶏紝涓烘垜浠彁渚涗簡涓€绉嶄紭闆呯殑鏂瑰紡鏉ヨВ鍐虫帴鍙d笉鍏煎鐨勯棶棰樸€傚笇鏈涙湰鏂囪兘澶熷府鍔╀綘鍦≒ython椤圭洰涓洿濂藉湴搴旂敤閫傞厤鍣ㄦā寮忥紝鎻愬崌浠g爜鐨勮川閲忓拰鏁堢巼銆?/p>
馃専 鍦ㄨ繖绡囧崥鏂囩殑鏃呯▼涓紝鎰熻阿鎮ㄧ殑闄即涓庨槄璇汇€傚鏋滃唴瀹瑰鎮ㄦ湁鎵€鍚彂鎴栧府鍔╋紝璇蜂笉瑕佸悵鍟偍鐨勭偣璧?馃憤馃徎锛岃繖鏄鎴戞渶澶х殑榧撳姳鍜屾敮鎸併€?/p>
馃摎 鏈汉铏借嚧鍔涗簬鎻愪緵鍑嗙‘涓旀繁鍏ョ殑鎶€鏈垎浜紝浣嗗璇嗘湁闄愶紝闅惧厤浼氭湁鐤忔紡涔嬪銆傚鏈変笉瓒虫垨閿欒锛屾伋璇峰悇浣嶄笟鐣屽悓浠佸湪璇勮鍖虹暀涓嬪疂璐垫剰瑙侊紝鎮ㄧ殑鎵硅瘎鎸囨鏄垜涓嶆柇杩涙鐨勫姩鍔涳紒馃槃馃槃馃槃
馃挅馃挅馃挅 濡傛灉鎮ㄥ彂鐜拌繖绡囧崥鏂囧鎮ㄧ殑鐮旂┒鎴栧伐浣滄湁鎵€瑁ㄧ泭锛岃涓嶅悵鐐硅禐銆佹敹钘忥紝鎴栧垎浜粰鏇村闇€瑕佺殑鏈嬪弸锛岃鐭ヨ瘑鐨勫姏閲忎紶鎾緱鏇磋繙銆?/p>
馃敟馃敟馃敟 鈥淪tay Hungry, Stay Foolish鈥?鈥斺€?姹傜煡鐨勯亾璺案鏃犳澧冿紝璁╂垜浠繚鎸佹复鏈涗笌鍒濆績锛岄潰瀵规寫鎴橈紝鍕囧線鐩村墠銆傛棤璁哄墠璺涔堟极闀匡紝鍙鎴戜滑鍧氭寔涓嶆噲锛岀粓灏嗘姷杈剧洰鐨勫湴銆傪煂欚煂欚煂?/p>
馃憢馃徎 鍦ㄦ锛屾垜涔熼個璇锋偍鍔犲叆鎴戠殑鎶€鏈氦娴佺ぞ鍖猴紝鍏卞悓鎺㈣銆佸涔犲拰鎴愰暱銆傝鎴戜滑鎼烘墜骞惰繘锛屽叡鍒涜緣鐓岋紒