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