Design Pattern初心者筆記#1 - Medium

文章推薦指數: 80 %
投票人數:10人

以下是我對Design pattern初步的理解,所以如果有錯敬希指正。

... 類別圖(Class Diagram)和物件圖(Object Diagram)是UML 圖的其中兩種; 類別圖描述了類別的型態、 ... GetunlimitedaccessOpeninappHomeNotificationsListsStoriesWriteDesignPattern初心者筆記#1最近讀書會講到Designpattern,不希望聽完就忘了,所以趕緊記一下筆記。

目錄:類別與物件類別圖與物件圖設計原則行為模式(待續)以下是我對Designpattern初步的理解,所以如果有錯敬希指正。

類別與物件類別與物件是物件導向中的基礎概念,所以先複習一下。

“AnObjectisanythingtowhichaconceptapplies.Itisaninstanceofaconcept.”—J.Martin&J.Odell,Object-OrientedMethods:PrinciplesandPractice類別與物件的定義類別(Class)是一種型態,沒有實體。

物件(Object)是一個實體,是類別的具體形象,或者說是類別的展現。

麻瓜版像我們真實世界一樣,類別是抽象的概念;而物件是真實存在、看得見摸得到的東西。

文組版如果跟我一樣是文組出身的話,可以用《易經》的「形而上者謂之道,形而下者謂之器」去理解,類別就是道,物件就是器。

類別與物件的分別除了是不是實體外,類別與物件還有以下分別:要先定義類別才能newobject在真實世界中,我們先有物件再有類別,但在記憶體的世界是先有類別再有物件,因為物件是按類別打造出來的東西。

記憶體類別變數/方法不需要new就會先佔用固定的一份記憶體空間。

物件newobject時才會分配記憶體去儲存物件資料與活動時的狀態。

屬性/方法的使用條件類別屬性/方法不需要產生實例,即可使用。

實例屬性/方法一定要等到實例產生(東西存在了)之後才有實質的存在,因此需要實例才可以使用。

物件可以用類別方法而類別不能用實例方法類別只能存取類別屬性/方法,因為實例沒有生出來,所以類別方法不能用實例屬性類別與物件之間的關聯物件是按類別打造出來的東西,所以類別是物件的架構與行為的範本,但物件可按大原則作出變化。

文組版我們都知道所謂「道」是「高於形」,是萬物運動變化的法則;「形而下」是指作為具體存在、按道去運行的萬物。

類別圖與物件圖不是討論重點所以不詳談類別圖(ClassDiagram)和物件圖(ObjectDiagram)是UML圖的其中兩種類別圖描述了類別的型態、屬性和方法,同時也表達了類別之間的靜態關係(staticrelationship)。

跟類別圖的差別是物件圖描述的是實例之間的關係。

斜體字的類別名稱代表抽象類別(AbstractClass)類別圖中不同箭頭代表不同的類別關係:更多參考:[設計模式]-UML類圖的各符號含義設計原則有SOLID+迪米特法則共六項基本原則:單一職責原則(SRP,SingleResponsibilityPrinciple)實作類別職責單一最極致就是一個class只做一件事,只有一個publicmethod,但通常都不會。

開放/封閉原則(OCP,Open/ClosePrinciple)對擴展開放,對修改封閉當需求變更時,在不改變現有程式碼的前提之下,藉由增加新的程式碼來實作新的功能,而並非修改程式增加功能。

只有一個情況下會修改程式—就是程式碼的邏輯有錯。

Liskov替換原則(LSP,ListovSubstitutionPrinciple)不要破壞繼承體系子類應該要可以替換掉父類,而不會影響程式。

介面隔離原則(ISP,InterfaceSegregationPrinciple)介面實作要精簡只接會用到的介面,用最少的方法去完成最多的事。

依賴反轉原則(DIP,DependencyInversionPrinciple)對著介面寫程式"Programtoaninterface,notanimplementation."物件和物件不應該相互相依,而是要依賴於抽象層(相對於實例,抽象層要穩定得多)當有會重複使用到的行為,不要讓一個物件參考另一個物件,要在物件之間增加抽象層(介面),讓物件依賴於抽象層,所以是針對介面寫程式,而不是實例。

迪米特法則(LoD,LawofDemeter)物件應對其他物件有最少的了解對自己所依賴的類別/物件知道得越少越好。

23種行為模式留待下回分解。

MorefromLumanmanFollowSwiftlearner&sharer|Nothingiswasted,nothingisinvain.Lovepodcastsoraudiobooks?Learnonthegowithournewapp.TryKnowableAboutHelpTermsPrivacyGettheMediumappGetstartedLumanman351FollowersSwiftlearner&sharer|Nothingiswasted,nothingisinvain.FollowHelpStatusWritersBlogCareersPrivacyTermsAboutKnowable



請為這篇文章評分?