裝飾器模式
裝飾器模式(Decorator Pattern)允許向一個現(xiàn)有的對象添加新的功能掀虎,同時又不改變其結(jié)構(gòu)份招。這種類型的設(shè)計模式屬于結(jié)構(gòu)型模式龄减,它是作為現(xiàn)有的類的一個包裝轧拄。
這種模式創(chuàng)建了一個裝飾類肛跌,用來包裝原有的類,并在保持類方法簽名完整性的前提下篙梢,提供了額外的功能光羞。
使用場景:
- 擴展一個類的功能。
- 動態(tài)增加功能穴豫,動態(tài)撤銷凡简。
優(yōu)點:
裝飾類和被裝飾類可以獨立發(fā)展,不會相互耦合精肃,裝飾模式是繼承的一個替代模式秤涩,裝飾模式可以動態(tài)擴展一個實現(xiàn)類的功能。
缺點:
多層裝飾比較復(fù)雜司抱。
實現(xiàn)上:
裝飾器類是一個實現(xiàn)了接口的抽象類筐眷,構(gòu)造方法的入?yún)⑹窃摻涌冢涌诘膶崿F(xiàn)方法是調(diào)用接口的方法习柠。抽象類的子類匀谣,會接收一個接口的實現(xiàn)類,然后重寫方法時资溃,除了還會調(diào)用接口的方法外武翎,可以做一些擴展,達到了對原方法的增強溶锭。抽象類的方法還是調(diào)用接口的方法宝恶,而抽象類的子類就是負責進行增強。
注意:
- 代理模式趴捅,側(cè)重于不能直接訪問一個對象垫毙,只能通過代理來間接訪問。
- 裝飾器模式驻售,是因為沒法在編譯器就確定一個對象的功能露久,需要運行時動態(tài)的給對象添加職責,所以只能把對象的功能拆成一個個的小部分欺栗,動態(tài)組裝毫痕。代理模式在編譯器其實就已經(jīng)確定了和代理對象的關(guān)系。
- 他們是為了解決不同的問題而抽象總結(jié)出來的迟几,可以混用消请。