定義:
裝飾模式指的是在不必改變原類檔案和使用繼承的情況下,動態地擴充套件乙個物件的功能。它是通過建立乙個包裝物件,也就是裝飾來包裹真實的物件。
我們拿買蛋糕做乙個例子吧!
場景:我們去甜品店買蛋糕,裡面有各種口味的蛋糕。當你想買乙個適合你口味的蛋糕,而店員卻告訴你想要蛋糕沒有。那怎麼辦呢?別灰心,店員會告訴你,你可以定製這個蛋糕啊。雖然我們沒賣這蛋糕,但是蛋糕**可以幫你」裝飾」出來哦!
甜品抽象類
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 這兒是關鍵,定義乙個裝飾者類...