講到OOP
就一定要講到SOLID
S => SRP(Single Responsibility Principle) 單一職責原則O => OCP(Open Close Principle) 開放封閉原則L => LSP(Liskov Substitution Principle) 替換原則I => IAP(Interface Agreegation Principle) 介面分割原則D => DIP(Dependency Inversion Principle) 相依性反轉原則
SRP(Single Responsibility Principle):
當一把瑞士刀太多功能時,你也不會想要用它
指每一個class 都應該只有一個職責若一個class 作了太多事情
會導致這個class 的複雜度增加
也會造成日後的maintain cost 增加
OCP(Open Close Principle)
藉由增加新的code 來擴充系統的功能,非修改現有的程式碼來擴充系統的功能,所以新的code加進去時不會對現有的功能 造成影響。對擴充具有開放性,對修改具有封閉性(單一理由修改)
LSP(Liskov Substitution Principle) 替換原則
子型別必需可替換父型別玩具鴨需要電池
但野鴨不需要電池
兩者的行為也不同,
就無法用繼承的方式作實作
I => IAP(Interface Agreegation Principle) 介面分割原則
用戶不應被迫相依於他們用不到的函式,
介面屬於client site
不屬於server site
儘可能該介面單純化
想一想
如果介面為了要server 眾多的client 的需求
把介面作的越來越複雜
這樣增加的複雜度是所有的使用者共同承擔的
會造成所有使用者互相影響
D => DIP(Dependency Inversion Principle) 相依性反轉原則
高階邏輯應相依於抽像概念
而非相依於細節
也就是說所有的 new instance
都應該由factory 來產生
讓所有的物件只相依於interface
而相依於實際上的object
而非相依於細節
也就是說所有的 new instance
都應該由factory 來產生
讓所有的物件只相依於interface
而相依於實際上的object
寫程式如何看有沒有功力
就看他寫的code 是否有分階層
讓看的人可以比較清楚的了解程式的邏輯
插頭相依於插座
只有二頭插座侑三頭插座之分
並不會管後面到底是怎麼供電、
電從那裡來的問題
沒有留言:
張貼留言