java設計模式之裝飾者模式

2021-09-13 15:09:37 字數 1287 閱讀 5106

裝飾者模式動態地將責任附加到物件身上。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。

沒有應用場景這樣說是可能沒什麼感覺。

這裡我們假設我們的專案按照業務分模組,假定我們有使用者管理模組、訂單管理模組、支付管理模組,這幾個業務模組都需要日誌模組輸出日誌,安全模組進行加密,事物模組、效能統計模組

這些通用性的非功能性需求是幾個業務模組都需要的,跨模組的。如圖

拿我們的訂單模組來說,他的**實現有可能會這樣

public class placeordercommand 

}

然後我們其他模組也需要這麼做,就會發現**重複太多了。此時我們會想到抽象出來共有的,讓各種具體的業務類去實現具體的業務

public abstract class basecommond 

abstract void doingbussiness();

如上doingbussiness();就是具體的業務,哪個業務去繼承,就在此作方法做具體的業務。

但此方法有個巨大的缺點:父類定義了一切,要執行那些**,以什麼順序執行等等都被固定,無法更改。

此時我們的裝飾者模式便可以派上用場了

public inte***ce command 

記錄日誌裝飾器

public class loggerdecorator implements command

@override

public void excute()

}效能統計裝飾器

public class performancedecorator implements command

@override

public void excute()

}具體的業務

public class placeordercommant implements command

}

現在我們讓這個業務能夠列印日誌、效能統計

loggerdecorator loggerdecorator = new loggerdecorator(

new performancedecorator(new placeordercommand()));

loggerdecorator.excute();

這樣就可以使用任意數量的裝飾器,任意次序執行。

java設計模式之裝飾者模式

裝飾者模式 動態的將責任附加到物件上。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。類圖 barbecue類 實現 package com.decorator public abstract class barbecue public abstract double cost fish類 ...

Java設計模式之裝飾者模式

設想乙個情景,假設有一家奶茶店,店裡面只賣飲料,不賣其他的東西,且飲料的品種只有兩種分別為coffee和milk,那麼為這家店的訂單系統可以簡單的設計為兩個類,coffee類和milk類。如果有一天,店裡面賣的飲料品種增加了很多種,這個時候我們可以發現飲料種類很多,但是每一類都可以抽象出類似的屬性和...

Java設計模式之裝飾者模式

裝飾者模式在保持原有結構不變的情況下,新建類 新增功能 去包裝原有的類。1.實體抽象類 public inte ce drink 2.具體例項實現 public class coffee implements drink override public string getdescription 3...