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