• <menu id="eeoky"><tt id="eeoky"></tt></menu>
  • <nav id="eeoky"></nav>
  • 面向對象設計原則

    面向對象設計原則

    熟練掌握和應用面向對象設計(Object Oriented Design,OOD)7大原則,是初/中級JAVA工程師向高級/資深工程師進階的一個必備技能,它可以大大提升程序的可復用性和可維護性,也是重構代碼的一大利器。7大設計原則包括開閉原則、里氏替換原則、依賴倒轉原則、單一職責原則、接口隔離原則、組合/聚合復用原則、迪米特法則。

    1. 開閉原則

    面向對象可復用設計原則中最基礎的原則便是開閉原則(Open-Closed Principle,OCP)。開閉原則指的是在設計一個對象(類、模塊、函數)時,應遵循或做到對擴展開放、對修改關閉,其核心思想是面向接口/抽象進行編程。比如第四方支付平臺,集成微信支付服務時,遵循開閉原則的話,正常的做法就是先抽象設計一個支付接口,然后微信支付類實現該支付接口。以后平臺集成更多如支付寶、華為、蘋果等支付服務時,只需要擴展一個對應支付方式的支付類即可,這樣既擴展了新的支付服務,同時避免了修改現有的支付接口以及微信支付類,最大限度保證了新代碼不會影響現有的業務代碼。這就是對擴展(新對象)開放,對修改(現有對象)關閉。

    2. 里氏替換原則

    里氏替換原則(Liskov Substitution Principle,LSP)要求設計一個對象時,代碼中任何父類對象可以出現的地方,子類都可以出現,即可以使用子類來代替父類。實現開閉原則的核心思想是面向接口/抽象進行編程,其關鍵步驟是抽象化,而父類和子類的繼承關系就是抽象化的具體體現,所以里氏替換原則是對實現抽象化的具體步驟的規范,它是對開閉原則的補充。比如教學平臺中新增加了學生用戶Student,和教師用戶Teacher一樣進入個人中心,都需要登錄,在設計或重構用戶登錄服務類時,抽象的用戶User類作為教師Teacher和學生Student的父類,此時需要遵循出現用戶User的地方,都可以使用新擴展的學生Student代替,當然也必須也可以使用教師Teacher代替,這樣設計出來的User類,對用戶登錄服務類來說,后續擴展更多的用戶User的子類比如家長、輔導員時,可以保證符合開閉原則。

    3.依賴倒轉原則

    依賴倒轉原則(Dependency Inversion Principle,DIP)指程序中要依賴抽象(接口/抽象類)而不是具體的實現(實現類)進行編程,即面向接口/抽象進行編程,這樣可以最大程度降低模塊之間的耦合。比如訂單服務中,會調用(依賴)支付服務以完成訂單的支付。此時的訂單服務實現類代碼中,聲明或持有的應該是一個支付服務PayService接口,而不是具體實現類比如Alipay或WeChatPay,所有需要用到支付服務的地方,調用的都是PayService接口變量,即代碼中都是接口,等到在運行時才實例化或注入具體的實現類,編寫代碼時不需要關心具體實現類,也就是面向接口/抽象編程。這樣,在應用程序擴展或集成新的支付服務時,原來的訂單服務代碼可以不需要進行修改任何代碼,這樣也就符合了開閉原則。

    4.單一職責原則

    單一職責原則(Single Function Principle,SFP)又稱單一功能原則,它規范設計一個類應只實現單一或獨立的職責即業務功能。職責分明的設計,可以提高程序的可維護性。如果多個獨立的業務功能設計在同一類中,當一個或多個業務功能擴展或變動需要修改代碼時,可能會帶來沖突問題,降低可維護性。比如訂單服務中,又包含了用戶服務,重構用戶服務的代碼時,相當于重構訂單服務的代碼,這是不合理的,容易造成混淆。

    5.接口隔離原則

    接口隔離原則(Inteface Segregation Principle,ISP)指設計時不同的功能應定義在不同的接口上,避免實現類依賴不需要的接口,換個角度理解就是一個類應該依賴盡量少的接口或實現類,減少程序的冗余性和復雜性。

    6.組合/聚合復用原則

    組合/聚合復用原則(Composition/Aggregation Principle,CARP)也叫做合成復用原則(Composition Reuse Principle,CRP),它指在一個新的對象中引入/注入現有的對象以達到功能復用和擴展的目的。簡單講就是盡量使用組合/聚合而不要使用繼承。

    7.迪米特法則

    迪米特法則(Low of Demeter,LoD)指設計一個對象時,盡可能少的與其它對象發生相互作用,即盡可能少的了解或依賴其它對象,降低耦合度。廣義的迪米特法則,在類設計的具體操作上,主要通過以下三點來體現:

    • 優先考慮將一個類設置為final不變類

    • 盡量降低一個類及其成員變量的訪問權限

    • 謹慎使用序列化

    全部教程
    疯狂婬荡乱婬A片中文,特级西西人体444WWw高清大胆,国产性XXXX18免费观看视频,中文字幕乱伦,free性满足HD国产精品,牛人女厕偷拍1区2区