您好,登錄后才能下訂單哦!
這篇文章主要講解了“Android中的裝飾模式介紹”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Android中的裝飾模式介紹”吧!
裝飾模式(Decorator Pattern):也可以稱為包裝模式(Wrapper Pattern),它動態給一個對象增加額外的職責,就增加對象功能來說,裝飾模式比生成子類實現更為靈活,它是一種對象結構型模式。
裝飾模式是一種用于替代繼承的技術,通過一種無須定義子類的方式給對象動態增加職責,使用對象間的關聯關系替代繼承關系 !
Component(抽象組件類)
具體組件類和抽象裝飾類共同父類,聲明了具體組件中需要實現的方法,它的引入可以使調用者以一致的方式處理未裝飾對象和裝飾對象,實現調用者的透明操作
ConcreteComponent(具體組件類) 實現抽象組件類的聲明的方法
Decorator(抽象裝飾類) 用于增加具體組件的職責,它的子類實現具體職責,它持有一個具體組件類的引用,通過該引用可以調用未裝飾前的方法,并通過子類擴展該方法
ConcreteDecorator(具體裝飾類) 給具體組件類增加新方法
平時生活中,有很多需要送禮物的時候,一個好禮物更需要好包裝來襯托,但是有時候買的禮物只有一個很丑陋的盒子,以裝飾模式實現包裝禮物的需求:
Component 類:
public abstract class Gift { /** * 禮物包裝 */ public abstract void packaging(); }
ConcreteComponent 類:
public class BirthdayGift extends Gift { @Override public void packaging() { LogUtils.i("包裝盒"); } }
Decorator 類:
public abstract class GiftPackaging extends Gift { private Gift gift; public GiftPackaging(Gift gift) { this.gift = gift; } public void packaging() { gift.packaging(); } }
ConcreteDecorator 類:
// 簡易包裝public class SimplePackaging extends GiftPackaging { public SimplePackaging(Gift gift) { super(gift); } @Override public void packaging() { super.packaging(); addColorSheet(); } private void addColorSheet() { LogUtils.i("包彩紙"); }} // 奢華包裝 public class LuxuryPackaging extends GiftPackaging { public LuxuryPackaging(Gift gift) { super(gift); } @Override public void packaging() { super.packaging(); addColorSheet(); addRibbon(); addCard(); addGiftBox(); } private void addColorSheet() { LogUtils.i("包彩紙"); } private void addRibbon() { LogUtils.i("加彩帶"); } private void addCard() { LogUtils.i("加賀卡"); } private void addGiftBox() { LogUtils.i("加禮盒"); } }
Client 類:
// 簡易包裝的禮物Gift gift = new BirthdayGift();Gift giftPackaging = new SimplePackaging(gift); giftPackaging.packaging();// 奢華包裝的禮物Gift gift = new BirthdayGift();Gift giftPackaging = new LuxuryPackaging(gift); giftPackaging.packaging();
上面實現的裝飾模式叫做透明裝飾模式,客戶端可以完全針對抽象編程,裝飾模式的透明性要求客戶端不應該將對象類型聲明為具體組件類型或者具體裝飾類型,需要全部聲明為抽象組件類型,對于客戶端調用來說,具體組件對象和具體裝飾對象是一樣的,沒有任何區別,可以一致處理這些對象,實現透明裝飾模式時,要求具體裝飾類的 operation() 方法覆蓋抽象裝飾類的 operation() 方法,除了調用具體組件類的 operation() 方法外,還需要調用新增的 addedBehavior() 方法來增加新職責。
透明模式可以對一個已裝飾的對象再進行裝飾,獲得更復雜,功能更強大的對象。
有透明裝飾模式,就有對應的半透明裝飾模式,有時我們需要單獨調用新增方法,就不得不把對象聲明為具體裝飾類型,具體組件對象還是可以繼續定義為抽象組件類型,這就是半透明裝飾模式。
還是拿上面的栗子來說,如果包裝禮物只想用絲帶和彩紙包裝或者再加一個禮袋,用半透明模式就會非常方便靈活,直接調用對應的方法就可以了,但是客戶端需要區別對待裝飾前后的對象
利用關聯關系替代繼承關系,更加靈活,不會導致類個數急劇增加
透明裝飾模式可以對一個對象進行多次裝飾,通過使用不同的具體裝飾類的組合,能得到功能更加強大的對象
具體組件類和具體裝飾類可以獨立變化,根據需求,在不變原來代碼得基礎上,增加這兩個類,很符合“開閉原則”
既然是更加靈活的解決方法,出錯的幾率也隨之變大,排查錯誤的困難也跟著變大
感謝各位的閱讀,以上就是“Android中的裝飾模式介紹”的內容了,經過本文的學習后,相信大家對Android中的裝飾模式介紹這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。