Java設計模式 裝飾器模式

2021-08-20 10:38:36 字數 2418 閱讀 4837

裝飾器模式是一種結構型設計模式,可以做到在不改變原來物件功能的情況下,向原有的物件新增新的功能,起到乙個裝飾的作用。具體的做法是建立乙個裝飾器類,用來包裝原有的類,在不改變原有類方法的情況下,為原有類新增新的功能。

來看乙個例子,我們在外面吃飯,有很多食物,其中有燒烤和火鍋。比如我們點了燒烤,但是覺得味道不夠爽,所以我們選擇讓老闆加鹽,或者加辣椒,這裡的加鹽和加辣椒其實就是對事物起裝飾作用。用**實現如下:

建立food介面

提供兩個抽象方法

public

inte***ce

food

建立實現介面的實現類

barbecue實現類

public

class

barbecuefood

implements

food

/*** 返回**

**@return

*/@override

public string getcost()

}

hotpot實現類

public

class

hotpotfood

implements

food

/*** 返回**

**@return

*/@override

public string getcost()

}

建立裝飾器基類

fooddecorator是乙個抽象類,其中組合food類

public

abstract

class

fooddecorator

implements

food

/*** 返回描述

**@return

*/@override

public string getdesc()

/*** 返回**

**@return

*/@override

public string getcost()

}

建立saltfooddecorator裝飾器類

public

class

saltfooddecorator

extends

fooddecorator

/*** 返回描述

**@return

*/@override

public string getdesc()

/*** 返回**

**@return

*/@override

public string getcost()

}

建立pepperfooddecorator裝飾器類

public

class

pepperfooddecorator

extends

fooddecorator

/*** 返回描述

**@return

*/@override

public string getdesc()

/*** 返回**

**@return

*/@override

public string getcost()

}

最後來測試一下
public

class

main

private

static

void

display(object obj)

}

結果如下:

燒烤

最後**:3.0塊

-------------分割線---------------

加鹽的燒烤

加鹽多收2.0塊

最後**:3.0塊 + 2.0塊

-------------分割線---------------

加鹽的火鍋

加辣椒多收10.0塊

最後**:100.0塊 + 10.0塊

來看一下類圖會更加地清晰

裝飾器模式在日常開發中也有很多應用,典型的就是jdk裡面的io。

inputstream代表輸入流,輸入**可以是檔案(fileinputstream)、管道(pipedinputstream)、陣列(bytearrayinputstream)等。就像上面的燒烤,火鍋。filterinputstream就是裝飾器的基類,他的實現類是一系列的裝飾器,比如bufferedinputstream可以用緩衝區來修飾inputstream,把inputsteam包裝成有緩衝區的輸入流。

Java設計模式 裝飾器模式

我們 不從最基本的裝飾器模式概念入手 先來看問題好了。提出問題 假如 有以下海關入關通用處理方法 public class shanghaicustoms public class beijingcustoms 現在我們需要新加入需求,原先的處理流程不變,但是需要加入security checks和...

Java 設計模式 裝飾器模式

本文由 luzhuo 編寫,請保留該資訊.原文 裝飾模式可以動態的給乙個物件增加一些額外的功能 增強功能 相比於繼承,裝飾模式能對不支援繼承的類進行增強 並且比繼承更靈活,不需要生成大量的子類 public inte ce phonepublic final class phoneimpl impl...

java設計模式之裝飾器模式

一 裝飾器模式簡介 裝飾器模式可以動態給乙個物件新增一些額外的職責,同時又不改變其結構。就象在牆上刷油漆.使用decorator模式相比用生成子類方式達到功能的擴充顯得更為靈活。這種模式建立了乙個裝飾類,用來包裝原有的類,並在保持類方法簽名完整性的前提下,提供了額外的功能。裝飾器模式的應用場景 1 ...