原型模式
- 必須讓目標了實現Cloneable接口,該接口中沒有任何方法,這樣的接口僅僅爲一個“標記接口”,作用是告訴Jvm,任何實現了Cloneable接口的類的對象都可以被克隆!
- 必須寫Java.lang.Object的clone方法,一定要把該方法的訪問修飾符,重寫爲public!不然無法調用clone方法
- 克隆方法不會引起構造調構造器!那麼clone如何實現對象的clone?clone方法是直接賦值內存中的二進制。
- 既然克隆方法沒有引起構造器的調用,那麼克隆的對象和原先的對象,地址是否一致?不一致,最終是兩個不同空間的對象。
- 淺拷貝:將原始對象的2進制原樣複製。對於引用數據類型,淺拷貝只會拷貝地址。因此,副本對引用數據類型進行修改就會使得原數據也發生變化。
- 深拷貝:將原始對象的2進制原樣複製,同時對於屬性中的引用數據類型也進行了複製。因此,副本中的引用數據類型發現修改,不會使原始數據發生變化。
- 如果拷貝的對象比較深,那麼這種深拷貝會很麻煩。如何解決?使用序列化+反序列化已經簡化了深拷貝,但是這種方法還是存在缺點,序列化時需要寫到盤符中,這違法了Java代碼的跨平臺性。因此可以通過將序列化的結果存儲在內存中,這樣不使用盤符地址。因此這樣解決了深拷貝的缺點。
建造者模式
- 工廠模式,都是直接實例化一個類的對象即可
- 建造者模式,是在實例化類的對象之後,還要給該對象的屬性賦值
- 建造者模式優點:
a .創建對象的過程是穩定的(以爲有ComputerBuilde接口來穩定過程
b. 創建對象的過程只寫了一次,沒有重複代碼(指揮者完成)
c. 當需要擴展指揮者時,不用修改以前的代碼,直接通過指揮者實現。 - 工廠模式更注重於如何實例化一個對象,建造者模式更注重於如何給實例化出來的對象賦值
裝飾器模式
- 在我們之前的概念中,判斷兩個類之間能不能有繼承關係,主要看這兩個類之間有沒有“is a”關係,並且還要符合“里氏替換原則”。以上只是原則,並不是語法所強制的,也就是說,在特定的情況下,可以違反這個規則。在裝飾器模式中就可以違反這種規則。
- 裝飾器模式優點:功能擴展時不會違反開閉原則
- 裝飾器模式缺點:類還是有點多