在實際生產中,某個類的行爲(它所提供的方法)已經無法知足當前的須要了,可是又須要使用原有的部分功能,所以須要對原有對象進行加強——裝飾器設計模式(Decorator Pattern)也叫包裝器模式就是爲解決此問題而誕生的,它是對原有類的一個包裝,屬於結構性設計模式。java
裝飾器模式在不改變現有類方法簽名的前提下,對當前的類進行了加強。git
Tips咱們使用繼承也能夠實現,可是會致使類型結構的膨脹,難以維護。github
咱們來看一個現實中的例子,老李頭家大兒子去年談了個朋友,女方要求有車才能領證,因此老李家買了一輛奇瑞eQ1,可是女方嫌車速太慢喜歡開快車的感受...如今老李家正苦惱中...直到有一天在市裏工做的大表哥回來據說該狀況後,大表哥說這個好整啊,搞到車行去改裝一下,把速度提上去就能夠了啊。設計模式
因而乎,老李家去車行把車進行了改裝,車速上去了,媳婦也領到了,皆大歡喜...架構
這其實就是一個裝飾器的使用案例,原來的eQ1車已經無法知足了,因此進行了速度加強,其餘功能並無改變。app
public interface Car { void run(); void stop(); }
public class QeqCar implements Car { @Override public void run() { System.out.println("Qeq go..."); } @Override public void stop() { System.out.println("Qeq stop!"); } }
public class WrapperCar implements Car { private Car car; public WrapperCar(Car car) { this.car = car; } @Override public void run() { System.out.println("wapper run..."); } @Override public void stop() { car.stop(); } }
public class WrapperTest { @Test public void 裝飾器模式測試(){ Car car = new WrapperCar(new QeqCar()); car.run(); car.stop(); } }
測試輸出:ide
wapper run...
Qeq stop!
更多關於設計模式的資料請參考: JAVA高級架構師技術棧