Java設計模式 裝飾器模式

2021-07-05 03:13:52 字數 2173 閱讀 7955

我們***不從最基本的裝飾器模式概念入手***,先來看問題好了。

##提出問題

假如 有以下海關入關通用處理方法

public

class

shanghaicustoms

}public

class

beijingcustoms

}

現在我們需要新加入需求,原先的處理流程不變,但是需要加入security checkskeep on record, 這兩個部分分別位於原先方法的前面和後面,如果我們不加任何思考可以直接簡單粗暴

public

void

securitycheck()

public

void

keeponrecord()

直接把這兩個方法加在原先類的合適位置即可,這個修改不會帶來多大的負面影響,假如我們區分 食品和海產品的 security checks和keep on record分別都不同, 那麼還要修改上面的兩個方法 以區分食品和海產品, 如果後續還有什麼需求,是不是修改起來比較費勁,因為要不斷的修改原先的類,這個明顯違背了設計模式對修改封閉原則

##解決方案

先提取介面

public

inte***ce

customs

接著修改原先的兩個類如下

public

class

shanghaicustoms

implements

customs

}public

class

beijingcustoms

implements

customs

}

接著做個包裝類

public

class

implements

customs

@override

public

void

procedure()

}

到這先停一下, 如果對於所有的商品security checks和keep on record都相同, 那麼我們直接在這個類中加入上面的securitycheck()和keeponrecord()即可,這種情況比較簡單,也好理解。

如果對於不同品種的商品security checks和keep on record都不相同,該如何處理呢?

很明顯我們可以這樣做:這裡僅僅舉普通食品和海產品例子

public

class

foodcustoms

extends

@override

public

void

procedure()

public

void

securitycheck()

public

void

keeponrecord()

}public

class

seafoodcustoms

extends

@override

public

void

procedure()

public

void

securitycheck()

public

void

keeponrecord()

}

然後我們可以在測試用例中體現多型了

public

class

testcase

private

static

void

dynamicprocedure()

private

static

void

commonprocedure()

}

用個簡單的圖表示如下:

Java 設計模式 裝飾器模式

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

Java設計模式 裝飾器模式

裝飾器模式是一種結構型設計模式,可以做到在不改變原來物件功能的情況下,向原有的物件新增新的功能,起到乙個裝飾的作用。具體的做法是建立乙個裝飾器類,用來包裝原有的類,在不改變原有類方法的情況下,為原有類新增新的功能。來看乙個例子,我們在外面吃飯,有很多食物,其中有燒烤和火鍋。比如我們點了燒烤,但是覺得...

java設計模式之裝飾器模式

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