設計模式精煉(三): 結構型01
外觀模式(Facade)
外觀模式主要是將客戶端直接與多個模塊打交道的方式改為客戶端與門面打交道,然后門面再去與各個模塊打交道。客戶可以不知道各個模塊的具體實現甚至可以不用知道模塊是否存在。
例:
|- Facade模式還可以用在子系統的某些功能不需要暴露給其他子系統的情況,如下:
例:
享元模式
以共享的方式高效地支持大量的細粒度對象,目的是減少多次利用的對象重復創建對內存造成較大的開銷。
|- 英文是flyweight,輕量級的。但是根據設計模式中的概念,將此譯為享元,意思是共享元數據,相當于共享對象。
|- Java中String類型就是使用了享元模式,String對象是final類型的,Java中的字符串常量都是存在常量池中的。
例:
結果為:true
單純向元模式:共享對象
共享對象
例:
結果如下:
21685669
instrinsicState :a
extrinsicState :first
19997786
instrinsicState :b
extrinsicState :second
21685669
instrinsicState :a
extrinsicState :third
由此可見,第一次和第三次對象的hashCode一樣,說明在內存地址中是同一個對象。
復雜享元模式
將一些單純享元使用合成模式加以復合,形成復合享元對象。這樣的復合享元對象本身不能共享,但是它們可以分解成單純享元對象,而后者則可以共享。
例:
運行結果:
a: 21685669
instrinsicState :a
extrinsicState :composite -->
b: 19997786
instrinsicState :b
extrinsicState :composite -->
c: 24079912
instrinsicState :c
extrinsicState :composite -->
+++++++++++++++
復合享元是不可以共享:false
23050916,32379559
單純享元是可以共享的:true
fly1: 21685669,state: a
fly2: 21685669,state: a
fly3: 19997786,state: b
代理模式
給某一個對象提供一個代理對象,并由代理對象控制對原對象的引用,類似于中介,客戶與客戶之間無法直接進行交流,需要使用一個媒介。
例:
本文轉載自微信公眾號【java學習之道】。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。