Java 設計模式(二) 裝飾者模式

2021-08-15 10:09:03 字數 2717 閱讀 7344

一、簡介

裝飾者模式要求有乙個被裝飾物件及多個裝飾者,每個裝飾者與被裝飾者實現同乙個介面或有同乙個超類,被裝飾者持有乙個裝飾者物件,所有實現由持有物件完成,裝飾者則在方法執行過程中增強方法實現(如:在方法執行前進行許可權驗證,在返回結果前進行加密處理等)。

二、**示例

要求:

商家活動要求商品具有多種打折方式在不同節日使用:

1、滿30元減5元,滿50元減10元,滿100元減30元

2、滿30元打9.5折,滿50元打9折,滿100元打8折

3、…..更多活動待擴充套件

商品介面:

public

inte***ce igoods

普通商品類:

public

class

nomalgoods

implements

igoods

@override

public string getdescription()

@override

public

double

getprice()

}

打折商品類:

public

class

discountgoods

implements

igoods

@override

//獲取商品**,根據活動要求對**進行相應折扣處理

public

double

getprice() else

if(price<50)else

return price;

}@override

//獲取商品描述並新增折扣商品標誌

public string getdescription()

}

此處裝飾者獲得**及描述都是通過普通商品獲得,之後通過裝飾者本身進行一定的處理完成一層包裝(通常用來動態的新增類的職責功能)。

滿減商品類

public

class

decreasegoods

implements

igoods

@override

//獲取商品描述並新增滿減商品標誌

public string getdescription()

@override

//獲取商品**,根據活動要求對**進行相應滿減處理

public

double

getprice() else

if(price<50)else

return price;

}}

場景模擬:

public

class decoratortest else

if(type==2)else

//列印基本資訊

system.out.println("--------------------------------");

system.out.println(goods.getdescription()

+"---price:"+(int)goods.getprice());}}

//獲取隨機**

static

int getrandprice()

//獲取隨機商品名

static

char getdescription()

//初始化倉庫

static listinitwarehouse()

return warehouse;

}}

結果列印:

--------------------------------

g---折扣商品---price:32

--------------------------------

l---滿減商品---price:20

--------------------------------

m---滿減商品---折扣商品---price:30

--------------------------------

n---滿減商品---折扣商品---price:23

--------------------------------

g---折扣商品---price:68

--------------------------------

f---滿減商品---折扣商品---price:24

--------------------------------

y---折扣商品---price:27

總結:

這個例子存在著許多瑕疵,**中充斥著許多的if…else…,比如在每種活動商品類中處理**時僅在**的處理方式上有所不同,因此可以通過建立乙個**方案工廠來生成不同的處理方案,另外在場景模擬中,如果多出其他的打折方式需要新增更多的if…else,因此可以建立乙個商品工廠通過傳入不同引數,建立出不同的折扣商品。

Java設計模式 裝飾者模式

動態的將責任附加到物件上,想要擴充套件功能,裝飾者提供有別於繼承的另一種選擇 這種比繼承更加靈活機動的特性,也同時意味著更加多的複雜性。裝飾模式會導致設計中出現許多小類,如果過度使用,會使程式變得很複雜。例 package com.cn.gaoyan 公共抽象介面 public abstract c...

Java設計模式 裝飾者模式

愉快的工作又開始了。leader安排了乙個新的任務,給乙個酸奶店的點單軟體增加新的功能。這個程式的原來所有的酸奶都繼承於乳酪類 cheese public abstract class cheese public abstract intprice 所有具體的酸奶繼承乳酪類並重寫 price方法,以...

Java設計模式 裝飾者模式

定義 裝飾模式指的是在不必改變原類檔案和使用繼承的情況下,動態地擴充套件乙個物件的功能。它是通過建立乙個包裝物件,也就是裝飾來包裹真實的物件。我們拿買蛋糕做乙個例子吧!場景 我們去甜品店買蛋糕,裡面有各種口味的蛋糕。當你想買乙個適合你口味的蛋糕,而店員卻告訴你想要蛋糕沒有。那怎麼辦呢?別灰心,店員會...