重學(xué)設(shè)計(jì)模式之裝飾者模式
作者: 陳宇明
今天面試被刷了,為啥呀?有什么問(wèn)題沒(méi)有回答好嗎?
本文轉(zhuǎn)載自微信公眾號(hào)「碼個(gè)蛋」,作者陳宇明 。轉(zhuǎn)載本文請(qǐng)聯(lián)系碼個(gè)蛋公眾號(hào)。
代碼
抽象基類
- public abstract class 英雄 {
- public abstract int 攻擊()
- public abstract int 冷卻()
- ........
- }
實(shí)現(xiàn)基類
- public class 李白 extends 英雄 {
- @Override
- public int 冷卻(){
- return 5;
- }
- ........
- }
Buff 抽象類
- public abstract Buff extends 英雄 {
- public abstract int 攻擊()
- public abstract int 冷卻()
- ........
- }
不同 Buff 的實(shí)現(xiàn)類
- public 紅buff extends Buff {
- private 英雄 英雄;
- public 紅buff(英雄 英雄){
- this.英雄 = 英雄;
- }
- @Override
- public int 攻擊() {
- return 英雄.攻擊() + 紅buff額外攻擊;
- }
- .........
- }
- public 藍(lán)buff extends Buff {
- private 英雄 英雄;
- public 藍(lán)buff(英雄 英雄){
- this.英雄 = 英雄;
- }
- @Override
- public int 冷卻() {
- return 英雄.冷卻() + 藍(lán)buff額外減少的冷卻值;
- }
- .........
- }
客戶端
- public class Client {
- public static void main(String[] args) {
- // 沒(méi)有buff的英雄
- 英雄 無(wú)buff李白 = new 李白();
- // 打了紅
- 紅buff 紅buff李白 = new 紅buff(無(wú)buff李白);
- // 再來(lái)個(gè)籃
- 籃buff 紅藍(lán)buff李白 = new 籃buff(紅buff李白);
- }
- }
注意:以上代碼塊用中文編寫類名、變量名是為了讓大家更好的理解,在實(shí)戰(zhàn)過(guò)程中記得替換成相對(duì)應(yīng)的英文。
總結(jié)
出自《Head first 設(shè)計(jì)模式》
責(zé)任編輯:武曉燕
來(lái)源:
碼個(gè)蛋