Java設計模式 裝飾者模式

2021-08-10 18:55:21 字數 2545 閱讀 7175

定義:

裝飾模式指的是在不必改變原類檔案和使用繼承的情況下,動態地擴充套件乙個物件的功能。它是通過建立乙個包裝物件,也就是裝飾來包裹真實的物件。

我們拿買蛋糕做乙個例子吧!

場景:我們去甜品店買蛋糕,裡面有各種口味的蛋糕。當你想買乙個適合你口味的蛋糕,而店員卻告訴你想要蛋糕沒有。那怎麼辦呢?別灰心,店員會告訴你,你可以定製這個蛋糕啊。雖然我們沒賣這蛋糕,但是蛋糕**可以幫你」裝飾」出來哦!

甜品抽象類

package com.designpattern.decorator;

//甜品抽象類

public

abstract

class sweet

//花費

public

abstract

double

getprice();

}

口味抽象類

package com.designpattern.decorator;

//口味抽象類

public

abstract

class

tastedecorator

extends

sweet

蛋糕類

package com.designpattern.decorator;

//蛋糕類,甜品抽象類的實現

public

class

cake

extends

sweet

@override

public string getdescription()

}

巧克力類

package com.designpattern.decorator;

//具體的口味,巧克力

public

class

chocolatedecorator

extends

tastedecorator

@override

public string getdescription()

@override

public

double

getprice()

}

水果類

package com.designpattern.decorator;

//具體的口味,水果

public

class

fruitdecorator

extends

tastedecorator

@override

public string getdescription()

@override

public

double

getprice()

}

芝士類

package com.designpattern.decorator;

//具體的口味,芝士

public

class

cheesedecorator

extends

tastedecorator

@override

public string getdescription()

@override

public

double

getprice()

}

測試類

package com.designpattern.decorator;

public

class test

}

測試結果

裝飾者模式uml 圖:

裝飾者模式中的4個角色

(1)被裝飾者抽象component:是乙個介面或者抽象類,定義最核心的物件,這個類是裝飾者的基類,例如sweet類

(2)被裝飾者具體實現concretecomponent:這是component介面或抽象類的實現,例如本例中的cake

(3)裝飾者decorator:一般是抽象類,實現component,它裡面必然有乙個指向component的引用,例如本例中tastedecorator

(4)裝飾者實現concretedecoratora和concretedecoratorb:用來裝飾最基本的類,如本例中的fruitdecorator,chocolatedecorator,cheesedecorator

使用場合

1.需要為某個現有物件新增乙個新的功能或職責時,可以考慮使用裝飾者模式

2.某個物件的職責經常發生變化或經常需要動態新增職責,避免為了適應這種變化造成的繼承擴充套件方式

Java設計模式 裝飾者模式

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

Java設計模式 裝飾者模式

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

Java 裝飾者設計模式

1 首先定義乙個介面 public inte ce worker 2 定義乙個木匠類 public class carpenter implements worker 3 定義乙個水管工類 public class plumber implements worker 4 這兒是關鍵,定義乙個裝飾者類...