裝飾器模式,動態地給乙個物件新增一些額外地職責,就增加功能方面來說,裝飾器模式比生成子類更為靈活。裝飾器模式是為已有功能動態地新增更多功能地一種方式。
但是我們什麼時候可以使用裝飾器模式呢?當系統需要新功能的時候,是向舊的類中新增新的**。這些新加的**通常裝飾了原有類的核心職責或主要行為。這種做法的問題在於,在主類中加入了新的字段,新的方法和新的邏輯,從而增加了主類的複雜度,而這些新加入的東西僅僅是為了滿足某種特定的場景需求。
裝飾器模式提供了乙個非常好的解決方案,把每個要裝飾的功能放在單獨的類中,並讓這個類包裝它所要裝飾的物件,因此,當需要執行特殊行為是,客戶**就可以在執行是根據需要有選擇地、按順序地使用裝飾功能包裝物件了。
裝飾器模式把類中的裝飾功能從類中搬移去除,這樣可以簡化原有的類。有效地把類地核心職責和裝飾功能區分開,並去除相關類中重複地裝飾邏輯。
用乙個簡單的例子說明一下裝飾器模式。男人愛帥,女人愛美。男人穿西裝,打領帶,穿皮鞋。女人穿裙子、戴耳環、穿高跟鞋。在這個例子中,男人和女人是需要裝飾的物件,衣服、鞋以及耳環和領帶是裝飾品,用來裝飾男人和女人。
類圖如下:
實現**如下:
/**
* @author wgyang
* create time: 2020-04-13 23:27
* description:人物地基類
*/public abstract class person
/**
* @author wgyang
* create time: 2020-04-13 23:34
* description:男人類(需要裝飾地類)
*/public class man extends person
}
/**
* @author wgyang
* create time: 2020-04-13 23:35
* description:女人類(需要裝飾地類)
*/public class woman extends person
}
/**
* @author wgyang
* create time: 2020-04-13 23:38
* description:
*/public class dress extends person
@override
public void dressup() }}
/**
* @author wgyang
* create time: 2020-04-13 23:46
* description: 耳環
*/public class earrings extends dress
}
/**
* @author wgyang
* create time: 2020-04-13 23:47
* description: 高跟鞋
*/public class highheeledshoes extends dress
}
/**
* @author wgyang
* create time: 2020-04-13 23:48
* description: 皮鞋
*/public class leathershoes extends dress
}
/**
* @author wgyang
* create time: 2020-04-13 23:44
* description: 領帶
*/public class neckite extends dress
}
/**
* @author wgyang
* create time: 2020-04-13 23:45
* description: 裙子
*/public class skirt extends dress
}
/**
* @author wgyang
* create time: 2020-04-13 23:42
* description: 西裝
*/public class suit extends dress
}
客戶端**:
/**
* @author wgyang
* create time: 2020-04-13 23:51
* description: 主類,分別給男人和女人穿上不同的服飾
*/public class main
}
執行結果如下:
******************************=
給男人打扮
穿上西裝
打上領帶
穿上皮鞋
******************************=
給女人打扮
穿上裙子
戴上耳環
穿上高跟鞋
******************************=
皮一下,給男人穿上裙子、戴上耳環、穿上高跟鞋
給男人打扮
穿上裙子
戴上耳環
穿上高跟鞋
******************************=
裝飾器模式起作用的點在具體的裝飾類在複寫方法中呼叫父類同樣的方法的地方,目前能想到的是在日誌上的使用。其他方面的應用暫時還沒想到,以後遇到再做上記錄。 設計模式之裝飾器模式
定義 decorator裝飾器,顧名思義,就是動態地給乙個物件新增一些額外的職責,就好比為房子進行裝修一樣。因此,裝飾器模式具有如下的特徵 它必須具有乙個裝飾的物件。它必須擁有與被裝飾物件相同的介面。它可以給被裝飾物件新增額外的功能。用一句話總結就是 保持介面,增強效能。裝飾器通過包裝乙個裝飾物件來...
設計模式之裝飾器模式
什麼是裝飾器模式 decorator 裝飾器模式的優點 裝飾器模式的缺點 示例 package com.pattern.decorator 抽象類,裝飾器的父類 author yjzhou public abstract class decorator implements component ov...
設計模式之裝飾器模式
裝飾模式 decorator 顧名思義,裝飾模式就是給乙個物件增加一些新的功能,而且是動態的,要求裝飾物件和被裝飾物件實現同乙個介面,裝飾物件持有被裝飾物件的例項,關係圖如下 source類是被裝飾類,decorator類是乙個裝飾類,可以為source類動態的新增一些功能,如下 1.public ...