1.設計模式的六大原則
(1)開放封閉原則
原則思想:盡量通過擴展軟件實體來解決需求變化,而不是通過修改已有的代碼來完成變化。
描述:一個軟件產品在生命周期內,都會發生變化,既然變化是一個既定的事實,我們就應該在設計的時候盡量適應這些變化,以提高項目的穩定性和靈活性。
(2)里氏代換原則
原則思想:使用的基類可以在任何地方使用繼承的子類,完美的替換基類。
描述:子類可以擴展父類的功能,但不能改變父類原有的功能。子類可以實現父類的抽象方法,但不能覆蓋父類的非抽象方法,子類中可以增加自己特有的方法。
(3)依賴倒轉原則
原則思想:面向接口編程
描述:依賴倒轉原則要求我們在程序代碼中傳遞參數或在關聯關系中,盡量引用層次高的抽象層類。接口編程依賴于抽象而不依賴于具體。
(4)接口隔離原則:
原則思想:按照功能將多個接口隔離
描述:為了升級和維護的方便,使用多個隔離的接口比使用單個接口要好,還是一個降低類之間的耦合度的意思。
(5)迪米特法則(最少知道原則)
原則思想:一個對象應當對其他對象有盡可能少地了解,簡稱類間解耦
描述:一個類盡量減少自己對其他對象的依賴,原則是低耦合,高內聚,只有使各個模塊之間的耦合盡量的低,才能提高代碼的復用率。
(6)單一職責原則
原則思想:一個方法只負責一件事情
描述:一個方法一個類只負責一個職責,各個職責的程序改動,不影響其他程序。
2.設計模式的三大類
(1)創建型模式(5種):工廠方法模式、抽象工廠模式,單例模式、建造者模式、原型模式
(2)結構型模式(7種):適配器模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式
(3)行為型模式(11種):策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、解釋器模式
3.適配器模式的介紹
適配器模式是一種結構型設計模式。適配器模式的思想是:把一個類的接口變換成客戶端所期待的另一種接口,從而使原本因接口不匹配而無法在一起工作的兩個類能夠在一起工作。
用電器來打個比喻:有一個電器的插頭是三腳的,而現有的插座是兩孔的,要使插頭插上插座,我們需要一個插頭轉換器,這個轉換器即是適配器。
適配器模式涉及3個角色:
源(Adaptee):需要被適配的對象或類型,相當于插頭。
適配器(Adapter):連接目標和源的中間對象,相當于插頭轉換器。
目標(Target):期待得到的目標,相當于插座。
適配器模式包含三種形式:類適配器模式、對象適配器模式、接口適配器模式(或又稱作缺省適配器模式)
4.裝飾器模式的介紹
裝飾器模式的設計理念主要是以對客戶端透明的方式動態擴展對象的功能,是繼承關系的一個替代(繼承會產生大量的子類,而且代碼有冗余)。裝飾器模式可以在不創造更多子類的情況下,將對象的功能加以擴展。裝飾器模式把客戶端的調用委派到被裝飾類。裝飾器模式的關鍵在于這種擴展完全是透明的(裝飾模式的透明性要求客戶端程序不應該將對象聲明為具體構件類型或具體裝飾類型,而應該全部聲明為抽象構件類型),裝飾器模式的應用在java的I/O流中應用的最為顯著。
OutputStream和InputStream對應于抽象構件角色(Component),FileInputStream和FileOutputStream對應具體構件角色(ConcreteComponent),FilterOutputStream和FilterInputStream對應著裝飾角色(Decorator),而BufferedOutputStream,DataOutputStream等等就對應著具體裝飾角色。
5.原型模式的介紹
原型(Prototype)模式的定義:用一個已經創建的實例作為原型,通過復制該原型對象來創建一個和原型相同或相似的新對象。
原型模式包含以下主要角色:
1.抽象原型類:規定了具體原型對象必須實現的接口。
2.具體原型類:實現抽象原型類的clone()方法,它是可被復制的對象。
3.訪問類:使用具體原型類中的clone()方法來復制新的對象
原型模式的克隆分為淺克隆和深克隆。
淺克隆:創建一個新對象,新對象的屬性和原來對象完全相同,對于非基本類型屬性,仍指向原有屬性所指向的對象的內存地址
深克隆:創建一個新對象,屬性中引用的其他對象也會被克隆,不再指向原有對象地址。
6.建造者模式的介紹
建造者模式的四個角色:
1、Product(產品角色):一個具體的產品對象
2、Builder(抽象建造者):創建一個Product對象的各個部件指定接口/抽象類。
3、ConcreteBuilder(具體建造者):實現接口,構建和裝配各個部件。
4、Director(指揮者):構建一個使用Builder接口的對象。它主要用于創建一個復雜的對象。它主要有兩個作用,一是:隔離了客戶與對象的生產過程,二是:負責控制產品對象的生產過程。
建造者模式的特點:
1.增加新的具體建造者無須修改原有類庫的代碼,指揮者類針對抽象建造者類編程,系統擴展方便,符合“開閉原則”。
2.建造者模式所創建的產品一般具有較多的共同點,其組成部分相似,如果產品之間的差異性很大,則不適合使用建造者模式,因此其使用范圍受到一定的限制。
3.如果產品的內部變化復雜,可能會導致需要定義很多具體建造者類來實現這種變化,導致系統變得很龐大,因此在這種情況下,要考慮是否選擇建造者模式。
抽象工廠模式和建造者模式的區別:
抽象工廠模式實現對產品家族的創建,一個產品家族是這樣的一系列產品:具有不同分類維度的產品組合,采用抽象工廠模式不需要關心構建過程,只關心什么產品由什么工廠生產即可。而建造者模式則是要求按照指定的藍圖建造產品,它的主要目的是通過組裝零配件而產生一個新產品。
7.組合模式的介紹
組合模式:組合多個對象形成樹形結構以表示有整體-部分關系層次結構,組合模式可以讓客戶端統一對待單個對象和組合對象。樹形結構就是組合模式的體現。
組合模式的成員有以下:
1、component(抽象構件:容器):它可以是接口或抽象類,為葉子構建和子容器構建對象聲明接口,在該角色中可以包含所有子類共有的行為的實現和聲明。在抽象構建中定義了訪問及管理它的子構件的方法,如增加子構件,刪除子構件,獲取子構件等。
2、leaf(葉子構建):葉子構建可以說是各種類型的文件。葉子構建沒有子構件。它實現了抽象構建中的定義的行為。對于訪問子容器,刪除子容器,增加子容器的報錯處理。
3、compsite(子容器構建):它在組合模式中表示容器節點對象,容器節點是子節點,可以是子容器,可以是葉子構建,它提供一個集合來存儲子節點。
優點:為樹形結構的面向對象實現提供了一種靈活的解決方案,通過葉子對象和容器對象的遞歸組合可以形成復雜的樹形結構,但對樹形結構的控制卻很簡單。
缺點:在增加新的構件時比較難,例如在某個文件夾只能有image或者gif等,這個難以實現。