首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 裝飾模式實戰:以「吃飯」為例展示功能增強核心思想

     編輯:Java 相關知識

裝飾模式核心意圖

在不修改原類別、不使用繼承的前提下,動態為物件新增職責。裝飾類持有被裝飾物件引用,轉發原有操作並插入新行為。

結構角色

  • Component:抽象介面(`Chifan`)
  • ConcreteComponent:具體實作(`ChifanImpl`)
  • Decorator:抽象裝飾類,持有 Component 參考
  • ConcreteDecorator:具體裝飾(`SuperChifan`)

程式碼演示

// Component
interface Chifan { void chifan(); }

// ConcreteComponent
class SimpleMeal implements Chifan {
    public void chifan() { System.out.println("早餐"); }
}

// Decorator 基類(可選,簡化版直接寫具體裝飾類)
class SuperChifan implements Chifan {
    private Chifan target;
    public SuperChifan(Chifan target) { this.target = target; }
    public void chifan() {
        target.chifan();          // 原功能
        System.out.println("打牌"); // 新增功能
        System.out.println("喝酒");
        System.out.println("寫作業");
        System.out.println("工作");
    }
}

// Client
public class DecoratorDemo {
    public static void main(String[] args) {
        Chifan meal = new SimpleMeal();
        Chifan superMeal = new SuperChifan(meal);
        superMeal.chifan();
    }
}

輸出結果

早餐
打牌
喝酒
寫作業
工作

關鍵優勢

  1. 符合開閉原則:擴展功能無需修改原始碼
  2. 靈活組合:可多層裝飾(`new DecoratorB(new DecoratorA(new Component()))`)
  3. 避免繼承爆炸:每種功能組合不再需要新子類

適用場景

  • I/O 流體系(`BufferedReader` 裝飾 `FileReader`)
  • Web 請求處理鏈(日誌、壓縮、加密裝飾)
  • GUI 組件邊框、捲軸動態添加
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved